论坛» 嵌入式开发» MCU

[讨论]bb40的bootloader的源程序代码

菜鸟
2005-01-18 19:24 1楼

在有关堆栈的设置中,我不明白下段代码的意思

往高手指教:

sub sp,sp,#4 ;decrement sp(to store jump address) stmfd sp!,{r0} ;PUSH the work register to stack(lr does't push because it return to original address) ldr r0,=$HandleLabel;load the address of HandleXXX to r0 ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)

多谢。有谁想要完整的源代码,我可以提供

菜鸟
2005-01-19 04:26 2楼
这是用于查找Exception Handler入口地址的,不是设置堆栈,虽然有堆栈操作。
菜鸟
2005-01-19 04:26 3楼

兄弟我想要源代码,发我邮箱好吗?luyoj@163.com

多谢~~~~~

菜鸟
2005-02-05 18:32 4楼
我想要源代码,发我邮箱好吗?chen_1001@163.com

谢谢!!!!!!!!!

菜鸟
2005-02-16 01:55 5楼

兄弟,给我发一份吧,邮箱:hszsp@sohu.com

谢谢!

[em07]
菜鸟
2005-02-17 17:10 6楼

我想要源代码,发我邮箱好吗?xyf1204@163.com

谢谢!!!

菜鸟
2005-02-21 03:12 7楼

我想要源代码,发我邮箱好吗?chen_1001@163.com

菜鸟
2005-03-02 22:30 8楼

代码的具体意思是,首先将SP-4,然后将R0保存在SP-4中保护起来,接下来两条指令将HandleLabel地址中的数保存在R0中,然后将此时的R0装入sp+4(即SP)中,然后数据出栈,即SP中的值赋给pc,SP-4中的值赋给R0,从而实现程序的跳转。(注意,源程序中有一段代码

ldr r0,=HandleIRQ ;This routine is needed ldr r1,=IsrIRQ ;if there isn't 'subs pc,lr,#4' at 0x18, 0x1c str r1,[r0] )

正好实现跳转到IsrIRQ中断处理程序中

菜鸟
2005-03-04 20:46 9楼

rt

[align=right][color=#000066][此贴子已经被作者于2005-3-4 12:48:50编辑过][/color][/align]
菜鸟
2005-03-04 20:47 10楼
[quote] 以下是引用runnerrjg在2005-3-2 14:30:00的发言:

代码的具体意思是,首先将SP-4,然后将R0保存在SP-4中保护起来,接下来两条指令将HandleLabel地址中的数保存在R0中,然后将此时的R0装入sp+4(即SP)中,然后数据出栈,即SP中的值赋给pc,SP-4中的值赋给R0,从而实现程序的跳转。(注意,源程序中有一段代码

ldr r0,=HandleIRQ ;This routine is needed ldr r1,=IsrIRQ ;if there isn't 'subs pc,lr,#4' at 0x18, 0x1c str r1,[r0] )

正好实现跳转到IsrIRQ中断处理程序中

[/quote]

我想说的是: 通过 isrIRQ 这个非向量中断过程 最终就是要跳转到 最后那个中断向量表 :HandleADC # 4 HandleRTC # 4 HandleUTXD1 # 4

.......

那么你是怎样将你的中断程序, 比如ADC中断处理程序 放到 HandleADC 这个中断向量中的?

有几种方法呢?

共14条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]