ATmega32 发表于 2008-3-29 09:15:22

ucos2.52怎么移植IAR EWAVR?

ucos2.52怎么移植IAR EWAVR?

ATMEGA_007 发表于 2008-3-29 09:21:05

2.76版或最新的版本

ATmega32 发表于 2008-3-29 10:31:43

IAR有两个堆栈,CSTACK和RSTACK,切换任务,堆栈是怎么处理的?

marker 发表于 2008-3-29 11:01:26

ucos的官方网站上有现成的。

ATMEGA_007 发表于 2008-3-29 12:04:17

IARAVR工作方式和51工作有点类似

当CALL 函数的时候,系统硬件会自动压栈函数返回地址,这就是所谓的硬件栈RSTACK,指针用SP

当产生调用后进入子函数,函数需要用到到寄存器和变量,这些变量就需要保护,那么IAR就用了一个模拟栈来保存这些东西,这就是所谓的CSTACK,指针用Y

给每个任务分配一段RAM,这个RAM区域,前一段给软堆栈用,后半段给硬件用,硬件栈的尺寸设置大小就要看函数调用的层数了,若果你函数最大调用层数是32层,那么硬件栈的尺寸大于32X2 =64Bytes就可以了

steven 发表于 2008-3-29 12:21:07

标记!

ATmega32 发表于 2008-3-29 17:39:03

不太好移植。还是先在LM3S上ucos,又现成移植好的。

ATmega32 发表于 2008-3-30 13:32:01

移植UCOS比想象中的要难。

ATmega32 发表于 2008-3-30 19:12:16

总算是有点眉目了。

UCOS的中断写法太过麻烦,且IAR实现裸中断也不方便。

不如将OSCtxSw代替OSIntCtxSw合并,不区分中断切换和任务中切换。
这样移植起来也方便些,中断写法也方便(中断写法不必用汇编),只不过多占用一些堆栈。

korren 发表于 2008-3-30 20:14:06

你用的是EWAVR的什么版本不可以写裸中断?
EWAVR 4.20A以后都可以写裸中断,写法如下:
__nested __interrupt void your_interrupt_function()

试试!

ATmega32 发表于 2008-3-30 20:25:57

多谢楼上。__nested __interrupt是嵌套中断。

__nested __interrupt void your_interrupt_function()
不是裸中断,是中断中快速开中断,类似GCC的INTERRUPT()宏。

korren 发表于 2008-4-2 09:14:02

是不是要求中断编译器不要自动保护寄存器器?
如果是这样那你可以这样
#pragma type_attribute=__raw
__interrupt void Your_Interrupt_Handler(void)
{

}

__raw __interrupt void Your_Interrupt_Handler(void)
{

}

试试!

ATmega32 发表于 2008-4-2 09:21:35

多谢楼上。

ljxh401 发表于 2008-4-2 11:47:16

试试楼上的楼上的方法 测试测试

ljxh401 发表于 2008-4-2 11:52:11

好像报错的 兄弟

sciencehero 发表于 2008-4-2 12:03:59

【9楼】 korren   是南昌的吗?我现在也在南昌

ATmega32 发表于 2008-4-2 12:05:00

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

korren 发表于 2008-4-2 13:09:23

to sciencehero,
我是南昌的,现在在广东.
页: [1]
查看完整版本: ucos2.52怎么移植IAR EWAVR?