跳转至

添加新的模块

添加代码文件

// 定义ULOG的标签和基本,必须位于c/c++文件最顶部,且不能定义在.h文件
#define LOG_TAG "hello_world"
#define LOG_LVL LOG_LVL_DBG

// nextpilot.h包含项目中可能用到的所有头文件
#include "nextpilot.h"

// 当前程序是否运行
static bool _is_app_running = false;
static uint32_t _app_run_count = 0;

// hello_world线程入口函数
void hello_world_entry(void *param){
    while (_is_app_running){
        // do some thing
        _app_run_count++;
        // 延时10ms
        rt_thread_mdelay(10);
    }
    _is_app_running = false;
}

// hello_world启动程序
// 默认通过INIT_APP_EXPORT导出到初始化列表
// 也可以通过命令行hell_world start启动
int hello_world_start(){
    if (_is_app_running){
        LOG_W("hello world is running");
        return -RT_ERROR;
    }

    LOG_I("this is hello world\n");

    _is_app_running = true;
    return RT_EOK;
}
// INIT_APP_EXPORT宏将hello_world_start添加到初始化列表中
// 在系统启动之后会自动调用该函数,无须手动添加到main()中
INIT_APP_EXPORT(hello_world_start);

// hello_world停止程序
// 通过命令行hello_world stop触发
int hello_world_stop(){

    if (!_is_app_running) {
        LOG_W("hello world not running");
        return -RT_ERROR;
    }

    _is_app_running = false;
    return RT_EOK;
}


int hello_world_main(int argc, char** argv){

}
// 添加命令行,可以通过终端交互操作hell_world
MSH_CMD_EXPORT_ALIAS(hello_world_main, hello, hello world demo);

添加 Kconfig 文件

menuconfig APP_USING_HELLO_WORLD
    bool "hello world demo"
    default n

if APP_USING_HELLO_WORLD
#
endif

添加 Sconscript 文件

import os
import sys
from building import *

# 当前Sconscript文件目录
cwd = GetCurrentDir()

# 需要加入编译的文件
src = Glob("*.c")

# 需要加入include的目录
inc = [cwd]

# 依赖APP_USING_HELLO_WORLD
# 如果rtconfig.h中没有定义APP_USING_HELLO_WORLD则不会编译
objs = DefineGroup(src, inc, depend=['APP_USING_HELLO_WORLD'], )