堆栈
基本汇编指令寄存器
- ebp—基地址指针
- esp—栈顶指针
- esi/edi----内存空间的段内偏移量
- eax-------累加寄存器
- lea---------取有效地址(便宜地址)
- PUSH, ESP = ESP - x;
- POP , ESP = ESP + x;
- PUSH,EBP =EBP-10h;
- POP ,EBP = EBP+10
上面的x可以是4或者2
00F013C0 push ebp
00F013C1 mov ebp,esp
00F013C3 sub esp,0CCh 框架中的三行汇编代码表示函数开辟一个栈空间sub esp occh中occh表示栈空间的大小
00F013EC pop ebx
00F013ED mov esp,ebp
00F013EF pop ebp 框架中的三行代码表示了一个函数结束后恢复到进入函数前某个函数的栈空间。
RTOS中的任务就是一个个函数它们需要在RAM上的空间开辟栈来进行数据的运算交互,可以将RAM看做一个固定大小的数组多少个task就在上面分割成若干个小的数组这些数组的首尾地址编译器应该会进行分配确定硬件物理存储空间这个首尾地址也可以看做ebp~esp的活动范围因此如果一个任务函数的局部变量比较多的话也会造成栈空间溢出这也是为什么51核单片机不太好做RTOS的原因它的RAM比较的小而32的比较大
3:RTOS的任务的切换
将任务运行态的数据地址进行保存后让cpu 索引到下个任务的地址并进入它分配相应的资源给这个任务让他去完成相应的功能 |
4:相应的函数栈描述的博主