VS2013+uCOSII V2.91(uCOSII移植)
最近在看任哲的《嵌入式实时操作系统原理及应用》,看了前面8章,虽然能看懂书上的代码,但因为没有动手写过,心里没有底,所以还是得动手写点代码测试。书上推荐的编译平台是Borland C 3.1,但因为Win10不知道什么原因,安装不了,就放弃了。uCOSII既然是用C写的可移植实时操作系统,能不能移植到PC上用VS编译呢。于是就在网上搜索了一下,果然有前辈开路。
下面开始讲述怎么把uCOSII移植到VS2013上还有我的几个疑问。
1、下载uCOSII源码
http://download.csdn.net/detail/zx3517288/9665021 (V2.91)
源码目录很简单,Source下存的就是uCOSII源文件。
2、新建VS2013工程
为了目录结构清晰,在工程目录下新建3个文件夹App,Ports,Source。将下载的源文件拷贝到工程目录的Source中,App用于存放用户代码,Ports用于存放与移植平台相关的代码。工程目录如下:
3、添加项目文件
Ports下的与移植平台相关解决方案目录
首先其中App存放的是用户代码,uCOSII中存的是uCOSII源文件,Ports存放的是与移植平台相关的代码,其中
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
了方便大家移植,附上App和Ports文件的下载地址:
http://download.csdn.net/detail/zx3517288/9665116
4、项目配置
设置编译平台
添加头文件包含目录
5、编译
编译后发现还很多错误
uCOSII.h源码中头文件包含了os_cfg,但在源文件中没有找到os_cfg,但能找到一个相似的os_cfg_r.h,去网上搜索一下os_cfg_r.h,原来os_cfg_r.h是一个系统配置文件,可以设置打开或者关闭系统功能,暂时不管它,先修改为os_cfg.h。
继续编译还是有错
错误定位到创建OSTmr_Task的任务优先级,系统提示这个任务优先级没有宏定义。先Ctrl+F搜索一下OS_TASK_TMR_PRIO,果然又有新发现
OSTmr_Task是系统定时器的时候用到,解决的办法有两种,
- 1
- 2
- 3
- 1
- 2
- 3
修改提示写保护,覆盖即可。
修改后继续编译
有错误,而且还不少,但都是些重复定义,打开ucosii.c看看
原来uc/OS的作者为了方便,将所有的代码都包括到ucosii.c文件中了,即
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如果再将所有的os_代码进行编译链接,当然会出现重复。问题找到了解决方法是:
- 1
- 2
- 1
- 2
我这里选择移除ucosii.c中包含的.c文件,两种我都试过,因为这样项目看起来简洁一些,其实无所谓。
继续编译,还是报错
定位到OSStartHighRdy函数
错误都是些与时间相关的函数,此事必有蹊跷
看到这种错误心里就放心多了,每天都要遇到一万次,error LNK2019链接出错,肯定是少了链接库,想是想不出的,去网上找找。缺少链接库winmm.lib
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
到此编译已经成功:
另附工程下载地址:http://download.csdn.net/detail/zx3517288/9665137
最后感谢前辈开路!
isyefeng: 没有附件啊博主