最初是为Atmega16移植的,但由于Atmega64/128等内核均相同,所以只需在AVR Studio下配置目标芯片而不必修改源码即可运行.定时器采用T0.
软件工具:AVR Studio和WINAVR-2005**和VMLAB3.12.
ucos的源码是从<<嵌入式实时操作系统ucos ii>>第二版的光盘中拷贝的.相应的移植源码是在作者为X86写的源码基础之上作了简单的更改.同时还参考了网上的源码.
对ATMEGA的汇编语言,我不熟悉,所以部分汇编代码效率不高.
总的来说,在阅读了前书中的任务管理章节后即可进行源码的移植.当然,首先需要对目标芯片和编译器的使用有所了解.然后再按书中的指导修改相应代码即可.先自己尝试移植,再参考别人的代码,理解更深入.
移植过程中发现的小BUG:在调用OSTaskStkInit()初始化任务堆栈时,R1对应的单元 必需清零,否则在main.c中task0()调用LED_OFF()时并不将PORTB端口置0x0,而是置为 0x1.并且在系统运行时,操作系统会表现出一些莫名其妙的行为.后分析反汇编代码后发现,当 PORTB = 0x0时,实际将R1的值赋给PORTB.GCC默认R1的值在通常情况下为1,此后邮箱可以正常操作.可参考AVR-LIBC手册和调试时的反汇编代码.
附上完整的工程文件.https://static.assets-stash.eet-china.com/album/old-resources/2009/2/21/2957d2a7-d146-4f3a-90ca-3f3fa633fe58.zip .
用户519035 2011-6-25 13:22
用户102586 2011-1-5 20:48
用户77361 2009-12-6 22:41