build执行编译,build clean清除编译
编译成功则会在out目录下生成 .fwpkg 编译产物,可直接下载到板子里面
OpenCPU SDK代码目录结构,如下图所示:
名称 | 描述 |
---|---|
custom | 用户代码目录、用户程序入口 |
docs | 文档 |
examples | 示例代码 |
include | OpenCPU API 头文件 |
out | 编译输出目录 |
prebuild | 预编译文件 |
third-party | 第三方开源代码库 |
tools | 编译工具脚本 |
在进行二次开发时可以多参考官网提供的手册以及docs目录和examples目录,提供了相当丰富的外设驱动源码例程
我们比较关心的是如何添加.c和.h文件到工程中,以及如何通过编译
以下cm_opencpu_entry即为我们所认知的main函数
方法很简单,在custom.mk文件中新增C_FILES_SOURCE += custom/src/xxx.c即可
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