本文简要介绍了如何基于小熊派开发板LiteOS中间移植传感器,实现传感器的相关控制。
1 hello world
我相信无论你从学习编程语言开始,第一个函数都应该是HelloWorld,本文将从hello_world_demo介绍如何移植传感器。
首先,我们创建它HelloWorld工程,选择STM32_BearPi → hello_world_demo,可自定义工程名称。
创建后,我们点击编译,然后到开发板,打开VSCode-IoTLink串口,串口连接参数按图设置,然后按键Reset,串口打印如下图所示。
首先,我们来介绍一下代码操作的简单流程,以前是漫谈LiteOS介绍了系列LiteOS 在程序下载到开发板后,我们知道启动过程将首先按下Reset按钮启动开发板,所以开发板上电后执行的第一个函数是ReSet_Handler函数。
首先,找到相应的启动文件los_startup.S 文件(根据使用的操作系统和板MCU系列查找文件目录),可以看到其由汇编语言编写,具体启动流程在漫谈LiteOS这个系列已经介绍过了,这里只看91行,运行到main函数,下一个程序将从main函数开始执行。
接下来看main函数,在main函数中,从硬件初始化到内核初始化,再到串口初始化link_test()函数在函数中创建任务,其入口函数为Link_main函数。
在Link_main函数最后调用函数standard_app_demo_main(),根据IDE我们可以看到项目中有很多同名函数,那么编译器如何知道具体执行哪一个呢?.config文件中的user_demo宏定义使能hello_world_demo,所以执行是hello_world_demo中的standard_app_demo_main()函数,从而根据其内部创建的任务以及入口函数实现了打印Hello World! This is BearPi! This is BearPi!。接下来,我们移植传感器。
2 传感器移植
首先,我们可以看到该在哪里LiteOS代码中经包含了大量的传感器代码E53_SC例如,这些传感器已经和谐了BearPi开发板已经适配好,如果您想使用自己特定的传感器,可以首先将传感器与开发板进行一定的移植,包括引脚以及GPIO绑定等。
首先,在编译路径中添加传感器文件路径,使编译器能够找到代码userdemo.mk在文件中找到传感器文件的相关路径hello_world_demo部分添加文件路径。具体如下图83-84行,然后在源文件和头文件变量中添加自定义变量,user_sensor_src和user_hardware_inc,当然,如果您直接将名称定义为编译路径中已经存在的名称user_hardware_src和user_hardware_inc,无需添加相关代码。
首先,我们需要添加传感器头文件helloworld_demo.c实现以下相关函数调用。
#include "E53_SC1.h"
然后调用结构体,以便后续打印数据。
E53_SC1_Data_TypeDef E53_SC1_Data;
然后在hello_world_demo.c传感器数据的任务函数添加到文件中。
static int app_sensor_entry() { Init_E53_SC1(); while (1) { E53_SC1_Read_Data(); printf("luminance:%d\n", (int)E53_SC1_Data.Lux); osal_task_sleep(2*1000); } return 0; }
传感器任务函数在主函数中创建。
osal_task_create("app_sensor_entry", app_sensor_entry, NULL, 0x400,NULL,2); osal_task_sleep(2*1000);
具体如下图
然后我们编译烧录,验证传感器的移植是否正确。