17-freeRTOS过程实调(外设补充-正点原子)

P1—P10:

RTOS操作系统的核心在于实时内核

RTOS的内核负责管理所有任务,内核决定了运行哪个任务,何时停止当前任务切换到其他任务。可剥夺型内核总是运行优先级别数最高的任务。

freeconfig.h配置文件详解:include后面跟着的API,如果被注释掉了,也就是失能了,那么编译的时候就不会被编译进去。或者如果有提示什么函数未定义的话,就看是不是要对里面的变量赋1或者0配置。

系统节拍计数器:config_16_bit_ticks 应该在define里面为0,因为适用于32位的单片机里面。

total_heap_size:里面的值如果太大会提示内存不足,编译不下去。

四种任务状态:运行,就绪,阻塞,挂起。

任务实现:for( ; ; )相当于while(1),而这个for死循环一般是不会退出的,如果要退出,就要用vTaskDelete把整个任务先给删了。

如果在编译程序的时候卡死了,很有可能是因为堆栈函数的大小设置小了,就是如果在函数设置了个200内存的数组,堆栈定义的时候是50,那么就会卡死。

START_STK_SIZE(任务堆栈大小):里面要注意如果定义是100,那么不是100个bit字节,而是100x4个字节。

任务句柄:任务创建成功了之后要告诉MCU是哪个任务创建成功了,如果相关的API要用到这个任务就通过任务句柄来操作。

如果返回值是error_could_not,而不是pdpass:那么可能是这个任务的堆刚好比总的堆内存还要多。

优先级0不能用,因为空闲任务需要用的优先级0;一般能从1开始,然后定时器优先级默认为31,所以在选择自己创建的任务中0和31都不能用;

任务句柄就是一个指向任务的指针,也就是一个无类型的指针变量,所以在填入参数的时候要取地址符的符号。

P9实际敲程序:

在删除任务的时候要注意任务的任务句柄是否已经为null則无效,避免删除无效的任务了。要自己写代码,熟悉一下任务创建的过程。

知识点:如果提示框里面写着undefined 則要自己定义,而自己定义是因为freertos是可裁剪的,根据自己需求来剪裁自己需要的功能,所以有时候需要自己打开freertosconfig.h里面去添加这一个定义。

比如使能静态方法时:freertos默认了会创建至少一个的空闲任务,如果把静态的宏打开,那么也会用静态方法来创建空闲任务。

再者,如果出现一些未定义的error,那么就可能这个函数根据freertosconfig来说需要我们自己编写这个函数。比如静态方法的这一个,也需要我们对它的空闲任务块或者堆栈的内存进行内存分配。

关于static StaticTask_t IdleTaskTCB这个程序的意思就是:TCB_t里面有多个一个控制块变量所需要的指针,每一个指针占用内存的地址static StaticTask_t用条件编译的方式占位置,需要用到哪个就占哪个,不用的就不编译,节省空间。(条件编译概念:条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。)

用二级指针是因为要给传进去的变量赋值。

动态和静态变量创建的区别是:动态创建任务的时候堆栈大小是有系统自动分配的,而静态则是用户自己定义的。

一个结构里比如要给一个指针赋值,那么可以用比如静态的结构来去定义,写入它的大小。

P11:

有任务暂停去了挂起态就之后重新恢复的时候会到就绪态干啥任务调度器,这个任务可以重新被调用,并不是直接进入运行态。

什么时候进入运行态,这个是由任务调度器来完成的。

vTaskSuspend任务挂起的时候,从start_task追到main里面挂起任务。Tip:有试验,要做。下面就是它的一个中断向量表查询:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值