开放原子训练营(第四季)活动介绍

此次训练营由开放原子开源基金会与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年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/0279dea771dc46777249cfd15eeca71c.png)

![img](https://img-blog.csdnimg.cn/img_convert/cdd1c7c968d6f9100c350b91db3ad6a6.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/366e182fdb76e4623d0785c7a3b3f356.png)

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

![img](https://img-blog.csdnimg.cn/img_convert/56d920ac77bf85410cb09e01ce9c8dc8.png)

![img](https://img-blog.csdnimg.cn/img_convert/f98a1ccb55fa1465fdd30417e22dacb7.png)

 

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以+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)**
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