|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
类似与libcpu中的cortex-m3将ARM内核相关的代码从BSP目录中分离出来, 主要为:
+ `2 z6 f% h! D7 G. B1 B2 Qstartup_xxx.S
7 b% m" ~: d A) u J- ?& o2 O! W2 I" s+ U1 x" I. i5 S G$ x
各个编译器对应的启动脚本,设置堆栈,第一级IRQ响应及中断结束时的thread切换。$ r8 |2 @6 P4 H& a0 U+ E: z
修改中移除了内核之外的寄存器操作,将初次禁止中断、SRAM remap等移动到了BSP/platform的rt_low_level_init.c中,调用其rt_low_level_init函数前设置了SVC模式的stack。
# Q" N8 Q( ?; |( j' N针对各个编译器增加了rt_low_level_xxx.inc asm 头文件,用于用户定义各个CPU模式下的stack。
1 j! L% _* U1 W; E5 @ X) d% o. g9 Y% G6 Q
trap.c' j# {% s! \2 p8 g
% k g) k% ^% L" C0 E" [8 \
主要把查询IRQ中断向量号和确认响应中断两个函数从trap.c 移动到了interrupt.c 同时增加interrupt.h用于声明这两个函数。
& a$ U( |1 b' |( _$ _2 D* Q! D: j, ]rt_uint32_t rt_hw_interrupt_get_active(rt_uint32_t fiq_irq, rt_uint32_t id);
7 D9 i" t0 j. F7 Xvoid rt_hw_interrupt_ack(rt_uint32_t fiq_irq);
. \6 }0 N5 s# E7 q" h
( F9 x4 ^: \: G- Wcpuport.c及mmu.c
# L T1 k [, A# D' a7 {" ]9 W8 s- ]
增加iar的asm部分。/ C1 b# S: I5 g) ~1 X8 n) t" j
. T8 o0 z4 a4 k& F% X! S6 v% c
遇到的问题:- O( M) F3 M w; c* k5 h$ k% Z
0 u$ ^' a' k: N* L- d$ U2 Lscons脚本中如何包含asm的include路径, 我暂时解决方案是直接在bsp顶层AFLAGS中加入’ -Iplatform’; ^8 w3 ^! @( ?, e6 X) c E
原来libcpu/ARM926 thread切换的时候 会在stack中保存PC,LR, R12-R0,CPSR, SPSR, 但是参考libcpu/AM335x 则只保存PC,LR, R12-R0,SPSR,没有CPSR, 但是仿照修改的是时候会产生错误。0 ~, ^1 `4 B1 y/ b, l1 r
虽然iar/keil/gcc thread切换代码完全移植,但是只有keil下面的是稳定的,iar/gcc在运行60s左右都会自己重启。 Z, g3 e- U; d+ O7 ~; N4 s* f, p$ S
|
|