前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >M5310-E之SDK开发

M5310-E之SDK开发

作者头像
Gnep@97
发布2023-08-10 09:41:37
1760
发布2023-08-10 09:41:37
举报
文章被收录于专栏:Gnep's_Technology_Blog

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

代码语言:javascript
复制
#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

代码语言:javascript
复制
/**
 *  @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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、SDK编译
  • 2、SDK根目录结构介绍
  • 3、SDK重要文件介绍
    • 3.1 程序入口函数
      • 3.2 新增.c和.h文件编译
        • 3.3 点亮一个LED灯
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档