抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

CPU利用率CPU​利用率需要控制在一个较好的范围,能够完美响应紧急的事件 开启宏定义portCONFIGURE_TIMER_FOR_RUN_TIME_STATS 1​、portGET_RUN_TIME_COUNTER_VALUE 1​ 创建CPU利用率监控 开启宏定义 12345678910111213//启用运行时间统计功能#define configGENERATE_RUN_TI...

中断管理异常:同步异常和异步异常 同步异常:内部事件,处理器指令产生的事件。由内部产生 异步异常:被零除算术运算,读写异常等。由外部硬件装置 中断管理: 支持开关中断 支持恢复中断 支持使能 支持屏蔽 支持可选系统管理的中断优先级 中断种类:外设、中断控制器、CPU本身 中断名词 中断号:特定标志 中断请求:紧急事件需向CPU​提出请求,这一过程称为中断请求 中断优先级:将中断源分为...

内存管理内存通常分为两种:内部存储空间(RAM​)和外部存储空间(硬盘) 避免使用C​语言标准库的malloc​和free​内存函数 嵌入式RAM​可能不足,函数并不总是可用 实现可能很大,占用很大的代码空间 几乎不安全 调用时间不确定,每次可能都不一样 可能产生碎片 会使链接器配置复杂 如果允许堆空间的生长方向覆盖其他变量占据的内存,会成为debug​的灾难 内存管理应用场景 void...

任务通知任务通知是一种任务间通信的手段,比使用信号量更节省资源,解除阻塞时间更快 无需创建队列 更节省RAM空间 发送通知任务几种模式:通知未读,不覆盖通知值;直接覆盖通知值;设置通知位的一个或多位,当作事件组;递增通知值,当做计数信号量。 由于必须指定接收通知的任务,只能有一个任务接收通知。 只有等待通知的任务可以被阻塞,发送通知的任务不会因为发送失败进入阻塞态。 任务通知运行机制12...

软件定时器软件定时器是一种基于硬件定时器的资源利用手段,相当于扩展了定时器数量。 允许开启关闭软件定时 创建软件定时 启动软件定时 停止软件定时 复位软件定时 删除软件定时 软件定时运行机制123//开启宏定义#define configUSE_TIMERS 1#define configTIMER_QUEUE_LENGTH 10 单次模式,定时完毕只执行一次回调...

事件事件是一种任务间通信的技术,和信号量不同,可以实现一对多,多对多的通信,但是不涉及数据的传输。 configUSE_16_BIT_TICKS​ 开启后,uxEventBits​为16位,8位存储事件组;未开启时,uxEventBits​为32位,24位存储事件组。 事件只与任务相关联,事件之间彼此独立。 事件只同于同步,不涉及数据传输。 事件无队列消息性质,多次向同一任务发送事件,若未...

信号量信号量类似于裸机开发中的标志位,用于任务间通信的变量,或者成为标志位。 临界资源:任何时刻只能被一个任务访问的资源 递归信号量和互斥量都实现继承优先级机制,降低优先级反转的危害 二值信号量运行机制 类似于互斥量,但是没有互斥量的优先级继承机制 偏向于同步功能,任务与任务的同步,任务与中断的同步 等效于一个只有一个消息的队列,只存在两种状态:有消息或者无消息 信号被获取时为0,被释放时为...

消息队列消息队列是一种用于线程间通信的技术,在FreeRTOS​中则用于任务间通信,其中的任务可以视为线程。 支持先进先出、后进先出 消息队列运行机制 创建消息队列单独划分一个内存空间,内存大小=控制块大小+单个消息空间*队列长度,然后初始化消息队列,空间大小无法更改。 初始化后,内存空间中会包含头指针等信息,消耗部分内存,删除消息队列后空间释放。 每个空间存放不大于uxIte...

任务管理系统中任务运行调度方式 每个任务都是在独立的堆栈环境运行,运行的任务越多需要的堆栈空间越多。 任务之间的切换是基于抢占优先级的,高优先级抢占低优先级 任务切换的寻找方式 基于链表,从高往低查,任务创建时已经完成排序 计算前导零指令CLZ​,直接读出优先级任务(stm32​使用这种方式) 相同优先级任务则采用时间片轮转,无更高优先级任务情况下。 任务状态创建的任务一般有四...

堆和栈堆栈返回地址保存在栈中 添加串口打印功能 去掉无关代码、LCD等 增加串口打印功能 初始化串口 实现fputc 标准库移植将官方标准库移植到STM32F103C8T6 常见变量类型TaskHandle_t​是任务句柄类型,指针类型,原型为void *​ StackType_t​是任务堆栈类型,整型类型,原型为uint32_t​ StackTask_t​是任务块类型,结构体,原...