转载一篇写得不错的UCOS-II移植文章

 

今天突然有个想法,是否在其他结构比较简单的平台上移植比较容易一点,正好同学有一个凌阳的精简板,反正今天是星期天,就当是休息了。

首先肯定是去熟悉SPCE 061A 的结构和IDE了。主要是存储器结构、指令系统和中断这几个部分。本来不是做这个的,没有必要深究,总体看看,知道在哪些地方查就行,所以看到很快。于是摆好uCOS系统的资料,按照移植步骤,一个个文件、函数地写好,其他没有什么,就是时间节拍比较难一点,用了不少时间写,主要是去熟悉凌阳的中断系统,了解几个寄存器的用法。按照标准移植函数步骤写下来,代码也就10来行。

在这里我想说的不是如何移植,而是编译。凌阳的IDE说实话肯定是不太完善的。因为我同学本科的时候做过,那个时候似乎听他提到过这个问题。不过我今天算是感受到了。

写好文件,编译——我的错,有一个函数写错了,编译没有通过。然后我改了。编译,???怎么回事,还是这个错误?

大体是这样的,我写了一个OSTaskSw函数(原本想写OSCtxSw的),结果,这个IDE居然还真的认出来一个OSTaskSw,我当时就晕了,我好像在内核里没有看到过这个函数嘛。我赶紧去内核查找一下,没有嘛。我把OSTaskSw函数改成OSCtxSwOS_CPU.H里),再编译,还是有。更晕了~

这个错误是这样报的:

Error L0080: The external symbol "_memset" has not a public definition.

Error L0080: The external symbol "_OSTaskSw" has not a public definition.

memset嘛好说,这应该是我没有包含某个库文件,我只是知道这是个字符串处理函数,应该在string.h里面,但是包含了它,还是有这个错误(现在还没有解决,惭愧~),但是OSTaskSw都没有了还给我报什么?

后来我想,这个IDEGCC的,是不是因为增量编译,链接的时候用了以前的文件?干脆把所有以前编译生成的文件删除了(用clear没有用),再编译,嘿嘿,还真的没有这个错误了。I 服了HIM。确实没有用过,问题都不好找。

今天比较晚了,明天来解决另一个问题吧!我怀疑最大的可能是在工程文件的组织上有问题,应该好好梳理一下。因为我发现,编译应用程序文件是没有错的,Build的时候才出现。

 

心头憋得慌,一大早就跑到实验室来调试。弄了半天,把include文件夹中的memset搜索了一遍,就只有一个string.h里面有嘛。哪里还有其他的哩?难道我包含的地方不对?“SPCE 061A .h”包含在includes.h中,能够使用,按说所有.c文件都包含includes.h,放在这里是没有问题的嘛。不过上天要它说不行,我也没辙啊~

没办法,上网查查吧。

一说是版本问题!我意识到,好像以前看过一个版本,在OSTask.c中好像是没有用到memset函数。那下载一个老版本的来实验一下,总不能让我去改内核吧,改出来更多问题,得不偿失。我下的是2.00的。

经过一番挣扎一般的调试(很久都没有怎么用过凌阳的IDE,很多功能不会用了,又不知道其Bug,出了问题就只好老老实实重新编译等等,确实很累),总算调通了。

经过记录下来——为了系统化,把uCOS标准移植伪码加上对比。

 

移植准备:

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值