搜索
热门关键词:
AVR
PTC
MEMS
模拟前端
protel99se
手机版
官方微博
微信公众号
登录
|
免费注册
首页
新闻
新品
文章
下载
电路
问答
视频
职场
杂谈
会展
工具
博客
论坛
在线研讨会
技术频道:
单片机/处理器
FPGA
软件/编程
电源技术
模拟电子
PCB设计
测试测量
MEMS
系统设计
无源/分立器件
音频/视频/显示
应用频道:
消费电子
工业/测控
汽车电子
通信/网络
医疗电子
机器人
当前位置:
EEChina首页
›
论坛
›
ARM训练班
返回列表
查看:
5029
|
回复:
1
Keil MDK下uC/OS-II在FL2440上的移植
[复制链接]
yanhong
yanhong
当前离线
积分
54325
发表于 2010-11-18 13:04:39
|
显示全部楼层
|
阅读模式
贸泽电子有奖问答视频,回答正确发放10元微信红包
关键词:
Keil
,
MDK
,
移植
关于uCOS-II的种种阿呆就不说了,很多初学者从此踏上操作系统之路
uCOS-II在ADS上的移植很常见,而在KEIL MDK下的移植却不是很多,阿呆根据ADS下的移植范例,结合自
己最近使用KEIL MDK的稍许心得,记录一下uCOS-II在KEIL MDK下的移植过程。
一:准备源码
在官网上下载了uCOS-II的源码,好像似乎是2..91的了.
二:编写OS移植文件
1.编写OS_cpu_c.c
这个文件阿呆是在ADS下的移植范例里面copy的,直接使用就可以了
注:2.89开始添加了OS_TaskReturn(),它会调用OSTaskReturnHook(),如果copy的版本低于2.89则需要
自己添加一下。
2.编写OS_cpu_a.s
这个文件也是阿呆在ADS下的一直范例里面copy的,同样的S3C2440平台,这下函数一样的,而KEIL MDK
与ADS相比,在语法上没有什么特别的要求。
3.添加系统心跳定时器
阿呆使用没有输出引脚的Timer4作为系统心跳定时器,具体实现参看:OS_Timer4_c.c
三:修改启动代码
1.如果直接将ADS下的启动代码copy到MDK下,编译会提示出错,一般错误是:.\OutPutFiles\uCOS-
II_Uart.axf: Error: L6238E: 2440_init.o(Init_2440) contains invalid call from '~PRES8 (The
user did not require code to preserve 8-byte aligment of 8-byte data objects)' function to
'REQ8 (Code was permitted to depend on the 8-byte aligment of 8-byte data items)' function
App_Main.
解决方法是在代码段前部添加:PRESERVE8,如图1
2.将IRQ中断交给uC/OS-II管理
代码如下:
;****************************************************
;将OS_CPU_IRQ_ISR地址装入HandleIRQ中,IRQ中断交给uCOS-II管理
;****************************************************
LDR R0,=HandleIRQ ;This routine is needed
LDR R1,=OS_CPU_IRQ_ISR ;if there isn't 'subs pc,lr,#4' at 0x18,
0x1c
STR R1,[r0]
即发生IRQ中断时系统跳转到OS_CPU_IRQ_ISR处执行uC/OS-II中断服务函数,具体事件由它负责。
四:设置MDK编译参数信息
1.选择CPU:
2.填写存储器信息:
3.编写scatter
如果不想自己编写此文件,KEIL会自动生成文件模板,选择如下:
但是阿呆不推崇这中方法,这种方法让人有种雾里看花的感觉,不明了
还是自己编写吧:
设置如下:
Scatter文件内容:
/*-------------------------------------------------------------
运行域在SRAM中,可使用以下写法,也可直接将WR,ZI段跟在ROM后面
-------------------------------------------------------------*/
LR_ROM1 0x30000000 0x01000000 { ; load region size_region
RO 0x30000000 0x01000000 { ; load address = execution address
2440_init.o (Init_2440, +First)
.ANY (+RO)
}
RW 0x31000000 0x01000000 { ; RW data
.ANY (+RW)
}
ZI +0 {
.ANY (+ZI)
}
}
很多同志会遇到.\OutPutFiles\uCOS-II_Uart.axf: Error: L6218E: Undefined symbol
Image$$RO$$Base (referred from 2440_init.o).
从ADS copy过来的和KEIL默认的标号是不一致的,修改scatter文件里面的ER_ROM1为RO标号,RW_RAM1为
RW,以此类推即可。
阿呆安排运行域地址从0x30000000-0x31000000,数据域地址:0x31000000-0x32000000
安排方式纯属个人爱好。
由于MDK默认生成的输出文件时HEX的,要使之生成BIN的需要添加一条命令:
如下:
在RUN #1,中添加:D:\ProgramFiles\KEIL\MDK\
ARM
\BIN40\fromelf.exe --bin -o
./OutPutfiles/uCOS-II_Uart.bin ./OutPutfiles/uCOS-II_Uart.axf
具体路径需调整。
至此为止,uCOS-II的移植已经完毕,阿呆没有在uC/OS-II的具体细节上纠结,而是将精力放在MDK环境
的使用上,简单介绍了一下在KEIL MDK下编写程序的基本步骤。
编译之:
OK啦。
相关文章
•
如何快速、简单地迁移Keil MDK工程项目到其他开发工具
•
【教程9】疯壳·人形街舞机器人-整机代码
•
迅为6818开发板-Qt4.7-4G_EC20的移植
•
迅为IMX6开发板-QT5.7移植使用文档
•
从8位单片机移植到16位单片机和数字信号控制器的一些注意事项
•
MDK-ARM Version 5.26下载地址
•
最新版Keil MDK下载
•
对于C语言可移植性的一些思考
回复
举报
youyou_zh
youyou_zh
当前离线
积分
3811
发表于 2011-4-5 14:30:15
|
显示全部楼层
bucuo
回复
支持
反对
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
消费电子
电源技术
模拟电子技术
测试测量
供求发布
PCB设计
电工杂谈
关于我们
-
服务条款
-
使用指南
-
站点地图
-
友情链接
-
联系我们
电子工程网
© 版权所有
京ICP备16069177号
| 京公网安备11010502021702
快速回复
返回顶部
返回列表