amobbs.com 阿莫电子技术论坛

标题: WIN7下使用VC2010调试uCOS-II 2.91 [打印本页]

作者: littleGnss    时间: 2012-3-28 12:16
标题: WIN7下使用VC2010调试uCOS-II 2.91
本帖最后由 littleGnss 于 2012-3-28 12:19 编辑

业余时间自学uCOS-II源码,为了方便学习和调试,尝试在WIN7 Visual Studio 2010环境下调试uCOS-II 2.91

1. 下载uCOS-II 2.91

官方下载地址

为了能够运行范例,自己修改后的源码。[attach]2341[/attach]

2. 下载WIN32 移植代码

虽然官方提供了WIN32的移植代码,但是这个版本的代码只能支持比较简单的范例,类似外部中断,动态优先级转换等功能没有进行移植,应外官方移植支持的ucOS-ii的版本也比较低。官网x86 Win32 Simulator

所以本人采用了德国Hochschule Esslingen 大学Zimmermann教授的WIN32移植版本。该版本支持到uCOS-ii 2.84.经过少量修改后可支持最新的uCOS-ii 2.91. 此外该移植使用软件中断仿真外部中断。这个版本具体介绍参见 Zimmermann教授的网站

我自己稍加修改的的移植源文件。[attach]2359[/attach]

3. 下载例程

Zimmermann的移植包含了6个例程。 这六个例程的源代码。[attach]2362[/attach]
Zimmermann教授移植和范例地址

4. 新建VC2010工程
新建Win32 Console Application, 如图1所示:
[attach]2371[/attach]

Application Settings 选择 Console Application,取消掉Pre-complied Header,再选择Empty Project。 如图2所示:
[attach]2373[/attach]

为了方便起见,以如图3方式安排源文件,(根据需要可以自己安排自己的目录)
[attach]2377[/attach]
App目录下存放例程文件: app_cfg.h; INCLUDE.h; OS_CFG.h; Test.h.
Port目录下存放移植文件: PC.h.h, PC.c, os_cpu.h和os_cpu.c四个文件。
Source目录下存放uCOS-ii 2.91的内核文件。

将这些文件加入到工程的Source Files分类下。
在工程的property窗口,设置 General -> Character Set -> Use Multi-byte Character Set.
C/C++ -> General -> Additional Include Directories 分别加入App,Port和source目录。
Linker  -> Input -> Additional Dependencies 加入winmm.lib (关于时钟的win api)

由于Zimmermann的例程是基于uCOS 2.84的,为了使用2.91版本, 需要在OS_CFG.h中加入新的配置选项

#define OS_FLAG_NAME_EN           1u     /*     Enable names for event flag group                                  */
#define OS_MEM_NAME_EN            1u     /*     Enable memory partition names                                     */
#define OS_APP_HOOKS_EN           0u     /* Application-defined hooks are called from the uC/OS-II hooks */
#define OS_EVENT_MULTI_EN        1u     /* Include code for OSEventPendMulti()                                  */
#define OS_TASK_NAME_EN           1u     /*     Enable task names                                                      */
#define OS_TASK_REG_TBL_SIZE    1u     /*     Size of task variables array (#of INT32U entries)              */

为了能够成功编译,需要注释掉 ucos_ii.c文件中
#include <os_core.c>
#include <os_flag.c>
#include <os_mbox.c>
#include <os_mem.c>
#include <os_mutex.c>
#include <os_q.c>
#include <os_sem.c>
#include <os_task.c>
#include <os_time.c>
#include <os_tmr.c>

另外因为uCOS-ii在windows的移植上,无法合理计算idleTask的counter数,所以当OS_TASK_STAT_EN使能后,无法进行统计任务(1/10秒的时候OSIdleCtrMax的值比100还小)。所以通过修改os_core.c中如下行:

注释掉: OSIdleCtrMax /= 100uL;

将 OSCPUUsage   = (INT8U)(100uL - OSIdleCtrRun / OSIdleCtrMax); 改为
OSCPUUsage   = (INT8U)(100uL - OSIdleCtrRun * 100 / OSIdleCtrMax);

这样修改后,Example 3就可以顺利运行。如图4所示
[attach]2411[/attach]

