FreeRTOS钩子函数
发表于|更新于|嵌入式
|浏览量:
FreeRTOS 中的钩子函数和中断的回调函数很像,钩子函数的名字是固定的,在特定事件下会自动执行响应名字的钩子函数,并且钩子函数是可剪裁的,在 FreeRTOSConfig.h中配置是否启用特定的钩子函数。
vApplicationTickHook
节拍中断可以选择是否回调一个钩子函数,这个钩子函数允许实现一些周期性的功能。
使用节拍中断钩子函数,需要将 configUSE_TICK_HOOK
设置为1,同时钩子函数申明为如下原型:
void vApplicationTickHook( void )
这个钩子函数必须很短且占用堆栈空间很少,因为这是在中断中调用的函数,同时,只能调用以FromISR结尾的API函数。
文章作者: 小土坡
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小土坡!
相关推荐
2024-01-30
FreeRTOS LED闪烁例子
这个例子演示了基于 FreeRTOS 的闪灯程序,这里给出主要代码块。 main.c12345678910void vApplicationTickHook(void){ global_num_1++; if (global_num_1 >= 500) { global_num_1 = 0; // 给 led_task 任务发送通知 xTaskNotifyGive(xTaskGetHandle("led_task")); }} led.c123456789101112/// @brief led FreeRTOS 任务函数/// @param pvParametersvoid led_task(void *pvParameters){ uint32_t ul_notify_value; while (1) { ul_notify_value = ulTaskNotifyTake(pdTRUE, 0); if...
2024-03-07
FreeRTOS 按键程序代码笔记
在这里分享一个我写到基于 FreeRTOS 的按键程序,只是自己的一个思路,欢迎讨论。 数据结构定义123456789101112131415161718192021222324252627282930313233343536373839404142434445464748//// File: xtp_defines.h//#ifndef __XTP_DEFINES_H#define __XTP_DEFINES_H#include "at32f413.h"#include <stdbool.h>#include <stdio.h>#define USE_FREERTOS (1) // 1:使用 FreeRTOS 0:不使用 FreeRTOS#define AT32#define LED#if USE_FREERTOS#include "FreeRTOS.h"#include "task.h"#endif#ifdef LED#include...
2024-02-22
FreeRTOS 创建任务
1234567891011121314151617#include "FreeRTOS.h"#include "task.h"#define USER_LED_TASK_PRIO 2 /* 定义任务优先级,数字越大优先级越高 */#define USER_LED_TASK_STACK_SIZE 120 /* 定义任务堆栈大小,单位为:字 */TaskHandle_t user_led_handle; /* 定义任务句柄 */void xtp_create_task(void){ xTaskCreate( (TaskFunction_t)led_task, (const char *)"led_task", (uint16_t)USER_LED_TASK_STACK_SIZE, (void *)NULL, (UBaseType_t)USER_LED_TASK_PRIO, ...
2024-02-23
FreeRTOS 延时函数
vTaskDelay()任务延时函数,把当前任务从运行态(就绪列表),移到延时列表。 参数: xTicksToDelay > 延时的时间长度,单位是系统时钟节拍周期。 如果调用vTaskDelay()函数的任务在执行过程中被更高优先级的任务或者中断所打断,那么调用vTaskDelay()函数的任务将会受到影响,此时将不能保持一个固定的时间间隔运行。 使用例子12vTaskDelay(500/portTICK_PERIOD_MS);vTaskDelay(200); 函数定义12345678910111213141516171819202122232425262728293031323334353637383940414243#if ( INCLUDE_vTaskDelay == 1 ) void vTaskDelay( const TickType_t xTicksToDelay ) { BaseType_t xAlreadyYielded = pdFALSE; /* A delay time of zero just...
2024-02-22
FreeRTOS 任务挂起与任务恢复
FreeRTOS 的任务有几种状态,并且这几种状态可以相互转换,下面是转换图: 任务的4个状态: 运行态 就绪态,指准备好了,可以随时运行 阻塞态 挂起态 运行态当任务实际执行时,它被称为处于运行状态。 任务当前正在使用处理器。 如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。 就绪态准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。 阻塞态如果任务当前正在等待时间或外部事件,则该任务被认为处于阻塞状态。 例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态), 直到延迟结束-一个时间事件。 任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量 事件。 处于阻塞状态的任务通常有一个”超时”期, 超时后任务将被超时,并被解除阻塞, 即使该任务所等待的事件没有发生。 阻塞状态下的任务不使用任何处理时间,不能 被选择进入运行状态。 挂起态 Blocked与阻塞状态下的任务一样, 挂起状态下的任务不能...
2024-03-11
FreeRTOS 配置文件笔记
FreeRTOSConfig.h 是 FreeRTOS 中的配置文件,通过配置该文件可以裁剪使用哪些 FreeRTOS 功能。 网站的 FreeRTOSConfig.h 配置文件很大有很多配置选项,但是有很多选项是有默认值的,我们只需配置我们使用的选项即可。 下面是一份...
公告
This is my Blog