littleGnss 发表于 2012-3-28 12:16:41

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, 如有错误,欢迎指正。

shotstar 发表于 2012-3-28 12:23:40

相当不错啊,谢谢分享啊!

yelvAVR 发表于 2012-3-28 12:35:06

{:2_37:}2010
用过2008 !
现在要QT了!

yyg_760921 发表于 2012-3-28 12:38:24

牛,mark,备用。

430504 发表于 2012-3-28 12:39:33

的确很牛 但是2010太占资源了

littleGnss 发表于 2012-3-29 00:00:41

430504 发表于 2012-3-28 12:39 static/image/common/back.gif
的确很牛 但是2010太占资源了

还好吧,主要VC2010 比VC6好用太多了。界面也看的舒服多了。

kneken 发表于 2012-3-29 00:15:33

很好,mark!!!

XUEPENGBIN 发表于 2012-3-30 23:59:01

看起来很给力'明天下载,研究一下

littleGnss 发表于 2012-3-31 00:01:20

XUEPENGBIN 发表于 2012-3-30 23:59 static/image/common/back.gif
看起来很给力'明天下载,研究一下

呵呵,谢谢。有问题可以留言。

littleGnss 发表于 2012-3-31 00:06:45

忘了一点, 在官方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:43

mark一下,记号

gwj221 发表于 2012-4-5 20:56:36

不错不错,相当的不错

wgm8023ln 发表于 2012-4-7 10:55:31

大侠,能发下V2010给我吗,先谢过了。824076435@qq.com

pangfen 发表于 2012-5-29 20:38:52

相当好,谢谢!

s471513142 发表于 2013-1-29 17:44:09

nongxiaoming 发表于 2013-1-29 19:00:46

大二就换2010的飘过,2010确实比vc6爽多,台式机不是很卡,经常项目同时开3个VS2010都还可以,但笔记本就比较卡了,估计现在的笔记本运行也没多大压力了,我的笔记本是比较老的~

mysunmax 发表于 2013-1-29 19:03:19

mark      

wind2100 发表于 2013-1-29 20:45:11

VS2010去调 UCOS2 好用不?

i55x 发表于 2013-2-8 15:27:06

正好过年研究下ucos源码,用了5年不知道如何实现的。

cuzn 发表于 2013-3-12 09:22:23

成功了!
编译时有冲突,把OS_CPU_C.c里的注释掉就行了。

xxdwww 发表于 2013-3-29 00:34:37

楼主牛B,佩服。

fenglinglzw 发表于 2013-4-16 22:04:46

下载的文件里面找不到TEST.h文件呢??

littleGnss 发表于 2013-4-16 23:26:19

fenglinglzw 发表于 2013-4-16 22:04 static/image/common/back.gif
下载的文件里面找不到TEST.h文件呢??

应该是笔误,只有TEST.c这个文件。

youthdou 发表于 2013-9-9 11:39:54

挺厉害的。。。。

shouzhou 发表于 2013-12-26 16:46:46

正好在整这个,找了几个,就是没找到具体的流程,谢谢!

shouzhou 发表于 2013-12-26 18:29:23

楼主,编译时出现了错误        4        error LNK2005: _OSTaskStatHook 已经在 test.obj 中定义

Victorsixy 发表于 2013-12-29 18:06:23

出现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:36

不错的东西,感谢分享

kalo425 发表于 2013-12-30 23:36:51

不错不错。我记得上学期,简单过了一遍2。52用2010总是出现错误。试试楼主这个。马上考完试回家看看

woshiaokeman 发表于 2014-3-31 23:01:23

感谢,收藏了~

hanweng2012 发表于 2014-3-31 23:43:25

顶起,让更多人看到

wildcat7261 发表于 2014-4-6 23:28:32

收藏了 谢谢            

xuanfong1 发表于 2014-4-28 11:32:30

不错 先收藏

dy624 发表于 2014-4-30 10:20:48

mark!!!!

brwang1983 发表于 2014-4-30 13:05:24

留名学习

leirui001 发表于 2014-5-5 08:33:36

谢谢分享                              

devinzhang 发表于 2014-5-5 09:28:36

不错,MARK,楼主好实践

daniellee1226 发表于 2014-7-27 19:55:25

中断触发不了啊,楼主。。。。 = =

daniellee1226 发表于 2014-7-27 19:55:46

daniellee1226 发表于 2014-7-27 19:55
中断触发不了啊,楼主。。。。 = =

可以说一下,要怎么用么?

Robbins 发表于 2014-8-26 00:12:28

本帖最后由 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:55

本帖最后由 Robbins 于 2014-8-26 02:04 编辑

搞定了,为了搞懂传入参数,重建了一个irq工程,加入irqGenerator.c,编译后在命令行下输入irq 1就可触发中断1。
看了网站说明,这个代码只是为了模拟ucos一些基本功能,使用会有些限制,纯属DIY,但是在没有板子的情况下玩玩还是不错滴,而且能用线程来模拟,确实高手

youthdou 发表于 2014-10-5 18:17:08

果断还要再顶一下。。。。

casa1919 发表于 2014-10-10 13:37:55

留名 ,有机会学习,mark一下

BSMGood 发表于 2015-2-5 22:36:29

额,楼主哇,我居然出现了黑框框,连main函数都进不了,用你的方法在2013版本上运行的,编译貌似过了。

arthur819 发表于 2015-4-2 10:25:40

谢谢啊 楼主 我先试试看 有问题的话还要麻烦你啊!

王晨 发表于 2015-7-15 17:08:09

windows8有没有哪位试过呀

sj1125055001 发表于 2015-7-16 19:23:07

不错                        学习            

王晨 发表于 2015-8-21 00:39: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:30

调完,应用在MCU中还需要更改吗?
目前我的STM32代码,都是在VS中建立工程,进行代码编写、修改;在MDK中进行编译、在线调试的,也算比较方便吧

Chris_gong 发表于 2015-10-9 14:00:04

WIN7下使用VC2010调试uCOS-II 2.91mark

zw_7627 发表于 2017-12-13 00:12:10

littleGnss 发表于 2012-3-29 00:00
还好吧,主要VC2010 比VC6好用太多了。界面也看的舒服多了。

用VS2010,怎么提示找不到exe文件?

xiaobocs 发表于 2018-4-9 11:10:52

非常棒!正是我想要学的。请问Zimmermann教授的port文件有吗?因为我的ucos是2.8版本的,多谢!

way2888 发表于 2018-6-10 02:51:35

pc版的ucos不错

dadian 发表于 2020-6-25 19:07:44

正在看ucos,下载在windows调试一下

BS_good200xy 发表于 2021-6-29 16:05:35

这个正在研究。

lnso 发表于 2021-6-29 20:30:09

这个正在研究

BS_good200xy 发表于 2021-7-1 12:46: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:00

大佬,我想问一下各个例程的意义是什么,虽然这篇已经发布很久了,但是希望能看见,急用
页: [1]
查看完整版本: WIN7下使用VC2010调试uCOS-II 2.91