最后对于Example0, 模拟中断,Zimmermann提供了中断发生的程序。 (注意,如果编译这个源文件irqGenerator.c, 也需要设置Character Set -> Use Multi-byte Character Set.
中断下载[attach]2420[/attach]

Example0运行截图。
[attach]2422[/attach]

参考网站:
http://www2.hs-esslingen.de/~zimmerma/software/index_uk.html
http://embedded-tips.blogspot.ca ... r-ucos-ii-with.html

本人初学uCOS-ii, 如有错误,欢迎指正。
作者: shotstar    时间: 2012-3-28 12:23
相当不错啊,谢谢分享啊!
作者: yelvAVR    时间: 2012-3-28 12:35
2010
用过2008 !
现在要QT了!
作者: yyg_760921    时间: 2012-3-28 12:38
牛,mark,备用。
作者: 430504    时间: 2012-3-28 12:39
的确很牛 但是2010太占资源了
作者: littleGnss    时间: 2012-3-29 00:00
430504 发表于 2012-3-28 12:39
的确很牛 但是2010太占资源了

还好吧,主要VC2010 比VC6好用太多了。界面也看的舒服多了。
作者: kneken    时间: 2012-3-29 00:15
很好,mark!!!
作者: XUEPENGBIN    时间: 2012-3-30 23:59
看起来很给力'明天下载,研究一下
作者: littleGnss    时间: 2012-3-31 00:01
XUEPENGBIN 发表于 2012-3-30 23:59
看起来很给力'明天下载,研究一下

呵呵,谢谢。有问题可以留言。
作者: littleGnss    时间: 2012-3-31 00:06
忘了一点, 在官方2.91 ucos_ii.c文件中,要加入下面的函数, 这个主要是为了能够通过编译。

/*
*********************************************************************************************************
* OSTaskReturnHook(OS_TCB *ptcb)
*
* Description: These functions does nothing just here to compile
*
*
*********************************************************************************************************
*/

void OSTaskReturnHook(OS_TCB *ptcb)
{
ptcb = ptcb;
}
作者: amsl    时间: 2012-4-5 20:51
mark一下,记号
作者: gwj221    时间: 2012-4-5 20:56
不错不错,相当的不错
作者: wgm8023ln    时间: 2012-4-7 10:55
大侠,能发下V2010给我吗,先谢过了。824076435@qq.com
作者: pangfen    时间: 2012-5-29 20:38
相当好,谢谢!
作者: s471513142    时间: 2013-1-29 17:44
学习了
作者: nongxiaoming    时间: 2013-1-29 19:00
大二就换2010的飘过,2010确实比vc6爽多,台式机不是很卡,经常项目同时开3个VS2010都还可以,但笔记本就比较卡了,估计现在的笔记本运行也没多大压力了,我的笔记本是比较老的~
作者: mysunmax    时间: 2013-1-29 19:03
mark      
作者: wind2100    时间: 2013-1-29 20:45
VS2010去调 UCOS2 好用不?
作者: i55x    时间: 2013-2-8 15:27
正好过年研究下ucos源码,用了5年不知道如何实现的。
作者: cuzn    时间: 2013-3-12 09:22
成功了!
编译时有冲突,把OS_CPU_C.c里的注释掉就行了。
作者: xxdwww    时间: 2013-3-29 00:34
楼主牛B,佩服。
作者: fenglinglzw    时间: 2013-4-16 22:04
下载的文件里面找不到TEST.h文件呢??
作者: littleGnss    时间: 2013-4-16 23:26
fenglinglzw 发表于 2013-4-16 22:04
下载的文件里面找不到TEST.h文件呢??

应该是笔误,只有TEST.c这个文件。
作者: youthdou    时间: 2013-9-9 11:39
挺厉害的。。。。
作者: shouzhou    时间: 2013-12-26 16:46
正好在整这个,找了几个,就是没找到具体的流程,谢谢!
作者: shouzhou    时间: 2013-12-26 18:29
楼主,编译时出现了错误        4        error LNK2005: _OSTaskStatHook 已经在 test.obj 中定义

作者: Victorsixy    时间: 2013-12-29 18:06
出现error LNK2005: _OSTaskStatHook 已经在 test.obj 中定义这个错误,只要在ucos_ii.c中加入

/*
*********************************************************************************************************
* OSTaskReturnHook(OS_TCB *ptcb)
*
* Description: These functions does nothing just here to compile
*
*
*********************************************************************************************************
*/

void OSTaskReturnHook(OS_TCB *ptcb)
{
ptcb = ptcb;
}

即可。其他警告是类型不匹配的问题。
已经试验成功
作者: brwang1983    时间: 2013-12-29 18:15
不错的东西,感谢分享
作者: kalo425    时间: 2013-12-30 23:36
不错不错。我记得上学期,简单过了一遍2。52用2010总是出现错误。试试楼主这个。马上考完试回家看看
作者: woshiaokeman    时间: 2014-3-31 23:01
感谢,收藏了~
作者: hanweng2012    时间: 2014-3-31 23:43
顶起,让更多人看到
作者: wildcat7261    时间: 2014-4-6 23:28
收藏了 谢谢              
作者: xuanfong1    时间: 2014-4-28 11:32
不错 先收藏
作者: dy624    时间: 2014-4-30 10:20
mark!!!!
作者: brwang1983    时间: 2014-4-30 13:05
留名学习
作者: leirui001    时间: 2014-5-5 08:33
谢谢分享                              
作者: devinzhang    时间: 2014-5-5 09:28
不错,MARK,楼主好实践
作者: daniellee1226    时间: 2014-7-27 19:55
中断触发不了啊,楼主。。。。 = =
作者: daniellee1226    时间: 2014-7-27 19:55
daniellee1226 发表于 2014-7-27 19:55
中断触发不了啊,楼主。。。。 = =

可以说一下,要怎么用么?
作者: Robbins    时间: 2014-8-26 00:12
本帖最后由 Robbins 于 2014-8-26 01:31 编辑

Example 0 的中断始终出不来,打印几次任务后就一直等待了,我把irqGenerator.exe程序放到项目可执行文件程序同一个文件夹,不知是不是这样做。
哦,看了网站原文,发现理解错了,应该是运行expample1的时候,再双击运行irqGenerator.exe ,但是expample1不知道为什么运行一下就等待了。
再看了irqGenerator的代码,irqGenerator.exe应该要从命令行运行吧,argc argv参数给多少呢?
作者: Robbins    时间: 2014-8-26 01:51
本帖最后由 Robbins 于 2014-8-26 02:04 编辑

搞定了,为了搞懂传入参数,重建了一个irq工程,加入irqGenerator.c,编译后在命令行下输入irq 1就可触发中断1。
看了网站说明,这个代码只是为了模拟ucos一些基本功能,使用会有些限制,纯属DIY,但是在没有板子的情况下玩玩还是不错滴,而且能用线程来模拟,确实高手
作者: youthdou    时间: 2014-10-5 18:17
果断还要再顶一下。。。。
作者: casa1919    时间: 2014-10-10 13:37
留名 ,有机会学习,mark一下
作者: BSMGood    时间: 2015-2-5 22:36
额,楼主哇,我居然出现了黑框框,连main函数都进不了,用你的方法在2013版本上运行的,编译貌似过了。
作者: arthur819    时间: 2015-4-2 10:25
谢谢啊 楼主 我先试试看 有问题的话还要麻烦你啊!
作者: 王晨    时间: 2015-7-15 17:08
windows8有没有哪位试过呀
作者: sj1125055001    时间: 2015-7-16 19:23
不错                        学习              
作者: 王晨    时间: 2015-8-21 00:39
提示这个   
Error        1        error C1083: Cannot open include file: 'includes.h': No such file or directory        f:\常用资料\ucos-ii\2\使用vc2010调试ucos-ii 2.91\win7_port\win7\pc.c        15        1        ConsoleApplication1
明明有这个头文件在里面呀  ,有没有人遇到过呀
作者: rayglei    时间: 2015-9-1 19:27
调完,应用在MCU中还需要更改吗?
目前我的STM32代码,都是在VS中建立工程,进行代码编写、修改;在MDK中进行编译、在线调试的,也算比较方便吧
作者: Chris_gong    时间: 2015-10-9 14:00
WIN7下使用VC2010调试uCOS-II 2.91  mark
作者: zw_7627    时间: 2017-12-13 00:12
littleGnss 发表于 2012-3-29 00:00
还好吧,主要VC2010 比VC6好用太多了。界面也看的舒服多了。

用VS2010,怎么提示找不到exe文件?
作者: xiaobocs    时间: 2018-4-9 11:10
非常棒!正是我想要学的。请问Zimmermann教授的port文件有吗?因为我的ucos是2.8版本的,多谢!
作者: way2888    时间: 2018-6-10 02:51
pc版的ucos不错
作者: dadian    时间: 2020-6-25 19:07
正在看ucos,下载在windows调试一下
作者: BS_good200xy    时间: 2021-6-29 16:05
这个正在研究。
作者: lnso    时间: 2021-6-29 20:30
这个正在研究
作者: BS_good200xy    时间: 2021-7-1 12:46
怎么模拟中断程序会没反应呢?另外,以下部分不注释掉才能编译过,注释了,反而不能过?

为了能够成功编译,需要注释掉 ucos_ii.c文件中
#include <os_core.c>
#include <os_flag.c>
#include <os_mbox.c>
#include <os_mem.c>
#include <os_mutex.c>
#include <os_q.c>
#include <os_sem.c>
#include <os_task.c>
#include <os_time.c>
#include <os_tmr.c>
作者: 0857lqw    时间: 2021-12-17 22:25
大佬,我想问一下各个例程的意义是什么,虽然这篇已经发布很久了,但是希望能看见,急用




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4