RTOS
文章平均质量分 70
Ethan-Code
好记性不如烂笔头,加油!
展开
-
【问题】Clion开发STM32添加文件后报错“No such file or directory“
1. Clion添加文件后编译报错"No such file or directory"1.1 添加文件直接在工程目录下创建文件夹并创建源文件和头文件添加后,在编写.c文件包含.h文件时会出现错误,需要修改CmakeList.txt添加头文件include_directories(Path1/path1 Path2/path2)Path1/path1表示头文件路径,不同的路径用空格分开,如下图所示:添加源文件file(GLOB_RECURSE SOURCES "directory/*.原创 2021-11-30 03:39:08 · 3416 阅读 · 8 评论 -
【问题】使用STM32CubeMX开发FreeRTOS只能添加3个任务——单片机操作系统的堆栈内存问题
2. 堆栈溢出导致程序崩溃2.1 遇见问题在进行消息队列的实验中,由于之前测试按键扫描任务和跑马灯任务没有删除,直接在之前的prj上添加了向队列发送消息任务和从队列接收消息任务,在程序写完后,编译链接下载没有报错,但是在我使用新创建的队列发送和接收消息任务的时候程序只执行一次就卡死,找了很久没找到原因。在进行将新添加的任务删除的尝试后,发现程序又可以正常进行多任务切换。只要加上新的任务就跑不通。为了避免程序崩溃是由于消息队列引起的嫌疑,我将消息队列任务移植到前面的3个任务中,并把多余的任务删除。实验现原创 2021-11-30 03:41:37 · 4259 阅读 · 0 评论 -
【FreeRTOS】3. PendSV异常
PendSV异常,解析三个问题:怎么触发PendSV异常?何时使用MSP何时切换PSP?PendSV如何实现上下文切换?1. 触发PendSV异常在RTOS内核中,任务切换的原理是:手动触发PendSV异常,在PendSV异常服务函数中实现任务切换。freeRTOS有两种方式触发PendSV异常,一种是通过调用portYIELD(), 另一种是在Systick_Handler()中时基增加出现上下文切换请求。触发PendSV异常的方法在task.h中的#define portYIELD()原创 2021-11-21 21:37:54 · 2232 阅读 · 0 评论 -
【FreeRTOS】2. SVC系统调用
SVC系统调用问题:RTOS内核在何时去产生一个SVC系统调用?SVC中断服务里面使用的是MSP堆栈指针,内核在何时切换为PSP指针?1. 产生SVC系统调用FreeRTOS启动调度器的时候,会调用void vTaskStartScheduler(void);void vTaskStartScheduler(void){ pxCurrentTCB = &Task1TCB; //手动指定第一个运行的任务 if(xPortStartScheduler() != pdFALSE原创 2021-11-21 21:35:39 · 3042 阅读 · 0 评论 -
【FreeRTOS】1. 任务链表的实现
任务链表任务链表:xLIST即根节点,可以是就绪链表、阻塞链表、挂起链表等。链表中的节点:每个红框为一个节点,通过pvOwner与任务控制块联系到一起,通过pvContainer挂载到就绪、阻塞、挂起链表上。1. 链表根节点链表根节点的数据结构如下:链表的节点数链表节点索引指针链表的最后一个节点/头节点typedef struct xLIST{ UBaseType_t uxNumberOfItems; /* 链表节点计数器 */ ListItem_t * pxIndex; /原创 2021-11-21 21:34:34 · 1609 阅读 · 2 评论