我是想请教各位老鸟和大鸟:
1.21xx与23xx的中断体系具体有多大的变动. 2.3.03a的软仿真有什么bug,如何解决.
虽然各位不让当就算了吧...郁闷之中.
眼红大鸟们有机会玩的高深,菜菜鸟我就直接对Keil自带的demo程序进行了软仿真, 结果(因为没做具体的研究,有错之处望包含)如下:
对..\MCB2300\RTX_Blinky\Blinky进行了分析,发现: 1.少LPC230x.h头文件,不知各位大鸟是否有??? 无奈该为LPC23xx.h讲究着用. 2.快速IO访问错误,硬件应该能运行,软仿真估计有bug,或鬼子故意搞得鬼. 无奈将FIO改为IO. 3.最只能的bug是引发中断后,VICVectAddr竟然不能接收VICVectAddrxx的地址值. VICVectAddr恒为0,这就导致了任何的向量中断都会复位到0地址. 无奈又想起了非典对付这些恶人的手段~~~所以就建立了非典构架的中断防御体系,并得到了成功. 4.可能鬼子听到了农民的呼声~~~,将VICVectAddr的地址位置增大,"声援"了农民的非典防御体系~~~ 但菜农还是对其不太满意,并且十分倒塌!!!VICVectAddr=0xfffffffc-4*32该多好呀~~~ 5.废除了DefVectAddr,不过为什么还出现os_def_interrupt()的身影??? 实在是倒塌呀~~~ 6.难道23xx的中断体系也换人了,那为什么不起NXP23xx的名号??? 发现: #define OS_TINIT() PCONP |= (1< TIMx(MR0) = OS_TRV; \ TIMx(MCR) = 3; \ TIMx(TCR) = 1; \ VICVectAddrX = (U32)os_clock_interrupt; 难道不要: VICVectCntX = 0x20 | OS_TID_; LPC交班的人没对NXP说清楚???(搞笑) 7.LPC23xx.h虽然有些起色,但没头脑不为软件设计谋利益的地址分配要是我的尿童,早让他卷铺盖走人~~~ VICVectAddr只能是当前中断引发向量的地址值,为何不再搞个VICVectNumber为菜农的非典做出点小贡献~~~ 哈哈~~~估计他们就瞧不起我们农村人~~~ 8.软仿真的bug不得不逼者在debug下用: LDR PC, IRQ_Addr 在run下用: LDR PC, [PC, #-0x0120] ; Vector from VicVectAddr 即只能自己做一个入口的中断服务程序IRQ_Addr(). 由于VICVectAddr恒为0,VICVectAddrxx在中断入口也无法分清,好在鬼子还有点"良心",留了VICIRQStatus 让我们可以用case倒腾~~~,不过中断级别就别指望了,好在这种细微的差别不影响全局,先这样对付,耐心等待软件升级吧. 9.经过2个小时的研究,菜农终于建立了23xx下的非典框架及新的防御体系,并软件模拟成功. Vectors LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr NOP ; Reserved Vector LDR PC, IRQ_Addr ;倒塌了 ; LDR PC, [PC, #-0x0120] ; Vector from VicVectAddr LDR PC, FIQ_Addr Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0 ; Reserved Address IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; LPC23xx非典FLASHROM的中断向量表架构 IMPORT VIC_Vect_Addr0 IRQ_Handler STMFD SP!, {R11, R12, LR};真保护R11R12, 假保护LR(用于运算) ;// LDR R12, VIC_Vect_Addr ;取VICVectAddr物理地址 ;// LDR R12, [R12] ;取出取VICVectAddr内实际向量中断号(非地址) LDR R12, [PC , #-0x14c];取出取VICVectAddr内实际向量中断号(非地址) AND R12, #0x1f ;防止32个中断序号越界,在此可再做序号越界处理(可省略) LDR R11, =VIC_Vect_Addr0 LDR R12, [R11, R12, LSL #2];散转到用户真正的向量中断地址 STR R12, [SP, #0x08];将中断向量地址R12写入事先保存的那个LR空间 LDMFD SP!, {R11, R12, PC};恢复R11R12,同时PC跳入中断向量地址执行 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 可以看出新体系比原先少一行程序,也意味着快了点.如果鬼子听农民的话,最多4条指令即可搞定. 10.因为无硬件仿真,菜鸟就梦游到此吧... 祝各位老鸟们节日愉快~~~菜农会尽快给大家培养出来搞笑的蔬菜来的... 新的LPC23xxdef.h将会很快出水,欢迎各位慢用.
|
|
文章评论(0条评论)
登录后参与讨论