stebin - 2007-12-4 14:06:00
凌阳官方网页资料下载的 ucos_for_unsp2.rar ;
作者: 张利 移植的 有误移植的 开中断 有问题
#define OS_EXIT_CRITICAL() __asm__("INT IRQ \n\t" "INT FIQ \n\t")
根据;凌阳的数据资料:
i. INT FIQ 功能:允许 FIQ 中断,关闭 IRQ 中断。
ii. INT IRQ 功能:允许 IRQ 中断,关闭 FIQ 中断。
iii. INT FIQ,IRQ 功能:允许 FIQ 中断,允许 IRQ 中断。
OS_EXIT_CRITICAL()导致的后果是IRQ 中断关闭; 而时钟中断是采用128HZ的IRQ6 ,导致时钟中断失去响应;而为什么有时候有可以运行的好好的
以为移植的OSCtxSw_in:
// OSTCBStrPtr -->R1
// OSTCBStrPtr 是TCB结构的第一项,所以就是OSTCBCur指想的内存单元
// R1为任务堆栈的头指针 R1=[_OSTCBCur]
// R2中为任务堆栈头地址存放的第一条内容,是堆栈的长度 R1=[R1] R2=[R1]
// R3为系统堆栈的高位地址+1
R3=OSStkStartrestore_stack:
R1+=1
R3-=1
R4=[R1]
[R3]=R4
R2-=1
JNZ restore_stack
// 调整堆栈指针
R3-=1
SP=R3
// OSRunning =TRUE
R1=0x0001
[_OSRunning]=R1
POPALL
INT FIQ
INT IRQ
RETI
/****************
“ POPALL INT FIQ INT IRQ RETI” 任务的切换后 开了IRQ;关闭了FIQ 就对 FIQ不响应了
导致这些移植都是对中断指令的错误记忆的 ;只要把#define OS_EXIT_CRITICAL() __asm__("INT FIQ,IRQ \n\t");INT FIQ INT IRQ 改成 INT FIQ,IRQ ,就可以了。
[b]由于我也是参考此移植一份uCOS-II-V276 并于2007-03-26在论坛 17:31发表 名为"移植uCOS-II-V276的全过程"帖子 [/b]
打包的文件2007327163036254.rar
[url]http://bbs.unsp.com/showtopic.aspx?topicid=23877[/url]
旧论坛为
[url]http://www.unsp.com.cn/dvbbs/dispbbs.asp?BoardID=10&ID=23877[/url]
[b]在此给予报错申明,请大家不要使用我的移植代码 该下载文件为 2007327163036254.rar
希望不要对大伙引起不必要的麻烦。