UCOS
thomas_blog
路漫漫其修远兮
展开
-
UCOS内存管理
STM32F10xxx内置64K字节的静态SRAM。它可以以字节、半字(16位)或全字(32位)访问 SRAM的起始地址是0x20000000UCOSII//定义存储区 OS_MEM *DATA_MEM; //存储区中存储块数量(可申请次数) #define DATA_MEM_NUM 10 //每个存储块大小 #define DATA_MEMBLOCK_SIZE 128 //转载 2017-11-25 11:12:55 · 517 阅读 · 0 评论 -
UCOSII消息队列
主结构体typedef struct os_q { /* QUEUE CONTROL BLOCK */ struct os_q *OSQPtr; /* Link to next queue control block in list of free blocks */ void **OSQStart; /* P转载 2017-12-29 17:14:25 · 1072 阅读 · 0 评论 -
UCOSII软件定时器
API函数//创建 OS_TMR *OSTmrCreate (INT32U dly, INT32U period, INT8U opt, OS_TMR_CALLBACK callback, void *callback_arg,转载 2017-12-29 17:54:56 · 642 阅读 · 0 评论 -
UCOSIII软件定时器
举例OSTmrCreate((OS_TMR *)&tmr, //定时器 (CPU_CHAR *)"tmr", //定时器名字 (OS_TICK )20, //20*10=200ms (OS_TICK )100, //100*10=1000ms (OS_转载 2017-12-27 12:17:42 · 411 阅读 · 0 评论 -
UCOSIII内建消息队列
使能内建消息队列 将OS_CFG_TASK_Q_EN置1API函数#if OS_CFG_TASK_Q_EN > 0u OS_MSG_QTY OSTaskQFlush (OS_TCB *p_tcb, OS_ERR *p_err);void *OSTaskQPend (OS_TICK timeout, OS_OPT转载 2017-12-27 18:11:59 · 925 阅读 · 0 评论 -
UCOSIII互斥信号量
互斥信号量可以解决优先级反转问题 优化后现象 优化方法:L和H等待同一个信号量的时候,将L任务优先级提至H相同优先级实验举例void start_task(void *p_arg) { OS_CRITICAL_ENTER(); //进入临界区 //创建一个互斥信号量 OSMutexCreate((OS_MUTEX* )&TEST_MUTEX,转载 2017-12-27 15:19:26 · 1138 阅读 · 0 评论 -
UCOSIII优先级反转
反转现象 任务优先级:H>M>L 绿色部分:任务占用共享资源 理想状态:7释放信号量后,最高优先级H任务抢占CPU 反转原因:H和L等待同一个信号量,H的任务优先级被降至和L相同优先级,此时M已经成为最高优先级实验举例void start_task(void *p_arg) { OS_CRITICAL_ENTER(); //进入临界区 //创建一个信号量 OS转载 2017-12-27 15:04:37 · 1544 阅读 · 0 评论 -
UCOSIII内嵌信号量
不仅能够简化代码,而且比使用独立的信号量更有效 API函数//等待-1 OS_SEM_CTR OSTaskSemPend (OS_TICK timeout, OS_OPT opt, CPU_TS *p_ts, OS_ERR *p_err);//取转载 2017-12-27 15:30:52 · 683 阅读 · 0 评论 -
UCOSIII信号量
信号量通常分为两种 二进制信号量 计数型信号量 二进制信号量 二进制信号量只能取0和1两个值计数型信号量 计数型信号量的范围由OS_SEM_CTR决定。OS_SEM_CTR可以为8位,16位和32位API函数//创建 void OSSemCreate (OS_SEM *p_sem, CPU_CHAR *p_name,转载 2017-12-27 13:16:51 · 794 阅读 · 0 评论 -
UCOSIII钩子函数
OSIdleTaskHook 空闲任务调用这个函数,可以用来让CPU进入低功耗模式void OSIdleTaskHook (void) { #if OS_CFG_APP_HOOKS_EN > 0u if (OS_AppIdleTaskHookPtr != (OS_APP_HOOK_VOID)0) { (*OS_AppIdleTaskHookPtr)(); } #e转载 2017-12-27 10:43:15 · 4478 阅读 · 0 评论 -
UCOSIII系统内部任务
1. 空闲任务 空闲任务是UCOSIII创建的第一个任务 空闲任务是UCOSIII必须创建的 空闲任务优先级总是为OS_CFG_PRIO_MAK-1 空闲任务中不能调用任何可使空闲任务进入等待态的函数 #define OS_CFG_PRIO_MAX 64u /* Defines the maximum number of task priorities (see OS_PRIO转载 2017-12-27 09:59:04 · 462 阅读 · 0 评论 -
UCOSIII等待多个内核对象
内核对象 内核对象包括信号量、互斥信号量、消息队列和事件标志组 UCOSIII中允许任务同时等待多个信号量和多个消息队列主结构体typedef struct os_pend_data OS_PEND_DATA; struct os_pend_data { OS_PEND_DATA *PrevPtr; OS_PEND_DATA *NextPtr;转载 2018-01-02 16:00:44 · 699 阅读 · 0 评论 -
UCOSIII事件标志组
两种同步机制 “或”同步 “与”同步 使能#define OS_CFG_FLAG_EN 1u /* Enable (1) or Disable (0) code generation for EVENT FLAGS */主结构体typedef struct os_flag_grp OS_FLAG_GRP; struct os_flag_grp {转载 2018-01-02 11:34:41 · 886 阅读 · 0 评论 -
UCOSIII时间片轮转调度
OS_RATE_HZ const OSCfg_TickRate_Hz = (OS_RATE_HZ )OS_CFG_TICK_RATE_HZ; #define OS_CFG_TICK_RATE_HZ 200u /* Tick rate in Hertz (10 to 1000 Hz) */时间片长度200Hz,也就是一个系统时钟节拍5ms串口实验 为Task1和Task2分配2个时间片,分转载 2017-12-26 18:32:05 · 4472 阅读 · 1 评论 -
UCOSIII消息队列
任务间消息传递2种途径 全局变量 发布消息 主结构体typedef struct os_q OS_Q; struct os_q { /* Message Queue */ OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_Q */转载 2017-12-27 17:13:27 · 4223 阅读 · 0 评论