嗨,团队,
我们正在尝试构建code - less5xx项目在code - less SDK使用CMake。我们包括必要的文件和代码得到编译,但有一个错误,而链接“内存区域LR_FREE的无效长度”。如何解决这个问题
我认为你看到这个是因为免费的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
你好,
似乎我们需要定义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项目。但是,我们不能构建无代码项目。
我构建了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限制作斗争。
由于Keil不链接超过32KB的文件,我们使用CMake创建一个makefile,并使用“gcc-arm-none-eabi-9-2020-q2-update”工具链来构建我们的项目。我们可以建立这个项目。我们还需要“USE_AT_ADVDATA”为我们的项目。你还没有在上面的项目中使用。在你的文档中,你提到为了使用ADVDATA,我们需要删除其他AT命令。我们只需要基本和ADVDATA命令。那么,我们可以删除哪些命令而不影响功能呢?
有很多东西可供选择。下面是一个例子:
#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
我认为你看到这个是因为免费的Keil IDE/Compiler的32kByte代码限制。CodeLess不会低于该阈值进行链接。
尝试删除对一些CodeLess命令的支持,如下所示(user_at_commands.h前面的第44行):
看看项目是否正确链接。
/ MHv
你好,
似乎我们需要定义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项目。但是,我们不能构建无代码项目。
我构建了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