![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FreeRTOS
thomas_blog
路漫漫其修远兮
展开
-
FreeRTOS 中断配置和临界段
中断屏蔽寄存器 PRIMASK、FAULTMASK和BASEPRI 1.PRIMASK:这是个只有1个位的寄存器。当它置1时, 就关掉所有可屏蔽的异常,只剩下 NMI和硬fault可以响应。它的缺省值是0,表示没有关中断 2.FAULTMASK:这是个只有1个位的寄存器。当它置1时,只有NMI才能响应,所有其它的异常,包括中断和fault,通通闭嘴。它的缺省值也是0,表示没有关异常转载 2017-09-18 20:57:42 · 1199 阅读 · 0 评论 -
FreeRTOS计数型信号量
API函数//创建#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) #define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCou转载 2018-02-07 16:18:15 · 1794 阅读 · 0 评论 -
FreeRTOS优先级翻转
举例//高优先级任务的任务函数void high_task(void *pvParameters){ while(1) { vTaskDelay(500); //延时500ms,也就是500个时钟节拍 printf("high task Pend Sem\r\n"); xSemaphoreTake(Bin...转载 2018-02-28 11:53:22 · 2439 阅读 · 0 评论 -
FreeRTOS互斥信号量
API函数#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) #define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX )#endifQueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )...转载 2018-02-28 14:11:56 · 4207 阅读 · 1 评论 -
FreeRTOS软件定时器
API函数//创建TimerHandle_t xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, ...转载 2018-02-28 18:26:37 · 3948 阅读 · 0 评论 -
FreeRTOS 事件标志组
信号量同步只能与单个的事件或任务进行同步。事件标志组与多个事件或任务进行同步//动态方法创建事件标志组EventGroupHandle_t xEventGroupCreate( void )//设置事件位EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSe...转载 2018-05-09 15:40:17 · 1396 阅读 · 0 评论 -
FreeRTOS 任务通知
可以替代队列、二值信号量、计数型信号量和事件标志组发送任务通知 获取任务通知转载 2018-06-05 22:34:38 · 666 阅读 · 0 评论 -
FreeRTOS 任务通知模拟二值信号量
FreeRTOS官方统计,使用任务通知替代二值信号量的时候,任务解除阻塞的时间要快45%,并且需要的RAM也更少举例void DataProcess_task(void *pvParameters){ while(1) { NotifyValue=ulTaskNotifyTake(pdTRUE,portMAX_DELAY); //获取任务通知 ...转载 2018-06-05 23:46:11 · 940 阅读 · 0 评论 -
FreeRTOS 任务通知模拟计数型信号量
举例//释放计数型信号量任务函数void SemapGive_task(void *pvParameters){ u8 key; while(1) { key = KEY_Scan(0); //扫描按键 if(key == WKUP_PRES) { xTaskNotifyGive...转载 2018-06-06 22:47:39 · 707 阅读 · 0 评论 -
FreeRTOS 任务通知模拟消息邮箱
举例void task1_task(void *pvParameters){ u8 key; BaseType_t err; while(1) { key=KEY_Scan(0); //扫描按键 if(key) { err=xTaskNotify((TaskHandle_t )...转载 2018-06-07 22:39:28 · 2533 阅读 · 0 评论 -
FreeRTOS二值信号量
API函数#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) #define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queu转载 2018-02-07 11:00:03 · 1373 阅读 · 0 评论 -
FreeRTOS队列操作
API函数//创建#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_转载 2018-02-02 15:04:59 · 3446 阅读 · 0 评论 -
FreeRTOS config开始的宏
FreeRTOSConfig.h系统配置文件中的内容configAPPLICATION_ALLOCATED_HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的,将宏configAPPLICATION_ALLOCATED_HEAP定义为1的话堆内存可以由用户自行设置(heap_1.c、heap_2.c、heap_3.c、heap_4.c和heap_5.c)/* Allocate the转载 2017-09-17 21:56:57 · 1221 阅读 · 0 评论 -
FreeRTOS 移植
添加FreeRTOS源码到工程中 在工程源码中创建FreeRTOS目录存放拷贝的文件 拷贝FreeRTOS->Source中的文件 可将其他不需要的文件夹全部删掉,只留3个 拷贝Demo中FreeRTOSConfig.h配置文件 放在user目录下,不然编译报错。后续将对此文件详细介绍 添加到工程中,这里也采用heap_4.c内存管理方式 添加头文件路径 修改startup代码(必须转载 2017-09-17 17:02:46 · 357 阅读 · 0 评论 -
FreeRTOS 基础简介
下载地址 http://www.freertos.org/目录结构# ls -ltotal 28drwx------ 5 pi pi 4096 Sep 16 04:17 FreeRTOSdrwx------ 4 pi pi 4096 Sep 16 04:18 FreeRTOS-Plus-rwx------ 1 pi pi 141 Jan 16 2015 New - Direct to转载 2017-09-16 11:42:25 · 729 阅读 · 0 评论 -
FreeRTOS 任务创建和删除(动态)
TaskHandle_t taskhandle;TaskHandle_t taskhandle1;void vTask(void *t){ int i = 0; while(1) { i++; if(i == 5) { vTaskDelete(taskhandle1); prin转载 2017-10-23 22:55:59 · 2438 阅读 · 0 评论 -
FreeRTOS 任务创建和删除(静态)
#define configSUPPORT_STATIC_ALLOCATION 1 //打开静态方法StackType_t TaskStackBuffer[50]; //任务堆栈大小StaticTask_t TaskTCBBuffer; //任务控制块大小StackType_t TaskStackBuffer0[50];StaticTask_t TaskTCBBuffe转载 2017-10-24 22:25:29 · 1440 阅读 · 0 评论 -
FreeRTOS 任务挂起和恢复
在使用RTOS的时候一个实时应用可以作为一个独立的任务。每个任务都有自己的运行环境, 不依赖于系统中其他的任务或者RTOS调度器。 任何一个时间点只能有一个任务运行,具体运行哪个任务是由RTOS调度器来决定的, RTOS调度器因此就会重复的开启、关闭每个任务任务状态 运行态 当一个任务正在运行时,那么就说这个任务处于运行态,处于运行态的任务就是当前正在 使用处理器的任务就绪态 可以运行的任转载 2017-09-20 13:19:13 · 3648 阅读 · 0 评论 -
FreeRTOS中断测试
configMAX_SYSCALL_INTERRUPT_PRIORITY 高于此优先级的中断,不能被禁止#ifdef __NVIC_PRIO_BITS #define configPRIO_BITS __NVIC_PRIO_BITS#else #define configPRIO_BITS 4转载 2018-01-04 14:09:55 · 1952 阅读 · 0 评论 -
FreeRTOS任务状态信息查询
uxTaskPriorityGet():查询某个任务的优先级 vTaskPrioritySet():改变某个任务的任务优先级 uxTaskGetSystemState():获取系统中任务状态 vTaskGetInfo():获取某个任务信息 xTaskGetApplicationTaskTag():获取某个任务的标签(Tag)值 xTaskGetCurrentTaskH转载 2018-01-16 12:05:58 · 11212 阅读 · 0 评论 -
FreeRTOS任务运行时间信息统计
相关宏的设置configGENERATE_RUN_TIME_STATS //使能portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() //配置一个高精度定时器/计数器提供时基portGET_RUN_TIME_COUNTER_VALUE() //读取时间值实验举例char RunTimeInfo[400]; //保存任务运行时间信转载 2018-01-17 10:42:36 · 5602 阅读 · 2 评论 -
FreeRTOS 任务通知模拟事件标志组
实验//设置事件位的任务void eventsetbit_task(void *pvParameters){ u8 key; while(1) { if(EventGroupTask_Handler!=NULL) { key=KEY_Scan(0); switch(key) ...转载 2018-06-07 23:09:17 · 986 阅读 · 0 评论