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存放的是与移植平台相关的代码,其中

include     是自己编写的 
os_cpu.h    定义了和处理器及编译器相关的定义及一些全局函数声明。
os_cpu_c.c  任务堆栈和时钟节拍中断服务相关代码。这两个文件移植的时候都是需要修改的,因为移植到不同的机器上这三个文件有所不同所以,可以到官网下载已经移植好的程序或者从UCOS II官网提供的移植范例里面找,UCOSII源码中没有包含这些文件。
为

了方便大家移植,附上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、关闭系统定时功能OS_TMR_EN定义成0u2、自己定义一个OS_TASK_TMR_PRIO

修改提示写保护,覆盖即可。
这里写图片描述

修改后继续编译
这里写图片描述
有错误,而且还不少,但都是些重复定义,打开ucosii.c看看
这里写图片描述
原来uc/OS的作者为了方便,将所有的代码都包括到ucosii.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>

如果再将所有的os_代码进行编译链接,当然会出现重复。问题找到了解决方法是:

1.移除ucosii.c
2.移除ucosii.c中包含的.c文件。

我这里选择移除ucosii.c中包含的.c文件,两种我都试过,因为这样项目看起来简洁一些,其实无所谓。

继续编译,还是报错
这里写图片描述
定位到OSStartHighRdy函数
这里写图片描述
错误都是些与时间相关的函数,此事必有蹊跷
这里写图片描述

看到这种错误心里就放心多了,每天都要遇到一万次,error LNK2019链接出错,肯定是少了链接库,想是想不出的,去网上找找。缺少链接库winmm.lib
这里写图片描述

winmm.lib是Windows多媒体相关应用程序接口

   timeBeginPeriod 设置应用程序或驱动程序使用的最小定时器分辨率
  timeEndPeriod 清除应用程序或驱动程序使用的最小定时器分辨率
  timeGetDevCaps 查询定时器设备以确定其性能
  timeGetSystemTime 检取从WINDOWS开始已逝去的毫秒数
  timeGetTime 检取从WINDOWS开始已逝去的毫秒数,此函数比上一条函数开销小
  timeKillEvent 毁掉指定的定时器回调事件
  timeSetEvent 设置一个定时器回调事件

到此编译已经成功:
这里写图片描述

另附工程下载地址:http://download.csdn.net/detail/zx3517288/9665137

最后感谢前辈开路!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值