开放原子训练营(第四季)TobuOS——线下培训项目添加按钮检测逻辑
此次训练营由开放原子开源基金会与TobudOS团队联合举办,主要是为广大开发者提供一个交流嵌入式、物联网操作系统等相关技术和应用的平台,推动IoT领域的人才交流和培养。经过此次的活动,我也成功接入腾讯云,制作了一个简易的嵌入式物联网的小项目。
·
开放原子训练营(第四季)活动介绍
此次训练营由开放原子开源基金会与TobudOS团队联合举办,主要是为广大开发者提供一个交流嵌入式、物联网操作系统等相关技术和应用的平台,推动IoT领域的人才交流和培养。
经过此次的活动,我也成功接入腾讯云,制作了一个简易的嵌入式物联网的小项目。
在线下操作感受
起始一开始在准备环境的时候花费了一些时间,然后成功跑通了TobudOS,但是在移植IOT工程的时候出现了点问题,后面跟着大佬的解答,修改了IO口配置即可。连上腾讯云的感觉不是很复杂,这也是基于工程原有的mqtt去完成的,后面值得去看一下实现的代码,总的来说现场的大佬还是很给力的,分析问题很专业。
内容
结束线下培训后添加按钮检测
主要逻辑如上所示,红色框框为需要添加的逻辑
需要熟悉的API
任务的创建
k\_err\_t tos\_task\_create(k\_task\_t \*task,
char \*name,
k\_task\_entry\_t entry,
void \*arg,
k\_prio\_t prio,
k\_stack\_t \*stk_base,
size\_t stk_size,
k\_timeslice\_t timeslice);
| 参数 | 功能 |
|---|---|
| task | 任务结构体描述符 |
| name | 任务名称 |
| entry | 任务入口函数 |
| arg | 任务入口函数参数 |
| prio | 任务优先级 |
| stk_base | 任务栈空间首地址 |
| stk_size | 任务栈空间的大小 |
| timeslice | 时间片轮转调度侧策略中,时间片的大小设置,0 表示设置为系统默认值 |
消息队列相关
创建
k\_err\_t tos\_msg\_q\_create\_dyn(k\_msg\_q\_t \*msg_q, size\_t msg_cnt);
| 参数 | 功能 |
|---|---|
| msg_q | 消息队列句柄 |
| msg_cnt | 消息队列的最大消息数 |
写操作
k\_err\_t tos\_msg\_q\_post(k\_msg\_q\_t \*msg_q, void \*msg_ptr);
| 参数 | 功能 |
|---|---|
| msg_q | 消息队列句柄 |
| msg_ptr | 消息地址 |
拿操作
k\_err\_t tos\_msg\_q\_pend(k\_msg\_q\_t \*msg_q, void \*\*msg_ptr, k\_tick\_t timeout);
| 参数 | 功能 |
|---|---|
| msg_q | 消息队列句柄 |
| msg_ptr | 获取到的消息地址 |
| timeout | 等待超时参数 |
具体细节
检测按钮任务
k\_task\_t task1;//任务句柄
k\_stack\_t task_stack1[1024];//创建栈空间
k\_msg\_q\_t task1_msg_q;//队列句柄
void test\_task1(void \*Parameter)
{
unsigned int flag = 0;//状态
k\_err\_t err = tos\_msg\_q\_create\_dyn(&task1_msg_q, 10);//创建队列
if(err != K_ERR_NONE)
printf("TencentOS Create task1\_msg\_q fail! code : %d \r\n",err);
while(1)
{
#if 1
//检测按钮按下
if((HAL\_GPIO\_ReadPin( GPIOJ, KEY1_Pin) == GPIO_PIN_RESET) && flag == 0)
{
flag = 1;
err = tos\_msg\_q\_post(&task1_msg_q, (void \*)(&flag));
if (err != K_ERR_NONE)
printf("msg queue put fail! code : %d \r\n",err);
else
printf("msg queue put ok! value : %d \r\n",flag);
//发送事件 或者用全局变量
}
else if((HAL\_GPIO\_ReadPin( GPIOJ, KEY1_Pin) == GPIO_PIN_SET) && flag == 1)
{
flag = 0;
err = tos\_msg\_q\_post(&task1_msg_q, (void \*)(&flag));
if (err != K_ERR_NONE)
printf("msg queue put fail! code : %d \r\n",err);
else
printf("msg queue put ok! value : %d \r\n",flag);
//发送事件 或者全局变量
}
#else //测试代码
flag = flag ? 0 : 1;
err = tos\_msg\_q\_post(&task1_msg_q, (void \*)(&flag));
if (err != K_ERR_NONE)
printf("msg queue put fail! code : %d \r\n",err);
else
printf("msg queue put ok! value : %d \r\n",flag);
#endif
}
}
上传数据任务逻辑
我这边只添加我新的逻辑,原本的函数我就没添加出来了
void \*p ;//获取数据
//创建任务
k\_err\_t err = tos\_task\_create(&task1,
"task1",
test_task1,
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**



**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**


**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)**
<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />
# 最后
**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**
**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**
<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />
# 最后
**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**
**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**
**[更多资料点击此处获qu!!](https://bbs.csdn.net/topics/618376385)**
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)