FreeRTOS
文章平均质量分 52
学海浪太大
路要慢慢走
展开
-
RTOS事件组
假如每一个任务做一件事,事件组就是当任务A执行了或者任务B执行了,就去执行任务C。或是,但任务B和任务A执行了采取执行任务D。而任务B或者任务A里面的东西是我自己决定的(比如当我设定按键1按下才将bit0置1)事件组结构体,用来给任务C和D等待某些事件的,任务AB不需要等待。事件组的等待机制:a、关闭调度器b、当前uxEventBits是否满足,满足就执行相应事件;不满足的话,返回err或者休眠,休眠就将自己放入xTasksWaitingForBits这个链表,然后改变状态()...原创 2022-04-08 15:12:42 · 581 阅读 · 1 评论 -
FreeRTOS信号量
信号量有点像队列,但是它不是用来传递数据,只是用来修改计数值信号量里面用来表示资源的个数。1.获取信号量:takea.关中断b.判断资源大于0,然后让资源减一个,然后返回OKc.判断资源小于0,返回err或者休眠,休眠后把自己放在休眠链表(semaphore.list)里,并且改变状态(挂起)。d.有资源了,资源减一,返回ok2释放信号量:give跟队列那个差不多,关中断,资源加1,唤醒等待着获取信号量的那个任务。...原创 2022-04-07 14:41:53 · 362 阅读 · 0 评论 -
RTOS队列代码分析
队列:1.关中断2.环形缓冲区3.链表链表里面有两个链表,分别为list for receive和list for send ,由名字可知:1、前者用来在任务接收不到队列数据的时候先把自己挂在那里。2、后者则是任务向队列发送数据的时候,队列数据满了,把自己挂在那里。 /* 创建队列: 长度为5,数据大小为4字节(存放一个整数) */ xQueue = xQueueCreate( 5, sizeof( int32_t ) ); pxNewQueue = ( Queue_t * )原创 2022-04-07 09:21:35 · 707 阅读 · 0 评论 -
队列内部机制
裸机中全局变量可以一个个的执行,while中的两个函数一个加了1,那它就是加了2.但是在操作系统中,全局变量有可能会被打断,在变量增加的过程中,a加到一半任务被切出去,然后任务二是a变量加了1,然后切换会任务1,任务1中变量吧没加完的变量重新加,然后变量a还是1。中间任务一的加1是通过中间量来加,所以两个任务执行完,a变量还是1.使用队列API函数:跟进入临界区一样,别人打断不了我。在这个区域内,相当于裸机程序队列支持休眠和唤醒的机制。在裸机程序中,通过判断变量来执行任务的时候,会很占用cpu原创 2022-04-06 10:48:44 · 112 阅读 · 0 评论 -
FreeRTOS嵌入式操作系统轮询
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、简单实验总结提示:以下是本篇文章正文内容,下面案例可供参考一、简单实验代码如下(示例):#include "sys.h"#include "delay.h"#include "usart.h"#include "led.h"#include "timer.h"#include "lcd.h"#include "key.h"#include "malloc.h"#include "string.h".原创 2022-04-02 19:19:22 · 1487 阅读 · 0 评论 -
逻辑分析仪使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、作用二、使用1.开启2.run3.去这里总结提示:以下是本篇文章正文内容,下面案例可供参考一、作用逻辑分析仪:观察全局变量的波形,根据波形解析任务调度情二、使用1.开启仿真debug开启设置断点2.run3.去这里如果去不了,可能是因为这里没打开之后右击在之后RUN总结...原创 2022-04-02 17:10:00 · 316 阅读 · 0 评论 -
FreeRTOS任务运行时间信息统计
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、介绍二、实验1.配置2.main.c3.头文件led.h4.原理图5.烧录总结提示:以下是本篇文章正文内容,下面案例可供参考一、介绍FreeRTOS 可以通过函数 vTaskGetRunTimeStats()来统计每个任务使用 CPU 的时间,以及所使用的时间占总时间的比例。在调试代码的时候我们可以根据这个时间使用值来分析哪个任务的 CPU 占用率高,然后合理的分配或优化任务。二、实验1.配置#define.原创 2022-03-15 09:59:04 · 802 阅读 · 0 评论 -
vtaskstartscheduler(); //开启任务调度语句不执行
项目场景:FreeRTOS实时嵌入式操作系统开发——基于stm32第一章移植代码问题描述:任务调度器执行到vtaskstartscheduler(); //开启任务调度语句不执行int main(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 delay_init(); //延时函数初始化 uart_init(115200); //初始化串口 LED_Init原创 2022-03-01 19:30:35 · 3157 阅读 · 0 评论