RTOS
文章平均质量分 53
RTOS使用过程中,遇到的各种坑记录!!
Be Greater Than Average!!
真的改完最后一个bug就下班
一日不读书,无人看的出;一周不读书,开始会动粗;一月不读书,笨的像头猪。
展开
-
[freertos]带有freertos api调用的一段代码怎么不让其他任务打断
2、如果我有一段代码,不想被其他任务打断,但是有调用的有freertos api的函数怎么办,比如队列操作啥的,这时候咋办呢?1、大家都知道,freertos提供了几种保护机制,保护代码不被打断,但是各自都有自己的限制。关闭中断,此时不会被其他任务打断了,但是不能调用freertos的api函数。保护的是共享资源只能被我访问,但是还是可以被其他任务打断。同2,不过这里是不关闭中断,中断函数还继续运行。2》执行此代码是,将此时任务的优先级提高到最高。3》执行完后,再恢复原来定义优先级。原创 2024-11-05 09:46:09 · 149 阅读 · 0 评论 -
【FreeRTOS】中的portYIELD_FROM_ISR(xHigherPriorityTaskWoken)有啥用?
原来这个切换会在中断退出时直接切换到执行紧急的任务,所以以前设为NULL时,处理数据包只能处理5000包,加上 砖桥月饼 xHigherPriorityTaskWoken 后,可以到10000包,可见作用这么明显,以前真没体会到。2、以前不知道这个portYIELD_FROM_ISR是干啥的,只是知道他可以在退出中断时可以进行上下文切换,具体的有多大用不清楚。1、大家都知道,在中断里,freertos经常有下面的写法,会调用portYIELD_FROM_ISR。原创 2024-09-20 09:50:54 · 271 阅读 · 0 评论 -
【FreeRTOS】 最简单的实现rtos的CPU使用率统计
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()宏只在vTaskStartScheduler启动任务调度时初始化运行一次,不用管他;3、FreeRTOS本身不是有用一个定时器去切换任务吗,如果要求精度不高,可不可以用系统节拍去粗略估算FreeRTOS的CPU使用率呢?主要是要提供计数值portGET_RUN_TIME_COUNTER_VALUE()的定义,所以按照上面定义。也符合结果,lwip_init任务有个while(1)死循环,所以一直占用cpu。原创 2024-07-15 09:01:24 · 861 阅读 · 1 评论 -
【FreeRTOS】IAR的FreeRTOSConfig.h中在添加头文件的问题
而若在该头文件中添加其他头文件,就会被汇编编译器一块识别了;但是汇编编译器识别不了C源码,所以报错!所以FreeRTOSConfig.h中也标注了这个地方,头文件应该都放在这个宏定义里!IAR的Freertos中需加上一个portasm.s的驱动文件,而该文件需要调用。2、百度了半天也没有找到问题。放到这里后,就不报错了~原创 2024-07-12 14:37:23 · 328 阅读 · 0 评论 -
【FreeRTOS】freeRTOS的Tmr Svc任务优先级配置
5、所以配置最大优先级的时候,可以用宏configTIMER_TASK_PRIORITY来配置,如下图这样子,免得出错。4、后面才发现原来FreeRTOS的默认最大优先级号配置的是8,给他改成32就可以正常运行了,这里改为了31。1、Tmr Svc是个FreeRTOS的软件定时器任务,他可以收集各任务的状态。3、修改为31后,程序总是启动不了,2、他的优先级可以通过宏。原创 2024-07-11 15:00:53 · 459 阅读 · 0 评论 -
【FreeRTOS】configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY宏解析
2、子优先级:也是从优先级或者副优先级,在抢占优先级相同的情况下不能发生中断嵌套,高级的子优先级先执行。如果低级的子优先级在执行,需要等待完成才能执行高级的子优先级,即不发生抢断。1、抢占优先级:顾名思义能够抢先执行任务,即打断当前的主程序或者中断程序的运行,前去完成抢断中断。1>中断优先级2~15的优先级,可以调用FreeRTOS的ISR后缀API。2>中断优先级小于2的优先级,不可以调用FreeRTOS的ISR后缀API。主优先级3,在2~15内,可以调用isr的API了。测试成功,串口不死机了!原创 2024-07-10 15:01:57 · 602 阅读 · 1 评论 -
【FreeRTOS】freeRTOS的版本号在哪个源文件定义
可以通过宏 tskKERNEL_VERSION_NUMBER 找到,在task.h中定义。原创 2024-07-09 16:39:29 · 462 阅读 · 0 评论 -
【转】FreeRTOS通用移植,以keil和IAR工程 M7核为例
PendSV_Handler()与 SVC_Handler()这两个很重要的函数 在 port.c 文件中已经实现 xPortPendSVHandler()与 vPortSVCHandler()函 数.SysTick_Handler提供系统节拍。选择IAR路径下的,同时将portasm.s也添加到工程里,这里面实现了一些底层的东西,不然链接的时候一堆extern 声明的显示找不到定义。iar的移植,和keil一样,唯一的区别就是port.c这里,如果按照keil的路径选择编译不成功。原创 2024-06-21 09:27:29 · 1128 阅读 · 1 评论 -
freertos任务管理器,任务监控
例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态), 直到延迟结束-一个时间事件。处于阻塞状态的任务通常有一个"超时"期, 超时后任务将被超时,并被解除阻塞, 即使该任务所等待的事件没有发生。与“阻塞”状态下的任务一样, “挂起”状态下的任务不能 被选择进入运行状态,但处于挂起状态的任务 没有超时。当任务实际执行时,它被称为处于运行状态。准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。原创 2024-01-12 14:43:35 · 1137 阅读 · 0 评论 -
[FreeRTOS] 调用vTaskSuspend后,通过vTaskResume恢复任务无法响应
串口接收中断函数:通过设置(give)一个信号量标记,告诉串口接收主任务函数,可以进行接收串口数据了。调用vTaskSuspend挂起任务后,通过vTaskResume恢复任务,恢复的任务无法响应。观察led任务,发现灯还可以闪烁,说明RTOS任务能正常切换,操作系统未被挂死。串口接收主任务函数:等待信号量,接收数据,将数据送入队列。按道理已经恢复任务了,应该可以响应正常的指令才对。原创 2024-04-15 11:21:15 · 398 阅读 · 1 评论