打印

ucosII在AT91SAM7S上的移植细节问题请教~(基于IAR环境)

[复制链接]
3397|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Swd21ic|  楼主 | 2008-2-16 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在看移植方面的内容..主要参考的是官方的移植范例.. 但手上还有其他几个范例.发现有几个地方还是不明白的,希望高人能解答.大家也一起讨论讨论..

1.复位后默认是管理模式SVC,在前后台跑程序时Atmel给的例程也是SVC. 而UCOSII的任务有的用SYS模式,也有用SVC移植的.两者相比有什么大的区别?最新的移植范例是SVC模式下的.


2.ATPCS规定的ARM堆栈是8字节对齐.但是IAR中可选4字节.平时操作堆栈好象也是4字节对齐?


3.在Atmel前后台的irq处理中irq堆栈只保存了3个寄存器(LR_irq, SPSR_irq, R0),八级嵌套的话最多是3*8*4 = 96字节.
而且ISR是切换到SVC模式下去执行的.其他的内容保存在SP_svc的任务栈中.保持了I和F的畅通,能被irq继续中断.
但UCOSII中好象都是使用的irq模式去处理ISR,这样有个好处是不用每个任务都留出一段任务栈.统一保存到irq堆栈.但是好象所有例程在跑ISR时都把I屏蔽了..那么就不能进行中断嵌套了..? (在IRQ模式下如果I没被屏蔽应该还可以继续被IRQ中断吧)


4.在原S64的启动代码主要完成了几个事. A.初始化临时堆栈进行lowlevelinit (禁止WDT,配置正确的时钟,配置中断源)
                        B.初始化irq堆栈到ramend.初始化SVC堆栈到ramend-96
                        C.初始化变量段.跳转main
在UCOSII移植中,原来2.76版是差不多的.但是2.83新的版本移植有几个变化. 
  1)采用了可以跳转+/-4GB的方法. 用PC装载一个32位地址(B跳转当前+/-32M已经足够)
  2)对堆栈的初始化不同.主要和后面用的模式.和中断的处理有关.但是好象没有用到ramend
  3)没有进行lowlevelint配置中断源和系统时钟配置,是运行到bsp_init()才做的.那么之前用的应该是32768的内部时钟.
  4)但是bsp_init()中有一个OS_CPU_InitExceptVect.直接把地址进行操作.这应该是重映射后才能用,但是例程没用重映射也能跑.不出错?. 


5.IAR中的Plug-in UCOSII插件是免费的还是?,需要加入什么新的模块?怎样去使用它.
uc-Probe和uc-View的话又是怎样弄的.搭建嵌入式平台的话需要这个东西


6.uC/CPU和uc/LIB有什么用?       

: ) 请大家帮帮忙.我主要是中断那块和几个堆栈的容量分配不太清楚..

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

781

帖子

1

粉丝