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源码中没有包含这些文件。
为
 
 
  • 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、关闭系统定时功能OS_TMR_EN定义成0u2、自己定义一个OS_TASK_TMR_PRIO

 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

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

修改后继续编译 
这里写图片描述
有错误,而且还不少,但都是些重复定义,打开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>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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

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

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

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

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

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

最后感谢前辈开路!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值