FREERTOS的启动第一个任务代码分析
来源:互联网 发布:linux 字符编码转换 编辑:程序博客网 时间:2024/05/17 03:23
1.freertos的启动第一个任务的汇编代码如下,是在一个嵌入汇编形式的C函数里面,具体如下:
__asm void vPortSVCHandler( void ){PRESERVE8ldr r3, =pxCurrentTCB /* Restore the context. */ldr r1, [r3] /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */ldmia r0!, {r4-r11} /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */msr psp, r0 /* Restore the task stack pointer. */mov r0, #0msr basepri, r0orr r14, #0xdbx r14}/*-----------------------------------------------------------*/__asm void vPortStartFirstTask( void ){PRESERVE8/* Use the NVIC offset register to locate the stack. */ldr r0, =0xE000ED08ldr r0, [r0]ldr r0, [r0]/* Set the msp back to the start of the stack. */msr msp, r0/* Globally enable interrupts. */cpsie i/* Call SVC to start the first task. */svc 0nop}
其中vPortStartFirstTask()里面调用svc 0指令触发一个svc中断,然后执行vPortSVCHandler中断服务函数,因为里面有加载任务列表最高优先级的任务,前面的几条有英文注释,基本能懂,接着就是把任务的堆栈指针存入PSP寄存器,然后写入0到basepri寄存器,屏蔽所有中断,最后两条的意思可以参考如下链接:
http://bbs.csdn.net/topics/390690297
精华部分摘录如下:
svc 0
nop
现在的cpu都是多流水的,前一个指令执行的时候,后一条指定已经在译码了,所以svc 0后面必须跟条指令,不让cpu译码的时候出错就行
orr r14, #0xd
bx r14
当r14为0xFFFFFFFX,执行是中断返回指令,cortext-m3的做法,X的bit0为1表示返回thumb状态,bit1和bit2分别表示返回后sp用msp还是psp、以及返回到特权模式还是用户模式
有本书叫做 cortex-m3权威指南,既然搞M3,那本书是必读的。。
cortex-m3权威指南还是要研读下。要不看不懂底层汇编代码。
0 0
- FREERTOS的启动第一个任务代码分析
- FreeRTOS的第一个任务是怎么跑起来的
- 第一个cocos2d程序的代码分析
- FreeRTOS的任务管理
- FreeRTOS的任务状态
- 上班的第一个任务
- luogu的第一个任务
- FreeRTOS高级篇2---FreeRTOS任务创建分析
- FreeRTOS高级篇4---FreeRTOS任务切换分析
- FreeRTOS高级篇8---FreeRTOS任务通知分析
- FreeRTOS高级篇2---FreeRTOS任务创建分析
- FreeRTOS高级篇4---FreeRTOS任务切换分析
- FreeRTOS高级篇8---FreeRTOS任务通知分析
- FreeRTOS源码分析-代码结构
- 三、第一个cocos2d程序的代码分析
- 三、第一个cocos2d程序的代码分析
- 三、第一个cocos2d程序的代码分析
- 三、第一个cocos2d程序的代码分析
- SQLServer之COUNT函数
- 将UltraEdit添加到右键菜单
- Web service是什么?
- 工作五年之殇
- 黑马程序员---java关于异常
- FREERTOS的启动第一个任务代码分析
- 理解RESTful架构
- Java Web开发基础(1)-Servlet
- Memcache工作原理
- 关于webrtc里面的opengl设置坐标系的问题,解决ios和android通信图像是反的问题
- 下划线分隔的字符串,转换为驼峰式字符串
- ocp-047-29 子查询
- sql server 更新两个表的某个字段
- MySQL auto_increment 用法