使用cmake进行无代码编译

了解更多常见问题教程

6个职位/ 0个新职位
最后发表
阿伦Thirunavuk……
离线
最后看到:1天10小时前
加入:2020-06-22 13:06
使用cmake进行无代码编译

嗨,团队,

我们正在尝试构建code - less5xx项目在code - less SDK使用CMake。我们包括必要的文件和代码得到编译,但有一个错误,而链接“内存区域LR_FREE的无效长度”。如何解决这个问题

MHv_Dialog
离线
最后看到:4周3小时前
工作人员
加入:15 2013-12-06
我想你看到了

我认为你看到这个是因为免费的Keil IDE/Compiler的32kByte代码限制。CodeLess不会低于该阈值进行链接。

尝试删除对一些CodeLess命令的支持,如下所示(user_at_commands.h前面的第44行):

#define USE_AT_BDADDR #define USE_AT_IO #define USE_AT_GAPSTATUS #define nUSE_AT_ADVDATA #define nUSE_AT_ADVRESP #define USE_AT_ADVSTOP #define USE_AT_ADVSTART //#define USE_AT_GAPSCAN //#define USE_AT_GAPCONNECT //#define USE_AT_SLEEP#define USE_AT_PIN //#define USE_AT_FLOWCONTROL //#define USE_AT_CONPAR //#define USE_AT_BND //#define USE_AT_SEC

看看项目是否正确链接。

/ MHv

阿伦Thirunavuk……
离线
最后看到:1天10小时前
加入:2020-06-22 13:06
你好,

你好,

似乎我们需要定义USE_AT_CONPAR,因为当我注释掉它时,在user_at_commandc中的“user_at_maxmtu”函数中有一个错误,因为它有“conn_conf”这个取决于USE_AT_CONPAR的参数。当我取消注释“USE_AT_CONPAR”,这个无效长度的内存区域LR_FREE错误发生。我们知道在Keil中有32KB的限制,所以我们使用CMake工具来构建我们的项目。我们可以从一般的“6.0.14.1114”SDK构建prox_reporter项目。但是,我们不能构建无代码项目。

MHv_Dialog
离线
最后看到:4周3小时前
工作人员
加入:15 2013-12-06
我建立了数据泵的变种

我构建了CodeLess的数据泵变体,并假设您正在构建独立变体,当省略USE_AT_CONPAR时将导致错误。试着用以下配置构建独立的:

#define USE_AT_BDADDR #define USE_AT_IO #define USE_AT_GAPSTATUS #define nUSE_AT_ADVDATA #define use_at_advresp #define USE_AT_ADVSTOP #define USE_AT_ADVSTART //#define USE_AT_GAPSCAN //#define USE_AT_GAPCONNECT //#define USE_AT_SLEEP#define USE_AT_PIN // USE_AT_FLOWCONTROL #define USE_AT_CONPAR //定义USE_AT_BND // USE_AT_SEC

您使用的底层工具链是什么?我仍然怀疑您正在与32kByte限制作斗争。

/ MHv

阿伦Thirunavuk……
离线
最后看到:1天10小时前
加入:2020-06-22 13:06
你好,

你好,

由于Keil不链接超过32KB的文件,我们使用CMake创建一个makefile,并使用“gcc-arm-none-eabi-9-2020-q2-update”工具链来构建我们的项目。我们可以建立这个项目。我们还需要“USE_AT_ADVDATA”为我们的项目。你还没有在上面的项目中使用。在你的文档中,你提到为了使用ADVDATA,我们需要删除其他AT命令。我们只需要基本和ADVDATA命令。那么,我们可以删除哪些命令而不影响功能呢?

MHv_Dialog
离线
最后看到:4周3小时前
工作人员
加入:15 2013-12-06
有很多东西可供选择

有很多东西可供选择。下面是一个例子:

#define USE_AT_BDADDR #define USE_AT_IO #define USE_AT_GAPSTATUS #define USE_AT_ADVRESP #define USE_AT_ADVSTOP #define USE_AT_ADVSTART //#define USE_AT_GAPSCAN //#define USE_AT_GAPCONNECT #define USE_AT_SLEEP #define USE_AT_BDADDR #define USE_AT_IO #define USE_AT_GAPSTATUS #define USE_AT_ADVDATA #define USE_AT_ADVSTOP #define USE_AT_ADVSTART //#define USE_AT_GAPSCAN //#define USE_AT_GAPCONNECT #define USE_AT_SLEEP #defineUSE_AT_PIN定义USE_AT_FLOWCONTROL定义USE_AT_CONPAR定义USE_AT_BND定义USE_AT_SEC定义USE_AT_PRINT定义USE_AT_HNDL定义USE_AT_EVENT定义use_at_broadcast定义USE_AT_RANDOM定义USE_AT_MAXMTU定义USE_AT_PWMCMD_LOCAL_SOURCE==CMD_UART #define USE_AT_BAUD #endif #elif (USE_SET_TWO) #if (CMD_LOCAL_SOURCE = cmd_flash_enable) #define USE_AT_SPI #endif #endif //#define USE_AT_DLEEN //#define USE_AT_MEM //#define USE_AT_BATT //#define USE_AT_ADC //#define USE_AT_I2C //#define USE_AT_PWRLVL # //#define USE_AT_PWRLVL # //#define USE_AT_ADC //#define USE_AT_I2C //#define USE_AT_PWRLVL#define USE_AT_RSSI #define USE_AT_HRTBT #define USE_AT_CMD #endif // USE_SET_TWO #endif //USE_AT_BINARY_MODE

/ MHv