uC/OS-II 在 AVR 上的移植
hotislandn@hotmail.com
IDE: PN
Compiler: AVR-GCC ( WinAVR 20050214 )
Target: ATmega16 @ 7.3728MHz
2005-07-28
V1.0
1. 由于ATmega16的RAM资源很少,所以在OS_CFG.H中关闭所有不必要的功能,同时优化代码,减少RAM占用
在os_core.c中,有两个数组: INT8U const OSMapTbl[8]与 INT8U const OSUnMapTbl[256],虽然声明为const类型,但是avr-gcc并不会将其放置在flash中,必须加以修改为INT8U const OSMapTbl[8] PROGMEM 与INT8U const OSUnMapTbl[256] PROGMEM ,同样的,该文件中访问这些数组的语句也必须做相应的修改。这样的结果是速度会受到影响,但是由于仍然是查表操作,任务切换的时间还是确定的。
2. 任务说明
系统中一共有5个用户任务:Task1-Task5,其优先级依次为1,2,3,5,4。每个用户任务的堆栈均为OS_USER_TASK_STK_SIZE(定义于os_cfg.h,目前为64字节)。
系统中建立有一个信号量T2sem与一个邮箱Tmbox。
Task1完成了Timer0的初始化,并打开了定时器中断,使得任务调度可以正常进行。此后,该任务只隔一个很短的时间使得变量t1增加,同时取反PORTB.1。
Task2初始化了Timer2,并使能了Timer2中断,然后任务挂起,等待信号量T2sem,如果等到且无错误,则使得变量t2增加。
Task3使得PD2上出现一个脉冲,以触发INT0,并使得变量t3增加。
Task4使得PD3上出现一个脉冲,以触发INT1,并使得变量t4增加。
Task5使得该任务挂起等待邮箱中有一条消息,如果取得消息,就将t5的值更新。
3. 中断系统
需要引用系统服务的中断,其底层部分被定义于AVRect.S中,中断的处理函数被定义于AVRisr.c中,例如例子中外部中断0与外部中断1的服务函数。
对于无需引用系统服务的中断函数,比如例子中的Timer2比较匹配中断,可以全部定义于AVRisr.c中。
Timer2的中断只是使得变量t6增加。
INT0的中断向任务发出信号量。
INT1的中断发送一个消息到信箱。
由于AVR的RAM有限,移植并未考虑中断重入的问题。
2005-07-16
V0.9
1. OS版本为2.76
2. 使用Timer0的比较匹配中断为系统定时,频率为100Hz
3. 三种临界代码保护方式均可以使用,在OS_CPU.h里直接设置即可
如果安装了WinAVR20050214,则直接运行start.bat,输入make all即可开始编译。
如果需要在AVRStudio仿真,运行make extcoff后即可生成调试所需的cof文件。
UCOS_ATmega16.zip_atmega16 ucos_uCOS avr_ucosii avr gcc
版权申诉
129 浏览量
2022-09-22
23:32:25
上传
评论 1
收藏 85KB ZIP 举报
朱moyimi
- 粉丝: 61
- 资源: 1万+
最新资源
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
- 基于matlab+DWT的图像水印项目,数字水印+源代码+文档说明+图片+报告pdf
- (优秀毕业设计)基于python实现的数字图像可视化水印系统的设计与实现,多种数字算法实现+源代码+文档说明+理论演示pdf
- 基于DWT-DCT-SVD和deflate压缩的数字水印方法python源码+Gui界面+演示视频(高分毕业设计)
- 基于matlab实现DWT、DCT、SVD算法数字图像水印可视化系统+GUI界面+文档说明+详细注释(高分毕业设计)
- NCIAE-Data-Structure大一大二笔记
- 学习wireshark笔记
- digital-image-数据可视化笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