这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 2114,ucos 在2114上移植ucos

共2条 1/1 1 跳转至

2114,ucos 在2114上移植ucos

院士
2006-09-17 18:14:16     打赏
2114,ucos 在2114上移植ucos



关键词: 移植    

院士
2006-12-22 22:43:00     打赏
2楼
问 如果用汇编写中断服务程序,所有的现场保护都需要用程序实现吗?单片机本身会做哪些工作?
1: 我是这样理解的如果用汇编写中断服务程序,进入中断系统会自动切换到相应的模式,保存环境等工作需要有程序实现。但是看了zlg的一个移植程序有点不明白,在irq.s文件中,定义的中断宏处理程序:
SUB     LR, LR, #4                      ; 计算返回地址
        STMFD   SP!, {R0-R3, R12, LR}           ; 保存任务环境
        MRS     R3, SPSR                        ; 保存状态
        STMFD   SP, {R3, SP, LR}^     
1 最后一句中,入栈的sp应该是在irq模式下的当前值吧,用于在退出中断时任务环境参数在栈中的位置,程序注释为用户的“R3,SP,LR”是怎么回事?
2 STMFD SP!,{R0-R3,R12,LR}不是已经保存LR了吗,为什么最后又保存一次? 2: 哈哈……这个问题我以前也问过~~~~~~1.用户模式寄存器,是因为后面加了一个^
2.两个LR是不一样的,一个是用户模式的,一个是IRQ的。

请看:http://bbs.21ic.com/club/bbs/list.asp?boardid=39&t=1995510&tp=%u8BF7%u6559%u4EE5%u4E0B%u6C47%u7F16%u5B8F%u5B9A%u4E49%u7684%u4F5C%u7528

3: 我看了那个帖子还有些不明白:
$IRQ_Label
        SUB     LR, LR, #4                      ; 计算返回地址
        STMFD   SP!, {R0-R3, R12, LR}           ; 保存任务环境
        MRS     R3, SPSR                        ; 保存状态
        STMFD   SP, {R3, SP, LR}^               ; 保存用户状态的R3,SP,LR,注意不能回写
                                                ; 如果回写的是用户的SP,所以后面要调整SP
        LDR     R2,  =OSIntNesting              ; OSIntNesting++
        LDRB    R1, [R2]
        ADD     R1, R1, #1
        STRB    R1, [R2]

        SUB     SP, SP, #4*3
        
        MSR     CPSR_c, #(NoInt | SYS32Mode)    ; 切换到系统模式
        CMP     R1, #1
        LDREQ   SP, =StackUsr
        
        BL      $IRQ_Exception_Function         ; 调用c语言的中断处理程序

为什么要切换到系统模式呢? 4: 切换到系统模式在开中断前切换到系统模式,可以保证发生中断嵌套前处于系统模式,这样在保存环境时统一都是系统模式或用户模式,对否? 5: 这样可以实现嵌套,而且系统模式堆栈区最大呀. 6: 我上面的理解对吗?另外,在zlg的例程中,他的管理模式堆栈定义怎么没有与别的模式定义放在一起?
7: 软件中断和别的还不一样?进入软件中断时,首先调整堆栈指针

(LDR     SP, StackSvc)

不是自动转换到管理模式吗?为什么要人为调整?别的中断为什么不用调整SP? 8: 在一个资料上找到进入异常ARM微处理器所做工作1 将下一条指令地址存入连接寄存器LR;
2 保存状态寄存器内容到SPSR;
3 设置CPSR为响应模式;
4 强制PC从异常向量地址取下一条指令;

共2条 1/1 1 跳转至

回复

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