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
官方下载地址
为了能够运行范例,自己修改后的源码。
2. 下载WIN32 移植代码
虽然官方提供了WIN32的移植代码,但是这个版本的代码只能支持比较简单的范例,类似外部中断,动态优先级转换等功能没有进行移植,应外官方移植支持的ucOS-ii的版本也比较低。官网x86 Win32 Simulator
所以本人采用了德国Hochschule Esslingen 大学Zimmermann教授的WIN32移植版本。该版本支持到uCOS-ii 2.84.经过少量修改后可支持最新的uCOS-ii 2.91. 此外该移植使用软件中断仿真外部中断。这个版本具体介绍参见 Zimmermann教授的网站。
我自己稍加修改的的移植源文件。
3. 下载例程
Zimmermann的移植包含了6个例程。 这六个例程的源代码。
Zimmermann教授移植和范例地址
4. 新建VC2010工程
新建Win32 Console Application, 如图1所示:
Application Settings 选择 Console Application,取消掉Pre-complied Header,再选择Empty Project。 如图2所示:
为了方便起见,以如图3方式安排源文件,(根据需要可以自己安排自己的目录)
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所示
最后对于Example0, 模拟中断,Zimmermann提供了中断发生的程序。 (注意,如果编译这个源文件irqGenerator.c, 也需要设置Character Set -> Use Multi-byte Character Set.
中断下载
Example0运行截图。
参考网站:
http://www2.hs-esslingen.de/~zimmerma/software/index_uk.html
http://embedded-tips.blogspot.ca/2010/02/running-pc-utility-for-ucos-ii-with.html
本人初学uCOS-ii, 如有错误,欢迎指正。 相当不错啊,谢谢分享啊! {:2_37:}2010
用过2008 !
现在要QT了! 牛,mark,备用。 的确很牛 但是2010太占资源了 430504 发表于 2012-3-28 12:39 static/image/common/back.gif
的确很牛 但是2010太占资源了
还好吧,主要VC2010 比VC6好用太多了。界面也看的舒服多了。 很好,mark!!! 看起来很给力'明天下载,研究一下 XUEPENGBIN 发表于 2012-3-30 23:59 static/image/common/back.gif
看起来很给力'明天下载,研究一下
呵呵,谢谢。有问题可以留言。 忘了一点, 在官方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;
} mark一下,记号 不错不错,相当的不错 大侠,能发下V2010给我吗,先谢过了。824076435@qq.com 相当好,谢谢! 大二就换2010的飘过,2010确实比vc6爽多,台式机不是很卡,经常项目同时开3个VS2010都还可以,但笔记本就比较卡了,估计现在的笔记本运行也没多大压力了,我的笔记本是比较老的~ mark VS2010去调 UCOS2 好用不? 正好过年研究下ucos源码,用了5年不知道如何实现的。 成功了!
编译时有冲突,把OS_CPU_C.c里的注释掉就行了。 楼主牛B,佩服。 下载的文件里面找不到TEST.h文件呢?? fenglinglzw 发表于 2013-4-16 22:04 static/image/common/back.gif
下载的文件里面找不到TEST.h文件呢??
应该是笔误,只有TEST.c这个文件。 挺厉害的。。。。 正好在整这个,找了几个,就是没找到具体的流程,谢谢! 楼主,编译时出现了错误 4 error LNK2005: _OSTaskStatHook 已经在 test.obj 中定义
出现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;
}
即可。其他警告是类型不匹配的问题。
已经试验成功 不错的东西,感谢分享 不错不错。我记得上学期,简单过了一遍2。52用2010总是出现错误。试试楼主这个。马上考完试回家看看 感谢,收藏了~ 顶起,让更多人看到 收藏了 谢谢 不错 先收藏 mark!!!! 留名学习 谢谢分享 不错,MARK,楼主好实践 中断触发不了啊,楼主。。。。 = = daniellee1226 发表于 2014-7-27 19:55
中断触发不了啊,楼主。。。。 = =
可以说一下,要怎么用么? 本帖最后由 Robbins 于 2014-8-26 01:31 编辑
Example 0 的中断始终出不来,打印几次任务后就一直等待了,我把irqGenerator.exe程序放到项目可执行文件程序同一个文件夹,不知是不是这样做。
哦,看了网站原文,发现理解错了,应该是运行expample1的时候,再双击运行irqGenerator.exe ,但是expample1不知道为什么运行一下就等待了。
再看了irqGenerator的代码,irqGenerator.exe应该要从命令行运行吧,argc argv参数给多少呢? 本帖最后由 Robbins 于 2014-8-26 02:04 编辑
搞定了,为了搞懂传入参数,重建了一个irq工程,加入irqGenerator.c,编译后在命令行下输入irq 1就可触发中断1。
看了网站说明,这个代码只是为了模拟ucos一些基本功能,使用会有些限制,纯属DIY,但是在没有板子的情况下玩玩还是不错滴,而且能用线程来模拟,确实高手 果断还要再顶一下。。。。 留名 ,有机会学习,mark一下 额,楼主哇,我居然出现了黑框框,连main函数都进不了,用你的方法在2013版本上运行的,编译貌似过了。 谢谢啊 楼主 我先试试看 有问题的话还要麻烦你啊! windows8有没有哪位试过呀 不错 学习 提示这个
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
明明有这个头文件在里面呀,有没有人遇到过呀 调完,应用在MCU中还需要更改吗?
目前我的STM32代码,都是在VS中建立工程,进行代码编写、修改;在MDK中进行编译、在线调试的,也算比较方便吧 WIN7下使用VC2010调试uCOS-II 2.91mark littleGnss 发表于 2012-3-29 00:00
还好吧,主要VC2010 比VC6好用太多了。界面也看的舒服多了。
用VS2010,怎么提示找不到exe文件? 非常棒!正是我想要学的。请问Zimmermann教授的port文件有吗?因为我的ucos是2.8版本的,多谢! pc版的ucos不错 正在看ucos,下载在windows调试一下 这个正在研究。 这个正在研究 怎么模拟中断程序会没反应呢?另外,以下部分不注释掉才能编译过,注释了,反而不能过?
为了能够成功编译,需要注释掉 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> 大佬,我想问一下各个例程的意义是什么,虽然这篇已经发布很久了,但是希望能看见,急用
页:
[1]