本文章是基于BES2700 芯片,其他BESxxx 芯片可做参考,如有不当之处,欢迎评论区留言指出。
BES 平台 SDK之代码架构讲解一_谢文浩的博客-CSDN博客
上篇文章粗略的对整个SDK 目录下的文件进行了说明,接下来会对SDK 比较详细的介绍。
一. 关于Target.mk 脚本
CHIP ?= best1306 :编译的目标平台,在编译指令里面对应 make T=best1306
DEBUG ?= 1: 开启调试模式
export LIBC_OVERPRIDE ?= 1: 定义宏并赋值为1,等同于#define LIBC_OVERPRIDE 1
export LIBC_OVERPRIDE ?= 0: 删除宏定义,等同于 #undef LIBC_OVERPRIDE
ifeq ($(BT_FA_ECC),1) : 条件编译,判断BT_FA_ECC 是否为1
KBUILD_CPPFLAGS += -DGET_PEER_RSSI_ENABLE :定义宏GET_PEER_RSSI_ENABLE
$(error 此处可自定义提示的错误信息): 编译报错提示!
其他的类似这个道理,在此补充一句,调试打印的波特率也是在这个脚本里面设置的。设置如下:
export TRACE_BAUD_RATE ?= 10*115200
当时也是费了一点时间才找到这里。
二. 关于Common.mk 脚本
BES平台宏开启与关闭,通用配置脚本。
三.关于Makefile
1.项目开发过程避免不了需要新建文件,那么如何将新增文件加入到当前工程并编译的呢,详细可参考下面文章。
BES代码编译和链接说明_小小的代码里面挖呀挖呀挖的博客-CSDN博客
四. main 函数
1. main 函数位于目录platform/main 下的main.cpp 文件。如下所示:
int main(void) 函数本身也是一个线程,它是由Rtx.lib.c 文件创建的。(目录位于/Rtos/Rtx5/Rtx.lib.c),如下截图所示:
2.main 函数里面开启看门狗、硬件GPIO、定时器、app_init(应用层) 等,最后进入while(1)循环等待是否关机。等待是通过evt = osSignalWait(0x0, osWaitForever); 函数,永久等待,直到收到线程通知后才会跳出while 循环。
五. 自写编译脚本(build.sh)
1. 该脚本主要是用来方便调试用,避免反复上下翻找指令,可copy 下来直接使用。
#/bin/bash
#./build.sh 编译正常固件
#./build.sh test 编译测试固件
#./build.sh ota 编译带OTA 固件
#./build.sh xxx 提示非法输入参数
if [ x$1 == x ]
then
echo ">>>>>>>>build bin>>>>>>>>>>"
make T=best1306_ibrt -j40 DEBUG=1 OTA_CODE_OFFSET=0 FLASH_SIZE=0x400000 POWER_ON_ENTER_TWS_PAIRING_ENABLED=1 BLE_AUDIO_ENABLED=1 GFPS_ENABLE=1
elif [ $1 == "test" ]
then
echo ">>>>>>>>build test bin>>>>>>>>"
make T=prod_test/ota_copy CHIP=best1306 FLASH_SIZE=0x400000 BES_OTA=1 OTA_BIN_COMPRESSED=1 FLASH_REMAP=0
elif [ $1 == "ota" ]
then
echo ">>>>>>>>build OTA bin>>>>>>>>>>"
make T=best1306_ibrt -j40 DEBUG=1 OTA_CODE_OFFSET=0x10000 FLASH_SIZE=0x400000 POWER_ON_ENTER_TWS_PAIRING_ENABLED=1 BLE_AUDIO_ENABLED=1 GFPS_ENABLE=1 OTA_BIN_COMPRESSED=1
else
echo ">>>>>>> invalid parameter"
fi