16-freeRTOS过程实调(外设)

实践调解

几乎全部的Freertos的定义都在freerosconfig.h的文件里面,想要改的话直接用这个函数就行

源码包官网:FreeRTOS™ - FreeRTOS™

代码托管网站 : https://sourceforge.net/projects/freertos/files/FreeRTOS/ (已下载)

Own_Compile:

①LED---compile:

  • TaskFunction_t pxTaskCode为什么引用的是前面的而不是后面的结构体名称:

因为前面的是函数的结构体定义,后面的是函数指针,所以要把函数名放在后面的函数指针的位置,才会执行的时候调到那个函数的执行位置

(同说法:TaskFunction_t pxTaskCode为一个函数指针,指向任务的执行函数 ,而TaskFunction_t 实际是一个类型定义typedef void (*TaskFunction_t)( void * );)

  • 任务句柄就是一个地址,所以在函数具体填写的时候需要加一个&来取这个函数,不过定义的时候直接用TaskHandle_t 告诉用户有这个句柄可以查,与任务是绑定的
  • const uint16_t usStackDepth:此参数是用于设置任务的堆栈大小, 每个任务有一个自己的堆栈,用于任务切换时保存上下文; 堆栈大小不是由usStackDepth直接来表示,在真正分配堆栈空间时, 堆栈的实际大小为 sizeof( StackType_t )*usStackDepth;
  • 若StackType_t 为4字节即堆栈大小为4*usStackDepth;对于栈空间,实际申请的栈大小为usStackDepth*sizeof(StackType_t),例如32位单片机上一个StackType_t占4字节,如果传递给ucStackDepth的值是100,则栈实际容量为400字节。
  • 注意,要保证栈容量字节数不能超过uint16_t类型的的最大值65535。Idle任务的栈空间大小通过在FreeRTOSConfig.h中的configMINIMAL_STACK_SIZE宏配置。简单的给一个他们直觉上的容量。
  • pvParameters:用于传递给任务函数的传参, 如果任务函数不需要传参,设置为NULL即可
  • 下图中的外设任务函数原型是void TaskFunction(void* pvParameters),函数的主体流程必须是一个无限循环,不能像普通的函数一样执行完就退出,它应该永不退出,直到任务被显式地删除

程序编写-LED闪烁:

vTaskDelete(StartTask_Handler);

//一定要删除开始任务,

//如果没有删除开始任务,那么显示的现象就是灯亮了,但是灯不会闪烁

//原因是:因为要跳出创建任务的这循环,因为已经在上面两段建了,故不加就会重复创建任务,一直建一直亮着,相当没有延时地一直亮

②NVIC-Test:

编译问题:如果出现如下:

..\OBJ\LED.axf: Error: L6218E: Undefined symbol TIM_ClearITPendingBit (referred from timer.o).

不是在配置文件没有注释,就是在FWLIB中没有加入所需要的stm.....c和.h文件:

同时也需要注意波特率;

现象方面:不明白为什么输出的是开启和关闭中断,可是有定时器开启的提示:因为在tim.c中有定时器串口输出的回调函数;

而为什么在开启中断了之后TIM3还能运行,因为在手册中有提高于优先级5的定时器就会被停止,而TIM3低于优先级5被设置成了优先级4的就能屏蔽掉中断,故就有TIM3一直能运行的情况;

同时如果下面两句没了,就会一开始就进入中断,原因是如果没有这个延时1s一共让num加加到5s的函数的话,根据程序运算的速度就会马上加到5,所以才会一开始就到了能打印出关闭中断的位置:

③Task-create/delete/restore/data-check:

  • 函数返回值: 成功创建任务时,返回任务句柄 TaskHandle_t。 若任务创建失败,返回 NULL。所以才有要等于任务句柄的那个等于号,表示已经创建成功了;句柄是由系统指定的唯一代号,就像身份证一样。vTaskDelay(1000); //延时1s,也就是1000个时钟节拍
  • 为什么时间片调度实验那里,直接加几次就换到另外一个任务加几次然后再切换回来几次,也就是这两个时间片是怎么安排的:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值