嗨,团队,
我们正在尝试使用CMake在无代码SDK中构建codeless5xx项目。我们包含了必要的文件和代码,但在链接“内存区域LR_FREE的长度无效”时出现了错误。我该如何解决这个问题
我认为你看到这是由于免费Keil IDE/Compiler的32kByte代码限制。在这个阈值之下,无代码不会链接。
尝试删除对一些无代码命令的支持,如下所示(user_at_commands.h的第44行开始):
//#if define (USE_AT_BINARY_MODE)&&define (__DA14531__) #if define (__DA14531__) #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_CENTRAL //#define USE_AT_GAPSCAN //#define USE_AT_SLEEP # //#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
你好,
似乎我们需要定义USE_AT_CONPAR,因为当我注释掉它时,在user_at_commanddc中的“user_at_maxmtu”函数中有一个错误,因为它有“conn_conf”这个依赖于USE_AT_CONPAR的参数。当我取消注释“USE_AT_CONPAR”时,出现了内存区域LR_FREE错误的长度。我们知道在Keil中有32KB的限制,所以我们使用CMake工具来构建我们的项目。我们可以从通用的“6.0.14.1114”SDK中构建prox_reporter项目。但是,我们不能构建无代码项目。
我构建了CodeLess的数据泵变体,并假设您正在构建独立的变体,当省略USE_AT_CONPAR时,它会导致错误。尝试用以下配置构建独立的:
//#define USE_AT_BINARY_MODE &&define (__DA14531__) #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_CENTRAL //#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
您使用的底层工具链是什么?我仍然怀疑您正在与32kByte限制作斗争。
因为Keil不会链接超过32KB的文件,所以我们使用CMake来创建一个makefile,并使用“gcc-arm-none-eabi-9-2020-q2-update”工具链来构建我们的项目。这样我们就能建造这个项目了。我们的项目也需要“USE_AT_ADVDATA”。您在上面的项目中没有使用。在你的文档中,你提到为了使用ADVDATA,我们需要删除其他AT命令。我们只需要基本的和ADVDATA命令。那么,我们可以删除哪些命令而不影响功能呢?
有很多东西可供选择。下面是一个例子:
//#define USE_AT_BINARY_MODE &&define (__DA14531__) #if define (__DA14531__) #define USE_AT_BDADDR #define USE_AT_IO #define USE_AT_GAPSTATUS #define USE_AT_ADVDATA #define USE_AT_ADVRESP #define USE_AT_ADVSTOP #define USE_AT_ADVSTART //#define USE_AT_CENTRAL //#define USE_AT_GAPSCAN //#define USE_AT_GAPCONNECT #define USE_AT_SLEEP #defineUSE_AT_PIN //#define USE_AT_FLOWCONTROL #define USE_AT_CONPAR //#define USE_AT_BND //#define USE_AT_SEC #if !define (USE_AT_BINARY_MODE) #if !define (USE_SET_TWO) #define USE_AT_PRINT //#define USE_AT_HNDL //#define USE_AT_EVENT //#define use_at_broadcast //#define USE_AT_RANDOM //#define USE_AT_MAXMTU //#define USE_AT_PWM #ifCMD_LOCAL_SOURCE==CMD_UART #define USE_AT_BAUD #endif #elif define (USE_SET_TWO) #if (CMD_LOCAL_SOURCE//#define USE_AT_RSSI //#define USE_AT_HRTBT #define USE_AT_CMD #endif //!USE_AT_BINARY_MODE
我认为你看到这是由于免费Keil IDE/Compiler的32kByte代码限制。在这个阈值之下,无代码不会链接。
尝试删除对一些无代码命令的支持,如下所示(user_at_commands.h的第44行开始):
并查看项目链接是否正确。
/ MHv
你好,
似乎我们需要定义USE_AT_CONPAR,因为当我注释掉它时,在user_at_commanddc中的“user_at_maxmtu”函数中有一个错误,因为它有“conn_conf”这个依赖于USE_AT_CONPAR的参数。当我取消注释“USE_AT_CONPAR”时,出现了内存区域LR_FREE错误的长度。我们知道在Keil中有32KB的限制,所以我们使用CMake工具来构建我们的项目。我们可以从通用的“6.0.14.1114”SDK中构建prox_reporter项目。但是,我们不能构建无代码项目。
我构建了CodeLess的数据泵变体,并假设您正在构建独立的变体,当省略USE_AT_CONPAR时,它会导致错误。尝试用以下配置构建独立的:
您使用的底层工具链是什么?我仍然怀疑您正在与32kByte限制作斗争。
/ MHv
你好,
因为Keil不会链接超过32KB的文件,所以我们使用CMake来创建一个makefile,并使用“gcc-arm-none-eabi-9-2020-q2-update”工具链来构建我们的项目。这样我们就能建造这个项目了。我们的项目也需要“USE_AT_ADVDATA”。您在上面的项目中没有使用。在你的文档中,你提到为了使用ADVDATA,我们需要删除其他AT命令。我们只需要基本的和ADVDATA命令。那么,我们可以删除哪些命令而不影响功能呢?
有很多东西可供选择。下面是一个例子:
/ MHv