首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
OSTaskQPend()和OSQPend
2024-10-04
17.4-uC/OS-III消息管理(任务消息队列使用)
任务消息队列跟任务信号量一样,均隶属于某一个特定任务, 不需单独创建,任务在则在, 只有该任务才可以接收这个任务消息队列的消息,其他任务只能给这个任务消息队列发送消息, 却不能接收.任务消息队列与(普通)消息队列极其相似,只是任务消息队列已隶属于一个特定任务, 所以它不具有等待列表, 省去了等待任务插入和移除列表的动作,所以工作原理相对更简单一点, 效率也比较高一些. 1.原理 如果想要使用任务消息队列,就必须事先使能任务消息队列.消息队列的使能位于“os_cfg.h”. 特别声明,任务消息队列
17.1-uC/OS-III消息管理(两种消息队列)
1.使用消息队列 消息队列函数: 函数名 功能 OSQCreate() 创建一个消息队列 OSQDel() 删除一个消息队列 OSQFlush() 清空一个消息队列 OSQPend() 任务等待消息 OSQPendAbort() 任务被不再等待该消息 OSQPost() 提交一个消息给消息队列 任务中消息队列函数: 函数名 功能 OSTaskQPend() 等待一个消息 OSTaskQPendAbort() 任务被不再等待该消息 OSTaskQPost() 发送一个消息给任务 OSTaskQFl
10.2-uC/OS-III内部任务管理(任务状态)
1.任务状态 从用户的观点来看,任务可以是有 5种状态,见图 5-6.展示了任务状态间的转换关系. {休眠状态,就绪状态,运行状态,挂起状态,中断状态} (1).处于休眠状态的任务驻留于内存但未被uC/OS-III使能.通过调用OSTaskCreate()函数uC/OS-III创建任务. 任务代码是存在于ROM的.但需要用OSTaskCreate()函数通知uC/OS-III关于任务的相关信息.如果任务的使命完成了,就要调用 OSTaskDel()删除该任务.OSTaskDel()实际上不是删除
嵌入式:UCOSIII的使用(17.01.24补充)
0.一些移植.系统相关 OS_CFG_APP.H /* --------------------- MISCELLANEOUS ------------------ */ #define OS_CFG_MSG_POOL_SIZE 100u /* 消息池 大小 */ #define OS_CFG_ISR_STK_SIZE 128u /* Stack size of ISR stack (number of CPU_STK elements) */ #define OS_CFG_TASK_STK_L
ucos实时操作系统学习笔记——任务间通信(队列)
ucos操作系统中的queue机制同样使用了event机制来实现,其实和前面的sem,mutex实现类似,所不同的是对sem而言,任务想获得信号量,对mutex而言,任务想获得的是互斥锁.任务间通信的queue机制则是想获得在queue中的消息,通过队列先进先出的形式存放消息.其实queue中存放的是放消息的内存的地址,通过读取地址可以获得消息的内容. queue机制是有一段循环使用的内存来存放增加的消息,然后从这段内存中读取消息的一个过程.有专门的操作系统queue结构(OS_Q)来描述这段内
uC/OS-II全局变量定义
/*********************************************************************************************************** uC/OS-II* The Real-Time Kernel**
uC/OS-II队列(OS_q)块
/*********************************************************************************************************** uC/OS-II* The Real-Time Kernel*
[stm32][ucos][ucgui] 2、LED闪烁、串口、滑块、文本编辑框简单例程
上一篇:[stm32][ucos] 1.基于ucos操作系统的LED闪烁.串口通信简单例程 * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了7个任务 任务名 优先级 APP_TASK_START_PRIO 2 主任务 APP_TASK_USER_
uC/OS-II之系统函数20160526
任务管理 1 OSTaskCreate() 建立一个新任务.任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立.中断处理程序中不能 建立任务.一个任务可以为无限循环的结构. 函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio); 参数说明:task 是指向任务代码首地址的指针. pdata 指向一个数据结构,该结构用来在建立任务时向任务传递参数. ptos is
uCos的多任务实现
uCos的多任务实现 作为操作系统(OS),最基本的一项服务就是提供多线程,在实时操作系统uCos里,多线程被称为多任务(Task).多任务并不是CPU能真正同时运行多个程序,实际是靠CPU在多个任务之间转换切换实现的,CPU轮番的服务于一系列的任务,这样CPU在宏观上好像在同时执行多个任务,实际在微观上CPU绝对是“单任务”的.这里要注意区别多线程和多核,如果系统里是有多个CPU,则可以实现真正的多线程了. 按照上面的思路,多任务的实现,就是要实现CPU在不同的任务之间切换.按照uCos作者的
OSSchedLock()函数透析
uC/OS-II的OSSchedLock()和OSSchedUnlock()函数允许应用程序锁定当前任务不被其它任务抢占. 使用时应当注意的是:当你调用了OSSchedLock()之后,而在调用OSSchedUnlock()之前, 千万不要再调用诸如OSFlagPend().OSMboxPend().OSMutexPend().OSQPend().OSSemPend()之类的事件等待函数! 而且应当确保OSSchedLock()和OSSchedUnlock()函数成对出现,特别是在有些分支条件语
UCOS 中的中断处理
最近遇到一个问题,当我在UCOS里调用系统延时"OSTimeDlyHMSM(0, 0, 0, 10)",程序进入硬件错误中断“HardFault_Handler”中. 我开始以为是主堆栈空间嵌套过多导致溢出,于是设置增大了主堆栈,但依然没有解决问题,和一个朋友联系后得知,他写代码很少在ISR中调用系统延时,我开始有了想法,如果说ISR里不允许,那为什么操作系统端没做限制呢?查看相关资料得知,是我对操作系统的不了解. uCOS为了防止主堆栈的用空导致程序跑飞,定义了“OSIntNesti
UCOS 请求任务删除函数 及其应用
有时候,如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失.在这种情况下,用户可以想法子让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己.用户可以通过OSTaskDelReq()函数来完成该功能. 函数名 OSTaskDelReq 参数 Prio要删除任务的优先级(0xFF表示当前任务) 功能描述 请求删除任务 函数原型 INT8U OSTaskDelReq(INT8U prio) 核 心 代 码 { if (prio ==
启动任务StartTask() 发送完消息队列 自己删除,接收方一直显示数据 用OSQFlush(Str_Q); //清空消息队列 下面纠结接收不到了 哈哈
在建立工程的时候,启动任务StartTask() 启动了任务MyTask(),也建立了消息队列,然后发送消息队列,发送完自己删除了自己,在接收方一直能接受到数据???为何??? 因为我们的消息队列未清空,消息队列里面一直有数据呢,当然在执行MyTask 的任务的时候, MyTask 里面有这句等待消息队列的语句ss=OSQPend(Str_Q,0,&err); //请求消息队列,如果在任务MyTask 里面我们清除消息队列嫩?啊是不是就没有数据接收了???果不其然,,,清空后 啥
uc/os 笔记(转)
1.uC/OS-II中使用互斥信号对象应该注意 互斥信号对象(Mutual Exclusion Semaphore)简称Mutex,是uC/OS-II的内核对象之一,用于管理那些需要独占访问的资源,并使其适应多任务环境. 创建每一个Mutex,都需要指定一个空闲的优先级号,这个优先级号的优先级必须比所有可能使用此Mutex的任务的优先级都高! uC/OS-II的Mutex实现原理大致如下: 当一个低优先级的任务A申请并得到了Mutex,于是它获得资源访问权.如果此后有一个高优先级的任务B开
lwip移植到stm32上-enc28j60,103mcu(2)
前面小玩了一下ucos和lwip,但是都还不是真正的网络多任务,真正的网络多任务应该是什么样子的呢?应该是有一个专门的任务负责网络的通讯,他负责将数据发送出去,将数据接收回来,而其他的需要用到网络的任务与这个任务通讯,这才是能够极大提升网络效率的办法,lwip支持这种办法,不过移植起来就比较磨人了 首先第一步是修改lwip的配置文件,如下 #define NO_SYS 0 //使用UCOS操作系统 改了这个之后会发现卧槽一下子缺了好多东西,实际上是这样,lwip使用一系列的宏和方法封装了一个操作
ucos队列的实现--源码分析
之前说到事件,讲了事件,信号量和互斥信号量,还有一个队列没说,今天说说队列. 队列是用在任务之间传送多个消息的时候,a任务发送消息,b任务发送消息,然后c任务可以依次去提取出b和a传递的消息,不会造成系统的阻塞,他的实现结构如下 在队列的实现中,也是使用事件ecb,OSEventType为OS_EVENT_TYPE_Q类型,而其OSEventPtr指向一个QS_Q结构的指针,该结构的定义如下 typedef struct os_q { /* QUEUE CON
uCos-II中任务的同步与通信
任务的同步与通信 任务间的同步 在多任务合作工作过程中,操作系统要解决两个问题: 各任务间应该具有一种互斥关系,即对某些共享资源,如果一个任务正在使用,则其他任务只能等待,等到该任务释放资源后,等待任务之一才能使用它: 相关的任务在执行上要有先后次序,一个任务要等其伙伴发来通知,或建立了某个条件后才能继续执行,否则只能等待: 任务之间的这种制约性的合作运行机制叫任务间的同步: 任务中的事件 uCosII使用信号量.消息邮箱和消息队列这些中间环节来实现任务之间的通信,而这些中间环节都统一称为事件:
【二代示波器教程】第14章 uCOS-III操作系统版本二代示波器实现
第14章 uCOS-III操作系统版本二代示波器实现 本章教程为大家讲解uCOS-III操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务栈,系统栈以及全局变量共享问题.同时,工程调试方法也专门做了说明. 14.1 注意事项(重要必读) 14.2 任务功能划分 14.3 用户任务优先级设置 14.4 全局变量分配,系统堆栈和任务堆栈 14.5 任务间通信和全局变量共享问题 14.6 uCOS-III系统调试 14.7
ucos中消息队列的应用(二)
继续说任务间的通信. 本次的任务是在ISR中发送一个消息给任务,ucos的代码中的是非常之简洁和容易理解啊.创建,释放,等待,非常好理解,不再赘述. 说说我遇到的问题,数据帧接收完之后,向消息队列发送了消息,任务中等待接收,设置为阻塞模式,代码非常简单. //ISR中释放 OSQPost((OS_Q *)&Msg_Que_Uart2, (void *)&end_flag, (OS_MSG_SIZE )1, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR *)&
μC/OS-II 任务的同步与通信 --- 消息队列
简介 使用消息队列可以在任务之间传递多条消息.消息队列由三个部分组成:事件控制块.消息队列和消息. 当把事件控制块成员 OSEventType 的值置为 OS_EVENT_TYPE_Q 时,该事件控制块描述的就是一个消息队列. 消息队列相当于一个共用一个任务等待列表的消息邮箱数组,事件控制块成员 OSEventPtr 指向了一个叫做队列控制块(OS_Q)的结构,该结构管理了一个数组 MsgTbl[ ],该数组中的元素都是一些指向消息的指针. 消息队列的数据结构 其中,可以移动的指针为 OSQIn
热门专题
虚拟机no media
arcgis WFS只获取到矢量 没有叠加到地图上
VMWARE导入EVE 放松ovf规范与虚拟硬件合规性检查
设置wamp开机自启动
mysql 怎么查看表被哪个线程锁住
ubuntu只有一个用户
Centos 把文件写入windows 共享文件夹
springboot在线预览文件
keepalived配置多个VRRP ID
docker查看镜像环境变量
实现一个累加函数add,使得add()()()
Bluestein算法
CubeMX配置正点原控索者STMF407的LWIP
builder.UseSqlServer 自动检测版本
因ipv6网络下无法加载问题而被拒
github怎么合并多个分支
js number 相加 取 后两位
locust 压测时 传参 get
python3 opencv 使用
打印机打pdf文件特别慢还老断