初学freertos

FreeRTOS任务创建与底层原理

在用cubemx创建项目时,因为系统时钟是为rtos做准备的,所以调试接口不能用系统时钟做基准时钟

2.再调用这个函数时,就是我们自己创建一个任务,其中这是里面的参数分别是

TaskFunction_t pxTaskCode:要执行的任务函数(即这个任务具体做什么逻辑,是个函数指针)。

const char * const pcName:任务的名称(调试时用来识别这个任务,是不可修改的字符串)。

const configSTACK_DEPTH_TYPE usStackDepth:任务的栈空间大小(任务运行时,局部变量等需要栈来存储,这里指定栈的深度)。

void * const pvParameters:传给任务函数的参数(任务执行时能用到这个参数,指针本身不可改)。

UBaseType_t uxPriority:任务的优先级(数值越大,任务越 “紧急”,越容易被 CPU 执行)

  1. TaskHandle_t * const pxCreatedTask:用来存任务句柄的指针(任务创建成功后,会把句柄存到这里,后续用句柄能操作这个任务,比如暂停、删除
      1. 此处是cpu用汇编编程 cpu里面会有不同寄存器储存数据,并且运行汇编指令,数据存在内存里面(ram),而代码保存在flash(rom),通过调用不同的汇编指令进行计算
      2. 这里面是cpu的寄存器用途不看这些底层执行过程,就不能完全明白freertos,比如一句简单的c语言自加,要使用4句汇编才能执行完,freertos会是以汇编的一句为最小单位执行,所以要使用互斥量保护,防止4句汇编没有执行完
      3. 这里是对pc LR SP怎么互相运用的简单描述
      4. PC 跳转到 FunctionB 的地址。
        • LR 自动被设置为 函数A 中 BL 指令的下一条指令地址(返回地址)。

      5. 进入 函数B

        • 第一件事通常是 PUSH {LR},将 LR 的值(即返回地址)保存到栈上,因为 函数B 内部可能还会调用其他函数,会覆盖 LR。

      6. 函数B 执行其功能。

      7. 函数B 执行完毕,准备返回。

        • POP {LR},从栈上恢复之前保存的返回地址到 LR 寄存器。

        • 执行 BX LR,将 LR 的值(返回地址)写入 PC

      8. PC 指向了 函数A 中 BL 指令的下一条指令,程序顺利返回 函数A 继续执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值