凌阳科技大学计划论坛

首页 » 16位应用专题 » OS应用专区 » ucosii 移植错误报告,希望可以让大伙避免不必要的麻烦
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
希望不要对大伙引起不必要的麻烦。
 1 
查看完整版本: ucosii 移植错误报告,希望可以让大伙避免不必要的麻烦