ucos2.52怎么移植IAR EWAVR?
ucos2.52怎么移植IAR EWAVR? 2.76版或最新的版本 IAR有两个堆栈,CSTACK和RSTACK,切换任务,堆栈是怎么处理的? ucos的官方网站上有现成的。 IARAVR工作方式和51工作有点类似当CALL 函数的时候,系统硬件会自动压栈函数返回地址,这就是所谓的硬件栈RSTACK,指针用SP
当产生调用后进入子函数,函数需要用到到寄存器和变量,这些变量就需要保护,那么IAR就用了一个模拟栈来保存这些东西,这就是所谓的CSTACK,指针用Y
给每个任务分配一段RAM,这个RAM区域,前一段给软堆栈用,后半段给硬件用,硬件栈的尺寸设置大小就要看函数调用的层数了,若果你函数最大调用层数是32层,那么硬件栈的尺寸大于32X2 =64Bytes就可以了 标记! 不太好移植。还是先在LM3S上ucos,又现成移植好的。 移植UCOS比想象中的要难。 总算是有点眉目了。
UCOS的中断写法太过麻烦,且IAR实现裸中断也不方便。
不如将OSCtxSw代替OSIntCtxSw合并,不区分中断切换和任务中切换。
这样移植起来也方便些,中断写法也方便(中断写法不必用汇编),只不过多占用一些堆栈。 你用的是EWAVR的什么版本不可以写裸中断?
EWAVR 4.20A以后都可以写裸中断,写法如下:
__nested __interrupt void your_interrupt_function()
试试! 多谢楼上。__nested __interrupt是嵌套中断。
__nested __interrupt void your_interrupt_function()
不是裸中断,是中断中快速开中断,类似GCC的INTERRUPT()宏。 是不是要求中断编译器不要自动保护寄存器器?
如果是这样那你可以这样
#pragma type_attribute=__raw
__interrupt void Your_Interrupt_Handler(void)
{
}
或
__raw __interrupt void Your_Interrupt_Handler(void)
{
}
试试! 多谢楼上。 试试楼上的楼上的方法 测试测试 好像报错的 兄弟 【9楼】 korren 是南昌的吗?我现在也在南昌 IAR中断写法:SIGNAL(),INTERRUPT(),SIGNAL_NAKED(),INTERRUPT_NAKED()
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=963867&bbs_page_no=1&bbs_id=1000
第一次移植UCOS2,ATMEGA16,一个歌曲实验
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=963191&bbs_page_no=2&bbs_id=1000 to sciencehero,
我是南昌的,现在在广东.
页:
[1]