FreeRTOS使用总结

配置项说明

  1. configUSE_DAEMON_TASK_STARTUP_HOOK
    如果使能这个选项,需要定义void vApplicationDaemonTaskStartupHook(void)函数,用于完成用户级的初始化代码,使用这个选项的优点是在初始化过程中就可以使用FreeRTOS的功能,并且可以将初始化过程集中在一起完成。这个函数在初始化FreeRTOS内核完成之后,调用用户任务之前会且只会被执行一遍。

初始化代码

如果每次需要信号量,定时器时都由cubeMx配置再重新生成代码,会很麻烦,会很麻烦,不如自己写以下初始化代码。

计数信号量初始化

// FILE NAME: freertos.c

/* USER CODE BEGIN Variables */
/* Definitions for sem_cmd_cnt */
osSemaphoreId_t sem_cmd_cnt;
const osSemaphoreAttr_t sem_cmd_cnt_attributes = {
  .name = "sem_cmd_cnt"
};
/* USER CODE END Variables */

/* USER CODE BEGIN RTOS_SEMAPHORES */
sem_cmd_cnt = osSemaphoreNew(1, 0, &sem_cmd_cnt_attributes);	// max_cnt=1, init_cnt=0
/* USER CODE END RTOS_SEMAPHORES */

经过以上的初始化代码后,在需要的地方加上osSemaphoreRelease(sem_cmd_cnt);以及osSemaphoreAcquire(sem_cmd_cnt, osWaitForever);就可以了。

定时器初始化

// FILE NAME: freertos.c

/* USER CODE BEGIN Variables */
/* Definitions for timer_10ms */
osTimerId_t timer_10ms;
const osTimerAttr_t timer_10ms_attributes = {
  .name = "timer_10ms"
};
/* USER CODE END Variables */

/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
void timer_10ms_cb(void *argument);
/* USER CODE END FunctionPrototypes */

/* USER CODE BEGIN RTOS_TIMERS */
timer_10ms = osTimerNew(timer_10ms_cb, osTimerPeriodic, NULL, &timer_10ms_attributes);	// 指定回调函数,周期性调用
/* USER CODE END RTOS_TIMERS */

/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */
/* timer_10ms_cb function */
__weak void timer_10ms_cb(void *argument)		// 定义回调函数,也可以在其他适当的地方定义
{
    // timer task
}
/* USER CODE END Application */

然后在需要的时候调用osTimerStart(timer_10ms, 10);就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值