
FreeRTOS
文章平均质量分 80
宁静以致墨
慢下来,享受技术,找一个安静的位置
展开
-
freertos学习
FreeRTOS 中的 heap 4 内存管理,可以算是 heap 2 的增强版本。heap2 每次内存分配后都会产生一个内存块,多次分配后,会产生很多内存碎片。怎么来标记这个块是空闲还是非空闲?所以就有了 heap 4,它相比 heap 2 来说,提供了相邻空闲的内存块合并的功能,一定程度上减少了内存碎片,使得释放了的内存能够再度合并称为较为大的内存块,以供有大内存块的分配场景使用;内存管理 heap1heap1 不提供 Free 内存的接口,也就是说,这套内存管理是只提供的分配,一旦.原创 2021-01-11 09:21:39 · 595 阅读 · 0 评论 -
FreeRTOS5中内存管理学习
1. heap_1.c这是5个内存管理策略中最简单的一个,我们称为第一个内存管理策略,它简单到只能申请内存。是的,跟你想的一样,一旦申请成功后,这块内存再也不能被释放。我们可以将第一种内存管理看作是切面包:初始化的内存就像一根完整的长棍面包,每次申请内存,就从一端切下适当长度的面包返还给申请者,直到面包被分配完毕,就这么简单。其中,变量xNextFreeByte记录已经分配的内存大小,...原创 2020-01-14 14:31:40 · 344 阅读 · 0 评论 -
freeRTOS 参数之configUSE_PREEMPTION
#define configUSE_PREEMPTION 1 抢占所谓的抢占就是同一优先级的抢占同一优先级,就会打印是乱的。#define configUSE_PREEMPTION 0 时间片使用时间片,就会打印良好,不会乱。...原创 2019-12-31 15:28:08 · 5101 阅读 · 0 评论 -
SVC(系统服务调用)和PendSV(可悬起系统调用)
【SVC】SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用在上了操作系统的软件开发中。SVC用于产生系统函数的调用请求。例如,操作系统通常不允许用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用SVC发出对系统服务函数的调用请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬件时,它就要产生一个SVC异常,然后操作系统提供...转载 2019-12-30 15:36:34 · 3883 阅读 · 0 评论 -
FreeRTOS 中断优先级配置
NVIC 的全称是 Nested vectored interrupt controller,即嵌套向量中断控制器。对于 M3 和 M4 内核的 MCU,每个中断的优先级都是用寄存器中的 8 位来设置的。 8 位的话就可以设置 2^8 = 256 级中断,实际中用不了这么多,所以芯片厂商根据自己生产的芯片做出了调整。比如 ST的 STM32F1xx 和 F4xx 只使用了这个 8 位中的高四...转载 2019-11-21 17:26:47 · 1181 阅读 · 0 评论 -
定时器的复位 xTimerReset
xTimerReset(left_timeout_timer_demo, 0);二、复位软件定时器复位软件定时器,会重新计算定时周期到达的时间点,这个新的时间点是相对于复位定时器的那个时刻计算的,并不是第一次启动软件定时器的那个时间点!!!BaseType_t xTimerReset ( TimerHandle_t xTimer, TickType_t xTicksTo...原创 2019-10-07 15:49:21 · 6322 阅读 · 0 评论 -
堆溢出和malloc失败的钩子函数打开
#define configCHECK_FOR_STACK_OVERFLOW 1#define configUSE_MALLOC_FAILED_HOOK 1void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName ){ LOG_...原创 2019-09-14 14:33:55 · 2302 阅读 · 0 评论 -
在使用FreeRTOS 时,硬件中断的 设置
/* The highest interrupt priority that can be used by any interrupt serviceroutine that makes calls to interrupt safe FreeRTOS API functions. Do not callinterrupt safe freertos api functions from a...原创 2019-09-12 22:34:50 · 2722 阅读 · 0 评论 -
在FreeRTOS TIMER的应用
关于freertos TIMER 经常应用的函数//建立TIMERkey_timer = xTimerCreate("Call Timer", pdMS_TO_TICKS(KEY_POLLING_TIME), pdTRUE, 0, KeyTimerCallback);//开启TIMER 在中断里xTimerStartFromISR(key_timer, 0);//开启TIMERxTi...原创 2019-09-11 13:22:28 · 1277 阅读 · 0 评论 -
freertos 技术小结
执行系统调用,比如普通任务可以使用taskYIELD()强制任务切换,中断服务程序中使用portYIELD_FROM_ISR()强制任务切换;xPortGetFreeHeapSize() 获取剩余Heap的大小...原创 2019-09-03 02:28:28 · 280 阅读 · 0 评论 -
vTaskDelete
在实际开发过程中,记录犯过的一个错误,如下vTaskDelete(NULL);iccid_return_num = 3;错误原因分析,在任务删除之后(调用vTaskDelete(NULL)之后),这个任务就在这个函数停止了,这行代码后面的代码不再执行,所以iccid_return_num无法赋值为3,正确的做法是iccid_return_num = 3;vTaskDelete(...转载 2019-08-30 14:41:42 · 866 阅读 · 0 评论 -
vTaskDelete
在实际开发过程中,记录犯过的一个错误,如下vTaskDelete(NULL);iccid_return_num = 3;错误原因分析,在任务删除之后(调用vTaskDelete(NULL)之后),这个任务就在这个函数停止了,这行代码后面的代码不再执行,所以iccid_return_num无法赋值为3,正确的做法是iccid_return_num = 3;vTaskDelete(...转载 2019-08-30 14:40:24 · 764 阅读 · 0 评论 -
在中断里面发送消息队列,卡死在优先级的assert里
#define DMA_PRIORITY_ULTRA_HIGH CHCTL_PRIO(3)修改为#define DMA_PRIORITY_ULTRA_HIGH CHCTL_PRIO(7)#define configMAX_SYSCALL_INTERRUPT_PRIORITY 32修改为#define configMAX_...原创 2019-07-23 20:11:47 · 1285 阅读 · 0 评论 -
FreeRTOS 内存配置引起的一些问题
如果用cube生成的USB不能被电脑识别,那么就要注意在cube中把上述的两个值放大。在代码中的startup_stm32f429xx.s文件中:Stack_Size EQU 0x4000Heap_Size EQU 0x8000在FreeRTOS中建立的最后一个任务不能执行,可能原因如下:#define configTOTAL_原创 2017-11-23 11:27:04 · 1333 阅读 · 0 评论 -
FreeRTOS学习笔记0921
第六章 FreeRTOS任务相关API函数6.1 任务创建和删除API函数1、函数xTaskCreate() 使用动态的方法创建一个任务。configSUPPORT_DYNAMIC_ALLOCATION新创建的任务默认就是就绪态的,如果当前没有比它更高优先级的任务运行那么此任务就会立即进入运行态开始运行,不管在任务调度器启动前还是启动后,都可以创建任务。原创 2017-09-21 19:07:20 · 871 阅读 · 0 评论 -
FreeRTOS 学习笔记0920
configAPPLICATION_ALLOCATED_HEAP 定义为1需要用户自行堆内存ucHeap,否则的话就是编译器来分配的。heap_4.cconfigASSERT(x)xTaskCreateStatic() configCHECK_FOR_STACK_OVERFLOWconfigGENERATE_RUN_TIME_STATS原创 2017-09-20 17:28:49 · 741 阅读 · 0 评论 -
FreeRTOS学习笔记三
portBASE_TYPE xQueueSendToFront( xQueueHandle xQueue, //目标队列的句柄 xQueueCreate() 创建该队列时的返回值const void * pvItemToQueue, //发送数据的指针。 其指向将要复制到目标队列中的数据单元portTickType xTicksToWait ); //阻塞超时时间。 如果原创 2017-08-19 14:46:22 · 2849 阅读 · 0 评论 -
FreeRTOS学习笔记二
vTaskDelayUntil()类似于vTaskDelay()。可以用于实现一个固定执行周期的需求。由于调用此函数的任务解除阻塞的时间是绝对时刻,比起相对于调用时刻的相对时间更精确(即比调用vTaskDelay()可以实现更精确的周期性)。void vTaskDelayUntil( portTickType * pxPreviousWakeTime, portTickType原创 2017-08-19 10:38:59 · 471 阅读 · 0 评论