의 메시지 큐
1. 개념
원하는 데이터 통신 태스크 동안 전송되는 경우, 그 자체가 메시지 큐가 사용될 수없는 송신 된 데이터 신호의 양
그리고 메시지를 보낼 수있는 작업을 중단,하지만 작업은 메시지를받을 수 있습니다
2. 프로그래밍
(1) 메시지 큐를 만들
(OS_Q * p_q // 메시지 큐 제어 블록 (메시지 큐 참조) OSQCreate 무효화 |
(2) 메시지 보내기
, OSQPost (OS_Q * p_q을 무효화 // 메시지 큐 제어 블록 ()가 메시지 큐를 참조 |
(3) 메시지를 수신
보이드 OSQPend * (* OS_Q p_q는 // 메시지 큐 제어 블록 ()는 메시지 큐를 참조 뉴스 첫 번째 주소는 반환 값에 의해 반환 |
3. 내부 작업 메시지 큐
이 작업은 메시지 큐에 속에서만이 작업은 메시지 큐, 인터럽트 다른 작업에서 메시지를 읽고 메시지 큐에 메시지를 보낼 수 있습니다
사용하여 프로그래밍 :
(1) 초기화를 만들 필요가 없습니다
(2) 메시지 보내기
무효 OSTaskQPost은 (OS_TCB * p_tcb은, // 작업 제어 블록 |
(3) 수신 된 메시지를 (이 작업을 호출)
무효 * OSTaskQPend (OS_TICK 시간 초과, // 타임 아웃 리턴 메시지는 첫 번째 주소를 수신 |
II. 소프트웨어 타이머
1. 개념
클럭 소스로 시스템 소프트웨어 타이머 틱 시계 (틱)으로 너무 많은 기회없이 타이밍 정확도를위한 타이밍 기능을 달성하기 위해, 작업에 의해 달성시기는 달성
타이머는 일반적으로 약간의주기적인 작업을 수행하는 데 사용
타이머 작업 우선 순위 및 동작 주파수를 설정할 수 있습니다
OS_CFG_TMR_TASK_PRIO 타이머 태스크의 우선 순위를 판정한다 (2)
OS_CFG_TMR_TASK_RATE_HZ 타이머의 주파수 (100Hz에서)를 결정
2. 프로그래밍
(1) 타이머를 만들
void OSTmrCreate (OS_TMR *p_tmr,//指向定时器 |
(2)如果不在使用,可以删除定时器
CPU_BOOLEAN OSTmrDel (OS_TMR *p_tmr,//指向定时器 |
(3)启动定时器
CPU_BOOLEAN OSTmrStart (OS_TMR *p_tmr,//指向定时器 |
1)定时器以单次模式工作时,以延时时间(dly)间,只工作一次
2)定时器以周期模式工作时,延时时间为0,以周期时间(period)超时时间,周期性工作
3)定时器以周期模式工作时,延时时间非0,第一个周期超时时间为(dly),以后周期超时时间是周期时间(period),周期性工作
练习:
使用软件定时器3s读取一次温湿度并且通过串口打印(将DHT11中的ms延时换成us)
三.事件标识组
1.概念
事件标识组也是用来实现同步,而且用于多个对象之间的同步,同步方式有与同步/或同步
与同步就是等待所有的条件成立,或同步等待其中一个条件成立
2.编程接口
(1)创建
void OSFlagCreate (OS_FLAG_GRP *p_grp,//指向事件标识组 |
(2)修改事件标识组标识
OS_FLAGS OSFlagPost (OS_FLAG_GRP *p_grp,//指向事件标识组 |
(3)等待事件标识组
OS_FLAGS OSFlagPend (OS_FLAG_GRP *p_grp,//指向事件标识组 |
四.等待多个内核对象
1.概念
等待多个内核对象允许等待多个不同的内核对象(信号量,消息队列,标识组),根据等到的不同的内核对象进行不同的处理,类似与Linux中多路复用
要使用等待多个内核对象的功能,需要将 宏 OS_CFG_PEND_MULTI_EN 的值置1
2.函数接口(等待)
OS_OBJ_QTY OSPendMulti (OS_PEND_DATA *p_pend_data_tbl,//等待对象数组 //对象数组成员类型 struct os_pend_data { |