Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
[第3期 空气质量分析仪]-第三周作业
发布于 2019-10-31 21:22:07 浏览:809
订阅该版
* 本帖最后由 姚树坤 于 2019-10-31 21:31 编辑 * 本周任务1:实现异步日志(熟悉 IPC:邮箱的使用)相信大家打印的时候,实现一个异步日志 mylog(),使用 mylog() 进行异步日志的打印。 通过查看邮箱的使用说明,和在论坛中借鉴别人的学习经验,在程序中添加mylog()使用程序 [list=1] (*)#include "mylog.h" (*)struct mailbox_mesg (*){ (*) char *tag; (*) rt_uint32_t data; (*)}; (*) (*)static struct mailbox_mesg mbsg; (*)static struct rt_mailbox mb; (*)/* 用于放邮件的内存池 */ (*)static char mb_pool[128]; (*)static void mylog_entry(void); (*)static void mylog_entry(void) (*){ (*) struct mailbox_mesg *mb_msg; (*) rt_uint32_t temp_humi; (*) while(1) (*) { (*) if (rt_mb_recv(&mb, (rt_uint32_t *)&mb_msg, RT_WAITING_FOREVER) == RT_EOK) (*) { (*) if(strcmp(mb_msg->tag,"Temp") == 0) (*) { (*) (*) rt_kprintf("
",(int)(mb_msg->data)); (*) } (*) else if(strcmp(mb_msg->tag,"Humi") == 0) (*) { (*) (*) rt_kprintf("
",mb_msg->data); (*) (*) } (*) else (*) { (*) (*) rt_kprintf("
",(mb_msg->data)); (*) } (*) } (*) (*) } (*) (*)} (*)rt_int8_t mylog_init(void) (*){ (*) rt_thread_t mylog_th; (*) rt_err_t result; (*) result = rt_mb_init(&mb, (*) "mbt", (*) &mb_pool[0], (*) sizeof(mb_pool) / 4, (*) RT_IPC_FLAG_FIFO); (*) if (result != RT_EOK) (*) { (*) rt_kprintf("init mailbox failed.
"); (*) return -1; (*) } (*) mylog_th = rt_thread_create("mylog",mylog_entry,RT_NULL,1024, RT_THREAD_PRIORITY_MAX / 2,20); (*) (*) rt_thread_startup(mylog_th); (*) return 0; (*)} (*)void mylog(char * tag, rt_uint32_t data) (*){ (*) (*) mbsg.tag = tag; (*) mbsg.data = (int)data; (*) (*) (*) rt_mb_send(&mb,(rt_ubase_t)&mbsg); (*)} [/list] 之后结合前两周的实验例子,进行相关数据实现异步打印 任务2:系统跑起来(熟悉 IPC:事件集的使用) 该任务的设计中主要使用LED灯和前两周的温湿度传感器以及PM2.5传感器,部分主要代码 [list=1] (*)static void event_entry(void) (*){ (*) rt_uint32_t event_msg; (*) while(1) (*) { (*) if(rt_event_recv(&event,(EVENT_TEMP_HUMI_ON|EVENT_TEMP_HUMI_OFF|EVENT_TEMP_HUMI_ALERT| (*) EVENT_PM25_ON|EVENT_PM25_OFF|EVENT_PM25_ALERT),RT_EVENT_FLAG_OR| (*) RT_EVENT_FLAG_CLEAR,RT_WAITING_FOREVER,&event_msg) == RT_EOK) (*) { (*) (*) if(event_msg & EVENT_TEMP_HUMI_ON) (*) { (*) led_flag1 = 0; (*) led_on(LED_0); (*) } (*) if(event_msg & EVENT_TEMP_HUMI_OFF) (*) { (*) led_flag1 = 0; (*) led_off(LED_0); (*) } (*) if(event_msg & EVENT_TEMP_HUMI_ALERT) (*) { (*) (*) led_flag1 = 1; (*) } (*) if(event_msg & EVENT_PM25_ON) (*) { (*) led_flag2 = 0; (*) led_on(LED_1); (*) } (*) if(event_msg & EVENT_PM25_OFF) (*) { (*) led_flag2 = 0; (*) led_off(LED_1); (*) (*) } (*) if(event_msg & EVENT_PM25_ALERT) (*) { (*) (*) led_flag2 = 1; (*) } (*) } (*) } (*) (*)} (*)static void led_entry(void) (*){ (*) char status; (*) while(1) (*) { (*) (*) if(led_flag1) (*) { (*) status = rt_pin_read(LED0); (*) rt_pin_write(LED0,!status); (*) (*) } (*) (*) if(led_flag2) (*) { (*) status = rt_pin_read(LED1); (*) rt_pin_write(LED1,!status); (*) (*) } (*) (*) rt_thread_delay(300); (*) } (*)} (*) (*)void led_init() (*){ (*) rt_err_t result; (*) rt_thread_t event_th; (*) rt_thread_t led_th; (*) result = rt_event_init(&event, "event", RT_IPC_FLAG_FIFO); (*) if (result != RT_EOK) (*) { (*) rt_kprintf("init event failed.
"); (*) return ; (*) } (*) (*) rt_pin_mode(LED0, PIN_MODE_OUTPUT); (*) rt_pin_mode(LED1, PIN_MODE_OUTPUT); (*) (*) rt_pin_write(LED0, PIN_HIGH); (*) rt_pin_write(LED1, PIN_HIGH); (*) (*) event_th = rt_thread_create("event_th",event_entry,RT_NULL,1024, RT_THREAD_PRIORITY_MAX / 2,20); (*) rt_thread_startup(event_th); (*) led_th = rt_thread_create("led_th",led_entry,RT_NULL,1024, RT_THREAD_PRIORITY_MAX / 2,20); (*) rt_thread_startup(led_th); (*) (*)} (*)void led_note(char opt) (*){ (*) switch(opt) (*) { (*) case TEMP_HUMI_ON: (*) (*) rt_event_send(&event, EVENT_TEMP_HUMI_ON); (*) break; (*) (*) case TEMP_HUMI_OFF: (*) rt_event_send(&event, EVENT_TEMP_HUMI_OFF); (*) break; (*) (*) case TEMP_HUMI_ALERT: (*) rt_event_send(&event, EVENT_TEMP_HUMI_ALERT); (*) break; (*) (*) case PM25_ON: (*) rt_event_send(&event, EVENT_PM25_ON); (*) break; (*) (*) case PM25_OFF: (*) rt_event_send(&event, EVENT_PM25_OFF); (*) break; (*) (*) case PM25_ALERT: (*) rt_event_send(&event, EVENT_PM25_ALERT); (*) break; (*) (*) } [/list]  经过三个周的学习,对整个操作系统逐渐有了一些了解,前两周学习相对本周来说还算简单,相关的知识属于基本性的操作 本次任务涉及邮箱等,属于小系统跑跑的概念,相关知识点正在逐渐熟悉中,整个系统使用起来还是相对方便,更深层次的 是对整个系统的内容的学习理解,并逐渐开始应用整个系统进行相关设计。继续加油吧,脑壳疼
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
809
关于作者
姚树坤
这家伙很懒,什么也没写!
提问
5
回答
0
被采纳
0
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
Wireshark抓包EtherCAT报文
2
RISC-V hardfault分析工具,RTTHREAD-RVBACKTRACE 原理讲解
3
基于RT-Thread的STM32G4开发第二讲第二篇——ADC
4
基于RT-Thread的STM32F4开发第二讲第一篇——ADC
5
RT-Thread studio的驱动5.1.0报错修改
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
818
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部