济宁 网站建设,国外域名抢注网站,wordpress图文并排,PHP做的网站能容纳多少人定义#xff1a; RTOS实时操作系统, (Real Time Operating System), 指的是当外界事件发生时, 能够有够快的响应速度,调度一切可利用的资源, 控制实时任务协调一致的运行。
特点#xff1a; 支持多任务管理#xff0c; 处理多个事件#xff0c; 实现更复杂的逻辑。 与计算…定义 RTOS实时操作系统, (Real Time Operating System), 指的是当外界事件发生时, 能够有够快的响应速度,调度一切可利用的资源, 控制实时任务协调一致的运行。
特点 支持多任务管理 处理多个事件 实现更复杂的逻辑。 与计算机操作系统的区别 RTOS专注于 轻量级 实时性 稳定性 相对于计算机主流系统 RTOS有严格的时间控制和响应速度 成本低 资源开销小 所以可以用于嵌入式领域。
配置
core设置非安全模式下的内核支持
heap:设置第四种堆区设置方式 Core: 选择 不适用安全模式
Heap: 在 FreeRTOS内 支持五种堆空间开辟的方法 使用过程中的状态转换关系图 任务调度的核心:
抢占式调度时间片轮询
任务的创建
通过cubeMX进行任务的添加和设置 相关的MX_FREERTOS_Init函数
/* 任务属性结构体*/
typedef struct { const char *name; /// 任务的名字 uint32_t attr_bits; /// 操作的标志 void *cb_mem; /// 任务的内存地址 uint32_t cb_size; /// 当前任务的内存大小 void *stack_mem; /// 当前任务的栈内存地址 uint32_t stack_size; /// 当前栈内存大小 osPriority_t priority; /// 当前任务的优先级 TZ_ModuleId_t tz_module; /// TrustZone module identifier uint32_t reserved; /// reserved (must be 0)
} osThreadAttr_t;
2.任务的优先级
typedef enum {
osPriorityNone 0, /// No priority (not initialized).
osPriorityIdle 1, /// Reserved for Idle thread.
osPriorityLow 8, /// Priority: low
osPriorityLow1 81, /// Priority: low 1
osPriorityLow2 82, /// Priority: low 2
osPriorityLow3 83, /// Priority: low 3
osPriorityLow4 84, /// Priority: low 4
osPriorityLow5 85, /// Priority: low 5
osPriorityLow6 86, /// Priority: low 6
osPriorityLow7 87, /// Priority: low 7
osPriorityBelowNormal 16, /// Priority: below normal
osPriorityBelowNormal1 161, /// Priority: below normal 1
osPriorityBelowNormal2 162, /// Priority: below normal 2
osPriorityBelowNormal3 163, /// Priority: below normal 3
osPriorityBelowNormal4 164, /// Priority: below normal 4
osPriorityBelowNormal5 165, /// Priority: below normal 5
osPriorityBelowNormal6 166, /// Priority: below normal 6
osPriorityBelowNormal7 167, /// Priority: below normal 7
osPriorityNormal 24, /// Priority: normal
osPriorityNormal1 241, /// Priority: normal 1
osPriorityNormal2 242, /// Priority: normal 2
osPriorityNormal3 243, /// Priority: normal 3
osPriorityNormal4 244, /// Priority: normal 4
osPriorityNormal5 245, /// Priority: normal 5
osPriorityNormal6 246, /// Priority: normal 6
osPriorityNormal7 247, /// Priority: normal 7
osPriorityAboveNormal 32, /// Priority: above normal
osPriorityAboveNormal1 321, /// Priority: above normal 1
osPriorityAboveNormal2 322, /// Priority: above normal 2
osPriorityAboveNormal3 323, /// Priority: above normal 3
osPriorityAboveNormal4 324, /// Priority: above normal 4
osPriorityAboveNormal5 325, /// Priority: above normal 5
osPriorityAboveNormal6 326, /// Priority: above normal 6
osPriorityAboveNormal7 327, /// Priority: above normal 7
osPriorityHigh 40, /// Priority: high
osPriorityHigh1 401, /// Priority: high 1
osPriorityHigh2 402, /// Priority: high 2
osPriorityHigh3 403, /// Priority: high 3
osPriorityHigh4 404, /// Priority: high 4
osPriorityHigh5 405, /// Priority: high 5
osPriorityHigh6 406, /// Priority: high 6
osPriorityHigh7 407, /// Priority: high 7
osPriorityRealtime 48, /// Priority: realtime
osPriorityRealtime1 481, /// Priority: realtime 1
osPriorityRealtime2 482, /// Priority: realtime 2
osPriorityRealtime3 483, /// Priority: realtime 3
osPriorityRealtime4 484, /// Priority: realtime 4
osPriorityRealtime5 485, /// Priority: realtime 5
osPriorityRealtime6 486, /// Priority: realtime 6
osPriorityRealtime7 487, /// Priority: realtime 7
osPriorityISR 56, /// Reserved for ISR deferred thread.
osPriorityError -1, /// System cannot determine priority or illegal priority.
osPriorityReserved 0x7FFFFFFF /// Prevents enum down-size compiler optimization.
} osPriority_t; osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr)
void osThreadExit (void)
osStatus_t osDelay (uint32_t ticks)
osStatus_t osThreadDetach (osThreadId_t thread_id);
osStatus_t osThreadJoin (osThreadId_t thread_id
信号量 信号量实际上就是一个值这个值被用来解决临界区问题以及实现进程在多处理器环境下的进程同步。主要分为二值信号量和计数信号量前者主要用于互斥访问和同步类似于互斥信号量不同点是二值信号量不具有优先级继承机制这也使得其适于同步任务。而后者又称为数值信号量数值大于1时使用的重点不在其中存储了什么数据而是通过数值去事件计数和资源管理生产者消费者模型
对于二值信号量的具体使用:
创建、申请or释放信号pv操作
相关函数
SemaphoreHandle_t xSemaphoreCreateBinary(void)
BaseType_t xSemaphoreTake(SemaphoreHandle_t xSemaphore,TickType_t xBlockTime)
BaseType_t xSemaphoreTakeFromISR(SemaphoreHandle_t xSemaphore, BaseType_t* pxHigherPriorityTaskWoken)
BaseType_t xSemaphoreGive(xSemaphore)
BaseType_t xSemaphoreGiveFromISR(SemaphoreHandle_t xSemaphore, BaseType_t* pxHigherPriorityTaskWoken)
对于计数信号量的使用
事件计数 事件发生释放信号量数值1其它事件获取后数值-1初始值为0
资源管理 信号量的数值代表着可用的资源数量使用资源先获取数量-1用完之后再释放数量1 初值根据资源的数量去决定。
相关函数
SemaphoreHandle_t xSemaphoreCreateCounting(UBaseType_t uxMaxCount, UBaseType_t uxInitialCount)
信号量的释放与获取与二值信号量相同
BaseType_t xSemaphoreTake(SemaphoreHandle_t xSemaphore,TickType_t xBlockTime)
BaseType_t xSemaphoreTakeFromISR(SemaphoreHandle_t xSemaphore, BaseType_t* pxHigherPriorityTaskWoken)
BaseType_t xSemaphoreGive(xSemaphore)
BaseType_t xSemaphoreGiveFromISR(SemaphoreHandle_t xSemaphore, BaseType_t* pxHigherPriorityTaskWoken)
uxSemaphoreGetCount(信号量句柄 )
对于对互斥型信号量的使用 其是一种特殊的二值信号量特点是优先级继承机制作用是保护临界资源类似于互斥锁
相关函数
SemaphoreHandle_t xSemaphoreCreateMutex(void)
信号量的释放与获取与二值信号量相同
BaseType_t xSemaphoreTake(SemaphoreHandle_t xSemaphore,TickType_t xBlockTime)
BaseType_t xSemaphoreTakeFromISR(SemaphoreHandle_t xSemaphore, BaseType_t* pxHigherPriorityTaskWoken)
BaseType_t xSemaphoreGive(xSemaphore)
BaseType_t xSemaphoreGiveFromISR(SemaphoreHandle_t xSemaphore, BaseType_t* pxHigherPriorityTaskWoken)
事件标志组 为了实现多个任务或事件进行同步。
相关函数
osEventFlagsId_t osEventFlagsNew(const osEventFlagsAttr_t *attr);
uint32_t osEventFlagsSet(osEventFlagsId_t ef_id, uint32_t flags);
uint32_t osEventFlagsWait(osEventFlagsId_t ef_id, uint32_t flags,\ uint32_t options, uint32_t timeout);
队列
用于任务到任务或者任务到中断再到任务的通信数据结构 相关函数
typedef struct { const char *name; /// 消息队列的名称 uint32_t attr_bits; /// 属性位 void *cb_mem; /// 控制块Control Block的内存指针 uint32_t cb_size; /// 控制块的大小 void *mq_mem; /// 数据存储的内存指针 uint32_t mq_size; /// 数据存储的大小
} osMessageQueueAttr_t;
osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size,\ const osMessageQueueAttr_t *attr);
osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr,\ uint8_t msg_prio, uint32_t timeout);
osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr,\ uint8_t *msg_prio, uint32_t timeout);
FREERTOS软件定时器
可以分为一次性的和周期的即某时间点进行函数功能调用和周期执行某个函数的功能
相关函数
osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr)
osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t ticks)
osStatus_t osTimerStop (osTimerId_t timer_id)
osTimerDelete (osTimerId_t timer_id)
注修改定时器任务的优先级要尽量高一点 修改任务的优先级要尽量的低一点