#ML307A-DCLN开发 #ML307A-DSLN开发 #OpenCPU
ML307A-DSLN如何移植demo生成自己的工程?
custom文件夹用于存放我们自己的工程,刚开始是这样的:
如上图所示,只有一个入口函数。
以下以生成一个通过串口连续发送Hello World!字符串的固件为例,介绍如何移植examples中的demo实现自己的工程:
首先,找到关于串口的demo,阅读源码中的.c文件,找到了cm_demo_printf()函数,该函数中加了一些容错判断和通过vsnprintf生成一个格式化后的字符串,由cm_uart_write()函数驱动串口发送数据 。
找到了发送数据的方法,我们需要知道如何初始化和配置串口,发现下面的cm_demo_uart()函数初始化并且配置了串口,我们可以借鉴。
直接使用这个文件中的函数需要注意RTOS的使用问题,注意这里有一个cmd_task_flag的标志位是extern外部引用,我们可以参考cm_demo_main.c文件的示例代码去搭建我们的custom_main.c文件实现。
由上图,示例工程中通过调用RTOS写的,我尝试不使用RTOS去写程序发现程序运行2秒后会卡死,查阅SDK开发手册,推测问题应该与该模组软件系统框架有关:
所以我们应该按照examples中给的demo开发,cm_opencpu_entry()函数中创建一个任务线程,在创建的任务中跑自己的业务逻辑。以下是完整的custom_main.c中的代码:
我们还需要移植一下uart相关的文件到custom目录下,首先我们创建一个uart文件将uart相关的源文件和头文件放到里面,注意还有一个.mk文件,他是一个makefile文件,记录了编译时gcc编译器的信息,我们也需要移植:
此外,完成了上述步骤我们还需要告诉编译器要去哪里找我们的函数声明和函数定义,我们需要在custom_main.mk文件中添加编译信息,如下图:
接下来还需要cm_common.h文件放到inc目录下,cm_common.h在examples的文件夹中可找到,它包含了一些测试串口宏定义,测试串口就是uart0:
接下来就可以编译生成固件了:
首先找到工程根目录,复制:
Win+R调出指令窗口,输入cmd:
cd+空格+粘贴工程路径+回车 进入我们的工程根目录:
注意:1.鼠标右键为粘贴功能;2.如果你的工程根目录不在C盘而在D盘,可以先输入D:跳转到D盘后再输入命令。
先执行ML307A_build.bat CLEAN或者ML307A_build.bat CLEAN demo清除之前生成的固件:
然后执行ML307A_build.bat DSLN编译工程生成固件,最后出现下面信息代表编译通过成功生成了固件ML307A_DSLN_APP.zip:
注意:我的模块型号是ML307A_DSLN,如果是ML307A_DCLN则执行ML307A_build.bat DCLN
生成的固件在out文件夹下,可以检查一下日期是不是最新的:
接下来下载生成的固件进行测试,提前安装下载软件:
烧录固件:
注意下载前需要先将模块BOOT接地进入下载模式,然后连接电脑下载固件:
注意:部分情况会出现这个进度条加载满后断开的情况,这种情况固件仍可成功下载,我们只需要关注进度条是否加载满。
接下来将BOOT引脚置高点平,进入运行模式,复位,打开中移物联网串口助手查看是否能够接收: