中级会员
 
- 积分
- 465
- 金钱
- 465
- 注册时间
- 2013-2-19
- 在线时间
- 1 小时
|

楼主 |
发表于 2013-8-7 23:05:21
|
显示全部楼层
回复【2楼】正点原子:
这里是不应该执行到的地方 哦,呵呵. 你下载的是同一个代码么? 重新全部编译,再下载一次试试.
---------------------------------
下载都是没问题的,吓到板子上能运行,调试时点全速运行也没问题。但是单步时在这里就不走了。是不是要多点一会儿啊?
OSStartHighRdy
LDR R4, =NVIC_SYSPRI2 ; set the  endSV exception priority 可悬挂请求 装载系统异常优先级寄存器2
LDR R5, =NVIC_PENDSV_PRI ;装载PendSv的可编程优先级
STR R5, [R4] ;把R4中的内容给R5
MOV R4, #0 ; set the  SP to 0 for initial context switch call
MSR   SP, R4 ;将R4的内容加载到程序状态寄存器PSP的指定字段
LDR R4, =OSRunning ; OSRunning = TRUE
MOV R5, #1
STRB R5, [R4] ;STRB把一个寄存器的低字节存储在存储器中,把R5中的地址存储在[R4]
;切换到最高优先级的任务
LDR R4, =NVIC_INT_CTRL ;rigger the  endSV exception (causes context switch) 装载中断控制及状态寄存器ICSR的地址。
LDR R5, =NVIC_PENDSVSET ;中断控制及状态寄存器的28位
STR R5, [R4] ;把28位置1
CPSIE I ;enable interrupts at processor level ;开中断。
OSStartHang
B OSStartHang ;should never get here ;B无条件跳转指令 感觉只要到了这里就再也退不出去了
从代码上看最后的B就是无条件跳转,这里他又跳到自身。另外上面已经开了中断。这里跳到自身,是不是在延时,等待某个中断、事件发生?
原子,代码肯定会执行到这里嘛,这是OSStart()函数的最后一个调用,调用汇编中的一段。 |
|