M5310-E SDK学以致用
1、SDK编译
build执行编译,build clean清除编译
- win+R进入windows的命令行
- cd到SDK的根目录
- build
编译成功则会在out目录下生成 .fwpkg 编译产物,可直接下载到板子里面
2、SDK根目录结构介绍
OpenCPU SDK代码目录结构,如下图所示:
名称 |
描述 |
custom | 用户代码目录、用户程序入口 |
docs | 文档 |
examples | 示例代码 |
include | OpenCPU API 头文件 |
out | 编译输出目录 |
prebuild | 预编译文件 |
third-party | 第三方开源代码库 |
tools | 编译工具脚本 |
在进行二次开发时可以多参考官网提供的手册以及docs目录和examples目录,提供了相当丰富的外设驱动源码例程
3、SDK重要文件介绍
我们比较关心的是如何添加.c和.h文件到工程中,以及如何通过编译
3.1 程序入口函数
以下cm_opencpu_entry即为我们所认知的main函数
3.2 新增.c和.h文件编译
方法很简单,在custom.mk文件中新增C_FILES_SOURCE += custom/src/xxx.c即可
3.3 点亮一个LED灯
led.c
#include "led.h" #include "cm_gpio.h" #include "cm_iomux.h" #include "cm_os.h" cm_gpio_num_e led_gpio = CM_GPIO_NUM_14; /* * 函数名: led_on * 描述: 打开 LED */ void led_on(void) { cm_gpio_set_level(led_gpio, CM_GPIO_LEVEL_HIGH); } /* * 函数名: led_off * 描述: 关闭 LED */ void led_off(void) { cm_gpio_set_level(led_gpio, CM_GPIO_LEVEL_LOW); } /* * 函数名: led_init * 描述: led 初始化函数, 将引脚 21 复用为 GPIO_14 */ void led_init(void) { cm_gpio_cfg_t cfg = {0}; cm_gpio_level_e level = CM_GPIO_LEVEL_LOW; cm_iomux_pin_e pin = CM_IOMUX_PIN_21; cm_iomux_func_e fun = CM_IOMUX_FUNC_PIN21_GPIO_14; cfg.direction = CM_GPIO_DIRECTION_OUTPUT; cfg.pull = CM_GPIO_PULL_UP; // 硬件设计 LED 连接到 21 引脚,此引脚默认为 SPI0_RXD, 因此需要进行复用为 GPIO cm_iomux_set_pin_func(pin, fun); // 复用到 GPIO_14 cm_gpio_init(led_gpio, &cfg); cm_gpio_set_level(led_gpio, level); }
custom_main.c
/** * @file custom_main.c * @brief OpenCPU 启动入口 * @copyright copyright © 2021 China Mobile IOT. All rights reserved. * @author by * @date 2021/10/22 */ #include "custom_main.h" #include "cm_os.h" #include "led.h" static void led_task(void *arg) { (void)arg; led_init(); while (1) { led_on(); osDelay(1000); led_off(); osDelay(1000); } } /*OpenCPU程序入口*/ void cm_opencpu_entry(void) { /* 用户线程优先级范围osPriorityNormal -> osPriorityNormal5*/ osThreadAttr_t attr1 = { .name = "LED-TASK", .priority = osPriorityLow3, .stack_size = 1024 }; //创建线程 主任务 osThreadNew(led_task, NULL, (const osThreadAttr_t*)&attr1); }
此时LED灯循环亮1s灭1s