前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中移ML307R(4G Cat1,C-SDK,OpenCPU)模组学习开发-添加源文件和头文件,工程结构说明(用户必看)

中移ML307R(4G Cat1,C-SDK,OpenCPU)模组学习开发-添加源文件和头文件,工程结构说明(用户必看)

作者头像
杨奉武
发布2024-08-15 15:18:43
920
发布2024-08-15 15:18:43
举报
文章被收录于专栏:知识分享

说明

通过上节的 编译下载和运行第一个程序 咱知道咱是在custom里面写自己的程序;

咱后面写自己的程序的时候可以把.c文件放到src文件夹里面;   .h文件可以放到inc里面

不过可以随意,我一般喜欢把.c和.h放到一块,这样子方便些,后面我都会把文件放到src文件夹里面

custom_main.c 里面的   int cm_opencpu_entry(void * param)      函数是程序的main函数, 程序从这个函数里面开始执行

现在新建.c和.h文件

因为我不喜欢把.c文件和.h文件分开, 所以我直接把.c和.h文件放到src里面

1,在src文件夹右键选择 新建文件

test.c

2,同样在src文件夹新建个test.h文件

3,然后如果要使用test.c 需要在 SConscript 里面添加包含

代码语言:javascript
复制
# -*- coding: utf-8 -*-
#====================================================================
#
# Copyright © 2023 China Mobile IOT. All rights reserved.
#
#
#====================================================================


Import('env')
from ModuleBuild import *

module = 'custom_main'  # 模块名,同簇模块不得重名
current_dir = os.path.join(Dir('.').abspath)
target = None


#========================================================
# ram_source_files:运行在ram中
# flash_source_files:运行在flash中
#========================================================
ram_source_files = [#添加.c文件路径(让程序运行在ram中)
    'custom_main/src/custom_main.c',
    'custom_main/src/test.c',
]

flash_source_files = [#添加.c文件路径(让程序运行在flash中,节省内存)
    
]


#========================================================
# public_incs: 在这个里面添加其它模块里面的.h文件的路径
# private_incs:在这个里面添加本模块(custom_main文件夹)里面的 .h文件的路径
#========================================================
public_incs = [
    current_dir + '/../examples/mcu_sys/inc',#这边使用mcu_sys.h是其它模块里面的,所以在这里添加路径
]

private_incs = [
    current_dir + '/custom_main/inc',
    current_dir + '/custom_main/src',#test.h是本模块里面的,所以在这里添加路径
]


#========================================================
# cpp_define:仅适用于本模块,对其他模块不可见
#========================================================
cpp_defines = [
]


#========================================================
# 模块编译
#========================================================
mod = ModuleBuild(env,
        name = module,
        ram_srcs = ram_source_files,
        flash_srcs = flash_source_files,
        pub_incs = public_incs,
        pri_incs = private_incs,
        cpp_define = cpp_defines
)

target = mod.build_object()

Return('target')

现在说一下咱都可以直接写哪些 #include xxxx.h

1,首先这就是个单片机使用的C编译器,所以C库都是可以的

#include <stdint.h>

#include <stdbool.h>

#include <string.h> 

.

.

.

2,然后呢就是厂家内部封装好的库(这些底层都设置好了引用)

咱可以直接在文件里面  #include xxxx.h

3,假设我需要在test里面使用模组的ADC功能, 只需要  #include "cm_adc.h"

4, 然后我就可以使用里的函数了

代码语言:javascript
复制
#include "cm_adc.h"


void test(void)
{
    int32_t adc_value=0;

    cm_adc_read(CM_ADC_0, &adc_value);//读取电压
}

5, 除了上面的include里面的,其它地方也有几个直接可以引用的

我只是全方面阐述,知不知道这个无所谓!

标准的思路

1,其实咱们都是在  examples 例子里面找需要的功能,找到自己需要的功能以后看看里面都调用了哪些.h文件咱就调用哪些就可以

2,假设我需要ADC的功能

3,我就可以去掉不必要的之后把需要的拷贝过来

