@@ -1,26 +1,72 @@
<EFBFBD> <EFBFBD> Ŀʵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڵ㣺
1<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> led״̬<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʪ<EFBFBD> ȼ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ؽڵ㴫<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> <EFBFBD> <EFBFBD> ʪ<EFBFBD> ȼ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɼ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʪ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͨ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> з<EFBFBD> <EFBFBD> ͵<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݵı <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> жϷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڽ<EFBFBD> <EFBFBD> ն<EFBFBD> <EFBFBD> У <EFBFBD> ͬʱ<EFBFBD> ½<EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڷ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڶ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> ź<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֮<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
3<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> жϴ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> <EFBFBD> ڴ<EFBFBD> <EFBFBD> <EFBFBD> 3<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 3<EFBFBD> <EFBFBD> <EFBFBD> յ<EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> жϺ <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> ͵<EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> ͬʱ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڽ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> С <EFBFBD>
<EFBFBD> <EFBFBD> ϵͳ<EFBFBD> <EFBFBD> FreeRTOS<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> õ<EFBFBD> api<EFBFBD> <EFBFBD>
һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD>
1<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͨ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ơ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȼ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӷ<EFBFBD> ʵ<EFBFBD> ֶ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬʱ<EFBFBD> ڵ<EFBFBD> <EFBFBD> ˵ĵ<EFBFBD> Ƭ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Բ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ռ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʽ <EFBFBD> <EFBFBD> <EFBFBD> С <EFBFBD> <EFBFBD> <EFBFBD> FreeRTOS<EFBFBD> У <EFBFBD> ʱ<EFBFBD> <EFBFBD> ԴƵ<EFBFBD> <EFBFBD> ͨ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 趨Ϊ1kHz(#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ))<29> <> ʱ<EFBFBD> <CAB1> Ƭ1tickҲ<6B> <D2B2> <EFBFBD> <EFBFBD> 1ms<6D> <73> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȼ<EFBFBD> <C8BC> <EFBFBD> ͬ<EFBFBD> <CDAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> £<EFBFBD> <C2A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> ʱ<EFBFBD> <CAB1> Ƭ<EFBFBD> л<EFBFBD> <D0BB> <EFBFBD> <EFBFBD> У <EFBFBD> Ҳ<EFBFBD> <D2B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ѯʽ <D1AF> <CABD> <EFBFBD> ȣ <EFBFBD> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȼ<EFBFBD> <C8BC> ϸ<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> ֵ<EFBFBD> ϸߣ<CFB8> <DFA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> Ҳ<EFBFBD> <D2B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ռ ʽ <D5BC> <CABD> <EFBFBD> ȡ<EFBFBD> <C8A1> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <F3A3ACBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ƿ飬<C6BF> <E9A3AC> <EFBFBD> <EFBFBD> TCB<43> <42> TCB<43> <42> <EFBFBD> л<EFBFBD> <D0BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> Ὣ<F2A3ACBB> <E1BDAB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> 뱣<EFBFBD> 浽<EFBFBD> <E6B5BD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ջ<EFBFBD> Ҳ<EFA3AC> <D2B2> <EFBFBD> DZ<EFBFBD> <C7B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֳ<EFBFBD> <D6B3> <EFBFBD> ֱ<EFBFBD> <D6B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> л<EFBFBD> <D0BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ٸ<EFBFBD> ԭ<EFBFBD> ֳ<EFBFBD> <D6B3> <EFBFBD> FreeRTOS<4F> <53> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ4<CEAA> <34> ״̬<D7B4> <CCAC> <EFBFBD> ֱ<EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 뵽<EFBFBD> <EBB5BD> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> ִ<EFBFBD> <D6B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֪<EFBFBD> <D6AA> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȼ<EFBFBD> <C8BC> <EFBFBD> <EFBFBD> <EFBFBD> <F1B1BBB8> <EFBFBD> <EFBFBD> ȼ<EFBFBD> <C8BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҳͬ<D2B2> <CDAC> <EFBFBD> <EFBFBD>
2<EFBFBD> <EFBFBD> ʹ <EFBFBD> õ<EFBFBD> <EFBFBD> <EFBFBD> api<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> void vTask(void *<<3C> <> <EFBFBD> <EFBFBD> >);
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> TaskHandle_t xTaskHandler;
#
## 项目实现逻辑:
**一、环境监测节点:**
- 1、创建任务: 创建了led状态任务、温湿度检测任务和向网关节点传输数据三个任务。
- 2、创建消息队列: 温湿度检测任务将采集到的温湿度数据通过队列发送到传输数据任务, 实现数据的保护。在中断服务函数中创建串口接收队列, 同时新建一个所有执行器检测状态的任务, 用于分析串口队列数据是否符合触发条件, 若符合则触发二值信号量, 反之则不触发。
- 3、创建中断触发消息队列: 在串口3创建消息队列, 当串口3接收到消息触发中断后, 将消息传送到消息队列, 同时创建一个任务用于接收消息队列。
## 本系统在FreeRTOS中引用的api:
**一、多任务创建与运行:**
- 1、概念: 通过定义任务句柄、名称、优先级, 从而实现多任务同时在单核的单片机中以并发或抢占的形式运行。在FreeRTOS中, 时钟源频率通常被设定为1kHz(#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )), 时间片1tick也就是1ms。在任务优先级相同的情况下, 多个任务按照一个时间片切换运行, 也就是轮询式调度; 当其中一个任务的优先级较高时( 数值较高) , 该任务会打断其他任务的运行, 也就是抢占式调度。在创建任务后, 会产生任务控制块, 简称TCB, TCB在切换任务的时候, 会将创建任务的指针保存到创建的栈里, 也就是保存任务现场, 直到任务切换过来后再复原现场。FreeRTOS的任务分为4个状态, 分别为就绪态、运行态、挂起态和阻塞态, 当其中一个任务遇到延时等情况, 会进入到阻塞态, 会执行其他任务知道延时结束, 低优先级任务被高优先级任务打断也同理。
- 2、使用到的api函数:
任务函数:
``` c
void vTask ( void * < 参 数 > ) ;
```
创建任务函数:
``` c
TaskHandle_t xTaskHandler ;
xTaskCreate (
( TaskFunction_t ) vTask,
(char * ) "<<3C> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> >",
( configSTACK_DEPTH_TYPE) 1024,
(void * ) NULL, <20> <> <EFBFBD> <EFBFBD> <EFBFBD> в<EFBFBD> <D0B2> <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ƣ<EFBFBD>
( UBaseType_t ) 2,<2C> <> <EFBFBD> <EFBFBD> <EFBFBD> ȼ<EFBFBD> <C8BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Խ<EFBFBD> <D4BD> <EFBFBD> <EFBFBD> <EFBFBD> ȼ<EFBFBD> Խ<EFBFBD> ߣ<EFBFBD>
( TaskHandle_t * ) & xTaskHandler);
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ⱥ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> vTaskStartScheduler();
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD>
1<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڳ<EFBFBD> ʼ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <EFBFBD> <EFBFBD> к<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֣<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> Ƕ<EFBFBD> <EFBFBD> е ij<EFBFBD> <EFBFBD> <EFBFBD> ,Ҳ<> <D2B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ܴ<EFBFBD> <DCB4> Ŷ<EFBFBD> <C5B6> ٸ<EFBFBD> <D9B8> <EFBFBD> <EFBFBD> ݣ<EFBFBD> <DDA3> ڶ<EFBFBD> <DAB6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ÿ<EFBFBD> <C3BF> <EFBFBD> <EFBFBD> <EFBFBD> ݵĴ<DDB5> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> λΪ<CEBB> ֽڣ<D6BD> <DAA3> <EFBFBD> stm32<33> <32> uint8_tָ<74> <D6B8> <EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> 4<EFBFBD> ֽڡ<D6BD> <DAA1> ڶ<EFBFBD> <DAB6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݵ<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <CAB9> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <CFA2> <EFBFBD> п<EFBFBD> <D0BF> Ժܺõر<C3B5> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݵĴ<DDB5> <C4B4> 䲻<EFBFBD> ᱻ<EFBFBD> <E1B1BB> <EFBFBD> <EFBFBD> <EFBFBD> õ<EFBFBD> <C3B5> <EFBFBD> <EFBFBD> ر<EFBFBD> <D8B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> š<EFBFBD> <C5A1> <EFBFBD> Ϣ<EFBFBD> <CFA2> <EFBFBD> <EFBFBD> ͨ<EFBFBD> <CDA8> <EFBFBD> <EFBFBD> <EFBFBD> Ͷ<EFBFBD> <CDB6> кͽ<D0BA> <CDBD> ն<EFBFBD> <D5B6> е ĺ<D0B5> <C4BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬ<EFBFBD> <CDAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EEBDA8> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> ݲ<EFBFBD> <DDB2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӷ<EFBFBD> ȷ<EFBFBD> <C8B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ţ<EFBFBD> <C5A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݵ<EFBFBD> <DDB5> <EFBFBD> <EFBFBD> <EFBFBD> <EEA1A3> DHT11<31> <31> <EFBFBD> յ<EFBFBD> <D5B5> <EFBFBD> ʪ<EFBFBD> <CAAA> <EFBFBD> <EFBFBD> <EFBFBD> ݣ<EFBFBD> <DDA3> <EFBFBD> <EFBFBD> <EFBFBD> ʪ<EFBFBD> <CAAA> <EFBFBD> <EFBFBD> <EFBFBD> ݴ<EFBFBD> <DDB4> 䵽LoRa<52> <61> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݵ<EFBFBD> <DDB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С <EFBFBD>
2<EFBFBD> <EFBFBD> ʹ <EFBFBD> õ<EFBFBD> <EFBFBD> <EFBFBD> api<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
1<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> õķ<EFBFBD> Ϊ<EFBFBD> <EFBFBD> ֵ<EFBFBD> ź<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͻ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <EFBFBD> <EFBFBD> 3<EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <EFBFBD> <EFBFBD> ,<2C> <> <EFBFBD> ж<EFBFBD> ֵ<EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> ȫ<EFBFBD> <C8AB> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͬ<EFBFBD> <CDAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߷ֱ<DFB7> <D6B1> <EFBFBD> <EFBFBD> ڶ<EFBFBD> <DAB6> <EFBFBD> Դ<EFBFBD> ͵<EFBFBD> <CDB5> <EFBFBD> Դ<EFBFBD> Ĺ<EFBFBD> <C4B9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ൱<EFBFBD> <E0B5B1> ͣ<EFBFBD> <CDA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> <EFBFBD> <EFBFBD> ൱<EFBFBD> <E0B5B1> ͣ<EFBFBD> <CDA3> <EFBFBD> <EFBFBD> <EFBFBD> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <CEBB> <EFBFBD> <EFBFBD> ͣ<EFBFBD> <CDA3> λͣ<CEBB> <CDA3> <EFBFBD> <EFBFBD> <EFBFBD> Ͳ<EFBFBD> <CDB2> <EFBFBD> ͣ<EFBFBD> <CDA3> <EFBFBD> ˣ<EFBFBD> <CBA3> <EFBFBD> <EFBFBD> <EFBFBD> Դͬ<D4B4> <CDAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> <EFBFBD> ֻ<EFBFBD> <D6BB> 0<EFBFBD> <30> 1<EFBFBD> <31> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> ʹ <EFBFBD> <CAB9> <EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> Ĺ<EFBFBD> <C4B9> ̣<EFBFBD> <CCA3> Զ<EFBFBD> ֵ<EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> -><3E> ͷŶ<CDB7> ֵ<EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> -><3E> <> ȡ<EFBFBD> <C8A1> ֵ<EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷŶ<CDB7> ֵ<EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷ<EFBFBD> <CDB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷ<EFBFBD> <CDB7> ж<EFBFBD> <D0B6> <EFBFBD> <EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> ƣ<EFBFBD> <C6A3> ͷ<EFBFBD> <CDB7> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ൱<EFBFBD> ڸı <DAB8> <C4B1> <EFBFBD> ־λ<D6BE> <CEBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȡ<EFBFBD> ź<EFBFBD> <C5BA> <EFBFBD> <EFBFBD> ൱<EFBFBD> ڻ<EFBFBD> ȡ<EFBFBD> ı <EFBFBD> <C4B1> ı <EFBFBD> ־λ<D6BE> Ծ<EFBFBD> <D4BE> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <C7B7> ı <EFBFBD> ִ<EFBFBD> <D6B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֻ<EFBFBD> <D6BB> 0<EFBFBD> <30> 1<EFBFBD> <31> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֻ<EFBFBD> п<EFBFBD> <D0BF> <EFBFBD> <CDB9> <EFBFBD> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC> ִ<EFBFBD> <D6B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2<EFBFBD> <EFBFBD> ʹ <EFBFBD> õ<EFBFBD> <EFBFBD> <EFBFBD> api<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
<EFBFBD> <EFBFBD> ̬<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> ź<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
( TaskFunction_t ) vTask,
( char * ) " <定义一个任务名称> " ,
( configSTACK_DEPTH_TYPE) 1024 ,
( void * ) NULL , ( 若 有 参 数 则 写 参 数 名 称 )
( UBaseType_t ) < 优 先 级 , 数 字 越 大 优 先 级 越 高 >
( TaskHandle_t * ) & xTaskHandler) ;
```
启动任务调度函数:
``` c
vTaskStartScheduler ( ) ;
```
**二、消息队列: **
- 1、概念: 在初始化消息队列函数种, 有两个参数, 第一个是队列的长度,也就是这个队列能存放多少个数据; 第二个参数就是每个数据的大小, 单位为字节, 在stm32中uint8_t指针的长度一般是4字节。在多个任务需要共用一个变量值以传递数据的时候, 使用消息队列可以很好地保护数据的传输不会被其他用到相关变量的任务干扰。消息队列通过发送队列和接收队列的函数, 将不同的任务搭建起一个传递参数的桥梁, 从而确保传递数据时不被其他任务干扰, 造成数据的误差。如DHT11接收到温湿度数据, 将温湿度数据传输到LoRa发送数据的任务中。
- 2、使用到的api函数:
创建队列句柄:
``` c
QueueHandle_t xQueueHandler ;
```
创建队列:
``` c
xQueueHandler = xQueueCreate (
( UBaseType_t ) < 队 列 的 长 度 , 单 位 字 节 > ,
( UBaseType_t ) < 每 个 数 据 的 大 小 > ) ;
```
发送队列, 也就是将数据存入队列, 等待接收, 接收时长从0到portMAX_DELAY, 如下所示。
``` c
xQueueSend ( xQueueHandler , < 要 传 递 的 变 量 , 指 向 其 地 址 > , pdMS_TO_TICKS ( 10 ) ) ;
```
在中断中发送队列(在串口初始化中设置中断抢占优先级配置拉满,且需要设置上下文转换以免造成阻塞):
``` c
BaseType_t xHigherPriorityTaskWoken = pdFALSE ;
xQueueSendFromISR ( xQueueUsart3IrqHdlr , & ulRxData , & xHigherPriorityTaskWoken ) ;
portYIELD_FROM_ISR ( xHigherPriorityTaskWoken ) ;
```
接收队列,可接收普通和中断的队列:
``` c
xQueueReceive ( xQueueHandler , < 要 传 递 的 变 量 , 指 向 其 地 址 > , portMAX_DELAY ) ;
```
**三、信号量: **
- 1、概念: 信号量一般用于任务管理。常用的分为二值信号量、计数型信号量和互斥信号量3种信号量,其中二值信号量全称为二进制信号量, 用于任务同步, 类似于状态机, 而后两者分别用于多资源和单资源的管理, 资源管理就相当于停车场, 多资源管理相当于停车场的多个车位, 若停车位停满车就不能停车了, 单资源同理。这三种信号量都只有0或1两种值。使用信号量的过程, 以二值信号量为例, 为创建二值信号量->释放二值信号量->获取二值信号量。释放二值信号量共有两个函数, 释放任务中信号量和释放中断中信号量。信号量和状态机类似, 释放信号量就相当于改变标志位, 而获取信号量相当于获取改变的标志位以决定是否改变执行器的状态。由于只有0和1两种值, 因此适用于只有开和关两种状态的执行器。
- 2、使用到的api函数:
动态创建二值信号量:
``` c
SemaphoreHandle_t xSemaphoreHandler ;
```
发送信号量:
``` c
xSemaphoreGive ( xSemaphoreHandler ) ;
```
接收信号量:(接收句柄、等待时长)
``` c
if ( xSemaphoreTake ( xSemLedOnHdlr , pdMS_TO_TICKS ( 10 ) ) = = pdTRUE ) ;
```