【FreeRtos内部机制-韦东山(更新中)】

在这里插入图片描述

1 任务的引入_ARM框架

任务:**一段代码;运行位置;运行环境----------------->即运行起来的函数**

补充ARM架构,以F103为例;数据保存在内存,代码保存在Flash
在这里插入图片描述

**  内存四区**

> 堆区(heap):一般由程序员手动分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收。
> 栈区(stack):由编译器自动分配释放,**存放函数的形参、局部变量**等。当函数执行完毕时自动释放。 
> 全局区(global /stack):用于存放全局变量和静态变量, 里面细分有一个常量区,一些常量存放在此。该区域是在程序结束后由操作系统释放。 
> 代码区(code/ text):用于存放程序代码,字符串常量也存放于此。 ————————————————

在这里插入图片描述

> 内存四区原文链接:https://blog.csdn.net/weixin_44966641/article/details/120456141

1.1 探究 代码执行流程

a=a+b;

1.1.1 读变量,读到哪里去—寄存器

在这里插入图片描述

**CPU运行时,先去Flash上取得指令,再执行指令:

* 把内存a的值读入CPU寄存器R0
* 把内存b的值读入CPU寄存器R1
* 把R0、R1累加,存入R0
* 把R0的值写入内存a

** CPU内部有R0、R1、……、R15共16个寄存器
  * R13,别名SP,栈寄存器,保存着栈的地址
  * R14,别名LR,返回地址,保存着函数的返回地址
  * R15,别名PC,程序计数器,也就是当期程序运行到哪了

在这里插入图片描述

1.1.2 常用汇编指令补充

在这里插入图片描述

* 读内存:Load,LDR
* 写内存:Store,STR
* 加法:ADD
* 入栈:PUSH,实质上就是写内存STR
* 出栈:POP,实质上就是读内存LDR
* LDR R0, [R1, #
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值