同时我把串口打印改为了使用日志打印(使用日志口打印函数添加 #include "cm_sys.h" 头文件)

代码语言:javascript
复制
#include "cm_adc.h"

#include <stdint.h>
#include "cm_adc.h"
#include "cm_os.h"
#include "cm_sys.h"

void test(void)
{
    int32_t voltage=0;
    uint32_t voltage_vbat=0;
    int32_t ret;
    
    ret = cm_adc_vbat_read(&voltage_vbat);
    if(ret != 0)
    {
        cm_log_printf(0, "adc vbate read err,ret=%d\n", ret);//串口打印改为了使用日志打印
    }
    cm_log_printf(0, "adc vbate read:%ld(mv)!!\n",voltage_vbat);

    //测试ADC0
    ret = cm_adc_read(CM_ADC_0,&voltage);
    if(ret != 0)
    {
        cm_log_printf(0, "adcCM_ADC_0 read err,ret=0x%08x\n", ret);
    }
    cm_log_printf(0, "adc CM_ADC_0 read:%ld(mv)!!\n",voltage);
    cm_log_printf(0, "adc test end!!\n");
}

现在我需要在 custom_main.c 里面调用test.c里面的 test函数

1,先按照正常写单片机C语言的规定补全 test.h文件

代码语言:javascript
复制
#include "test.h"
#include "cm_adc.h"

#include <stdint.h>
#include "cm_adc.h"
#include "cm_os.h"
#include "cm_sys.h"

void test(void)
{
    int32_t voltage=0;
    uint32_t voltage_vbat=0;
    int32_t ret;
    
    ret = cm_adc_vbat_read(&voltage_vbat);
    if(ret != 0)
    {
        cm_log_printf(0, "adc vbate read err,ret=%d\n", ret);//串口打印改为了使用日志打印
    }
    cm_log_printf(0, "adc vbate read:%ld(mv)!!\n",voltage_vbat);

    //测试ADC0
    ret = cm_adc_read(CM_ADC_0,&voltage);
    if(ret != 0)
    {
        cm_log_printf(0, "adcCM_ADC_0 read err,ret=0x%08x\n", ret);
    }
    cm_log_printf(0, "adc CM_ADC_0 read:%ld(mv)!!\n",voltage);
    cm_log_printf(0, "adc test end!!\n");
}
代码语言:javascript
复制
#ifndef test_h_
#define test_h_

void test(void);

#endif

2,然后就可以调用了

代码语言:javascript
复制
#include "custom_main.h"

#include "test.h"

int cm_opencpu_entry(void *param)
{
    (void)param;

    test();

    return 0;
}

编译下载测试

下载的详细步骤用户去看    "编译下载和运行第一个程序"  那节,这里不再详细赘述;

1,编译

双击打开

先清理工程    scons -c

然后按一下键盘的 回车 运行下指令

编译 custom_main 工程

输入命令 scons custom=y   ,然后按回车键执行

2,下载

选择生成的zip文件,然后点击start

先一直按着BOOT按键,然后按一下RST按键, 然后松开RST按键, 最后松开BOOT,此时模组进入了烧录程序模式

烧录成功以后点击 Back返回

3,测试

使用串口模块连接上

复位一下开发板可以看到打印的日志

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
    • 通过上节的 编译下载和运行第一个程序 咱知道咱是在custom里面写自己的程序;
      • 咱后面写自己的程序的时候可以把.c文件放到src文件夹里面;   .h文件可以放到inc里面
        • 不过可以随意,我一般喜欢把.c和.h放到一块,这样子方便些,后面我都会把文件放到src文件夹里面
          • custom_main.c 里面的   int cm_opencpu_entry(void * param)      函数是程序的main函数, 程序从这个函数里面开始执行
          • 现在新建.c和.h文件
            • 因为我不喜欢把.c文件和.h文件分开, 所以我直接把.c和.h文件放到src里面
              • 1,在src文件夹右键选择 新建文件
                • test.c
                  • 2,同样在src文件夹新建个test.h文件
                    • 3,然后如果要使用test.c 需要在 SConscript 里面添加包含
                    • 现在说一下咱都可以直接写哪些 #include xxxx.h
                      • 1,首先这就是个单片机使用的C编译器,所以C库都是可以的
                        • 2,然后呢就是厂家内部封装好的库(这些底层都设置好了引用)
                          • 咱可以直接在文件里面  #include xxxx.h
                        • 3,假设我需要在test里面使用模组的ADC功能, 只需要  #include "cm_adc.h"
                          • 4, 然后我就可以使用里的函数了
                            • 5, 除了上面的include里面的,其它地方也有几个直接可以引用的
                              • 我只是全方面阐述,知不知道这个无所谓!
                          • 标准的思路
                            • 1,其实咱们都是在  examples 例子里面找需要的功能,找到自己需要的功能以后看看里面都调用了哪些.h文件咱就调用哪些就可以
                              • 2,假设我需要ADC的功能
                                • 3,我就可以去掉不必要的之后把需要的拷贝过来
                                  • 同时我把串口打印改为了使用日志打印(使用日志口打印函数添加 #include "cm_sys.h" 头文件)
                              • 现在我需要在 custom_main.c 里面调用test.c里面的 test函数
                                • 1,先按照正常写单片机C语言的规定补全 test.h文件
                                  • 2,然后就可以调用了
                                  • 编译下载测试
                                    • 下载的详细步骤用户去看    "编译下载和运行第一个程序"  那节,这里不再详细赘述;
                                      • 1,编译
                                        • 双击打开
                                        • 先清理工程    scons -c
                                        • 然后按一下键盘的 回车 运行下指令
                                        • 编译 custom_main 工程
                                        • 输入命令 scons custom=y   ,然后按回车键执行
                                      • 2,下载
                                        • 选择生成的zip文件,然后点击start
                                        • 先一直按着BOOT按键,然后按一下RST按键, 然后松开RST按键, 最后松开BOOT,此时模组进入了烧录程序模式
                                        • 烧录成功以后点击 Back返回
                                      • 3,测试
                                        • 使用串口模块连接上
                                        • 复位一下开发板可以看到打印的日志
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档