FreeRTOS
相思冼红豆
这个作者很懒,什么都没留下…
展开
-
3. 软件定时器组
定时器组// configTIMER_TASK_PRIORITY 定时器任务的任务优先级,可以为 0~( configMAX_PRIORITIES-1),越高越及时响应// configTIMER_QUEUE_LENGTH 用来设置定时器命令队列的队列长度。// configTIMER_TASK_STACK_DEPTH 用来设置定时器任务堆栈大小,单位为字,不是字节!定时器组的时基基于系统时钟节拍实现的,定时器的实现不基于任何硬件的定时器(不需要使能读寄存器),并且定时器可以创建很多个硬件原创 2020-05-31 13:49:44 · 1214 阅读 · 0 评论 -
5. 任务通知
任务通知任务通知的本质是一个32位的变量多数情况下,任务通知可替代二值信号量,计数信号量,事件组,也可以替代消息邮箱(单个消息的消息独列)任务通知值是每个任务控制块就有的,所以无需创建控制块发送选择:发送通知给任务,如果有通知未读,不覆盖通知值发送通知给任务,直接覆盖通知值发送通知给任务,设置通知值的一个或多个位,当做事件组使用发送通知给任务,递增通知值,当做计数信号量限制:只能一个任务接收通知消息(每个任务都有通知值),必须指定接收通知的任务只有等待通知的任务可以被阻塞,发送通知的任原创 2020-05-31 13:48:41 · 1184 阅读 · 0 评论 -
2.6 系统时钟节拍
系统时钟节拍任何的操作系统都需要提供一个时钟节拍,以供系统处理如延时,超时等与时间相关的事件(时基)。系统时钟节拍是特定的周期性中断,中断间的时钟间隔取决于不同的应用。(设定时基,一般是1ms左右)时钟的节拍中断使得可以将任务延迟若干个时钟节拍(释放CPU给其他任务,若干时间后再执行)在任务等待事件发生的时候,也提供等待超时等待;时钟节拍频率越快,系统额外开销越大FreeRTOS通过滴答定时器产生SysTick中断#define configTICK_RATE_HZ ( ( TickType_原创 2020-05-31 13:46:38 · 708 阅读 · 0 评论 -
2.5 任务API
删除void vTaskDelete( TaskHandle_t xTaskToDelete ){ TCB_t *pxTCB; taskENTER_CRITICAL(); // 进入临界段,避免操作列表时,被中断打断 { // 通过句柄获得任务控制块,就是将句柄强转为 任务控制块 类型,NULL则 操作 Current pxTCB = prvGetTCBFromHandle( xTaskToDelete ); if( uxListRemove( &( pxTCB原创 2020-05-31 13:45:29 · 243 阅读 · 0 评论 -
2.4 任务切换
任务切换所谓任务切换,就是在就绪列表中,寻找优先级最高的就绪任务,然后执行该任务任务切换的本质是通过触发 PendSV 中断,在中断中执行任务切换#define portNVIC_INT_CTRL_REG (*(( volatile uint32_t *) 0xe000ed04))#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL )#define portSY_FULL_READ_WRITE ( 15 )#define portYIELD_F原创 2020-05-31 13:44:20 · 456 阅读 · 0 评论 -
2.3 SVC中断
SVC中断SVC中断服务函数通过SVC指令触发SVC中断 #define vPortSVCHandler SVC_Handler__asm void vPortSVCHandler( void ){ PRESERVE8 ldr r3, =pxCurrentTCB ; 读取 pxCurrentTCB 变量值,R3 = pxCurrentTCB ldr r1, [r3] ; 读取 pxCurrentTCB 栈顶指针,R1 = *( pxCurrentTCB) ldr r0, [原创 2020-05-31 13:43:49 · 2354 阅读 · 0 评论 -
2.2 开启调度器
开启调度器void vTaskStartScheduler( void ){ BaseType_t xReturn; #if( configSUPPORT_STATIC_ALLOCATION == 1 ) // 静态创建空闲任务 { StaticTask_t *pxIdleTaskTCBBuffer = NULL; StackType_t *pxIdleTaskStackBuffer = NULL; uint32_t ulIdleTaskStackSize;原创 2020-05-31 13:41:08 · 355 阅读 · 0 评论 -
2.1 创建任务
创建任务// 静态创建任务的实现TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode, // 函数名称,空指针类型地址,标记函数入口 const char * const pcName, // 任务名称,主要用于调试用 const uint32_t ulStackDepth,// 任务堆栈,需先指定数组,单位为4 Byte void * const pvParameters, //原创 2020-05-31 13:40:11 · 432 阅读 · 0 评论 -
1. 列表和列表项
FreeRTOS列表和列表项列表是FreeRTOS中的一个数据结构,类似于链表,挂载各种数据FreeRTOS中的列表为双向链表,有previous和next指针,用于遍历列表项。typedef struct xLIST{ listFIRST_LIST_INTEGRITY_CHECK_VALUE /* 宏,生成变量,验证列表的完整性 */ configLIST_VOLATILE...原创 2019-05-24 21:18:44 · 2624 阅读 · 0 评论