当使用智能片段“ble_peripheral”项目和“QSPI”部署方法在Dev Pro板上,哪里是程序被存储?
它是否存储在RAM中,占用110kb的RAM(仅落户运行的15kb)或者它存储在其他地方?
我如何减少使用的RAM的大小,使mbedTLS有足够的RAM运行?
嗨Ddustin,
当按program_qspi_serial_win或program_qspi_jtag_win时,应用程序代码将存储到QSPI Flash中,而不是存储到RAM中。由于代码不是在RAM中下载的,如果您希望有足够的RAM用于mbedTLS,您应该增加可用RAM的可用区域。因此,我强烈建议您通过配置configTOTAL_HEAP_SIZE自定义custom_config_qspii .h头文件中的宏。
谢谢,PM_Dialog
.你好,
谢谢你的帮助!
使用示例项目ble_peripheral,我增加堆大小如下:#define configtotal_heap_size 40000 / *这是freertos total堆大小* /
#define configtotal_heap_size 40000 / *这是freertos total堆大小* /
当构建我得到这个错误:
建筑目标:ble_peripheral.ell调用:交叉ARM C链接器C:/ Diasemi / SmartsnippetsStudio / GCC / 4_9-2015Q1 / Bin /../ Lib / GCC / ARM-None-EABI / 4.9.3 /../../../../ ARM-None-EABI /bin / ld.exe:ble_peripheral.elf部分`Retention_ram0'不适合区域`retram0'c:/diasemi/smartsnippetsstudio/gcc/4_9-2015q1/bin/../lib/gcc/arm-none-eabi/4.9.3/../../ arm-none-eabi/bin/ ld_safe .exe: region ' RetRAM0' overflow by 19488 bytescollect2.exe:错误:LD返回1个退出状态: * * * (ble_peripheral。精灵]错误1
将堆大小降低到20512允许程序进行编译,但是不能为mbedTLS留下足够的内存来执行基本的“crypto_asymmetric_key_pair_gen”操作。
.嗯,这可能不再是内存问题了。它正在一个新的地方崩溃:hw_watchdog_handle_int()在hw_watchdog.c:111 0x7fc4286nmi_handlerc()在hw_watchdog.c:143 0x7fc42f2()在0xffffff9Mbedtls_mpi_add_abs () at bignum.c:889 0x80011a8Ecp_mod_koblitz () at ecp_curves.c: 1271 0x8003030Ecp_mod_p256k1 () at ecp_curves.c: 1322 0x800304eECP_MODP()在ECP.C:678 0x8001cc4Ecp_add_mixed () at ecp.c: 1048 0x800272eECP.C中的ECP_MUL_COMB_CORE():1,297 0x8002BE6Ecp_mul_comb () at ecp.c: 1400 0x8002be6Mbedtls_ecp_mul () at ecp.c: 1632 0x8002e72Mbedtls_ecp_gen_keypair_base () at ecp.c: 1892 0x8002efcMBEDTLS_ECP_GEN_KEYPAIR()在ECP.C:1,903 0x8002F24Mbedtls_ecp_gen_key () at ecp.c:1,917 0x8002f4ecrypto_asymmetric_key_pair_gen()在bo_crypto.c:320 0x800e8d2main()在main.c:129 0x800E9FA
hw_watchdog_handle_int()在hw_watchdog.c:111 0x7fc4286nmi_handlerc()在hw_watchdog.c:143 0x7fc42f2()在0xffffff9Mbedtls_mpi_add_abs () at bignum.c:889 0x80011a8Ecp_mod_koblitz () at ecp_curves.c: 1271 0x8003030Ecp_mod_p256k1 () at ecp_curves.c: 1322 0x800304eECP_MODP()在ECP.C:678 0x8001cc4Ecp_add_mixed () at ecp.c: 1048 0x800272eECP.C中的ECP_MUL_COMB_CORE():1,297 0x8002BE6Ecp_mul_comb () at ecp.c: 1400 0x8002be6Mbedtls_ecp_mul () at ecp.c: 1632 0x8002e72Mbedtls_ecp_gen_keypair_base () at ecp.c: 1892 0x8002efcMBEDTLS_ECP_GEN_KEYPAIR()在ECP.C:1,903 0x8002F24Mbedtls_ecp_gen_key () at ecp.c:1,917 0x8002f4ecrypto_asymmetric_key_pair_gen()在bo_crypto.c:320 0x800e8d2main()在main.c:129 0x800E9FA
这个回溯是什么意思?
编辑:我相信我弄明白了。我已经修改了configTOTAL_HEAP_SIZE和__HEAP_SIZE。我相信malloc返回无效内存导致崩溃。#define configTOTAL_HEAP_SIZE 20512 /*这是FreeRTOS总堆大小*/#define __heap_size 8000.我猜我不应该修改__HEAP_SIZE。增加可用内存以使用mbedTLS的正确方法是什么?
#define configTOTAL_HEAP_SIZE 20512 /*这是FreeRTOS总堆大小*/#define __heap_size 8000.
对不起,你的描述让我有点困惑。你能澄清一下,你是否解决了改变堆大小的问题?
谢谢,PM_DIalog
没有问题仍然是一样的。在将Crypto例程添加到BLE_Peripheral示例程序并使用ConfigtotAl_heap_size宏将其设置为20,000时,该程序仍然以暗示它不足的方式查找Crypto库中的内部。
请帮助。我如何使一个项目与BLE堆栈和加密例程?
您应该将RAM的大小最小化到您可以编译项目的最小允许大小,并最大化堆大小为最大大小,例如70000,以增加分配的内存。因此,您应该增加堆大小并降低RAM大小。此外,您必须使用OS_FREE)_和OS_MALLOC()进行任务。请尝试一下,让我知道。
通过关闭dg_configUSE_WDOG并删除看门狗的所有用法,我能够获得使用crypto的ble_peripheral示例程序。
这个看门狗是用来干什么的,为什么要启用它来破解加密程序?
看门狗机制是一种特殊的硬件计时器,可用于自动检测软件执行过程中意外的系统行为。DA1468x系列设备集成了一个由10.24 ms时钟脉冲驱动的8位下降计数器,导致最大2.6秒超时。为了获得关于DA1468x系列设备中实现的看门狗(WDOG)机制的更多信息,我强烈建议您阅读这一节5重启分析- WDOG的调试技术教程(HTML)我们支持页面的教程。请注意,您可以在我们门户网站的DA14680选项卡中找到非常有用的文档。此外,强烈建议看看DA14680数据表,部分30看门狗定时器.所以,你的代码在使用加密例程时获得堆栈的原因,是某些东西被占用了很长时间,超过了看门狗超时。当您使用异步事件而不知道何时将接收它们时,最佳实践是冻结WDOG,直到获得该事件。既然你得到了它,你应该激活并重新加载它。通常,WDOG用于同步事件。WDOG是一个反向计数的计数器,固件应该在正常的时间段内,在超时之前重新加载它。如果您认为以上答案有用,请将其中一个标记为已接受。
谢谢您的帮助!
嗨Ddustin,
当按program_qspi_serial_win或program_qspi_jtag_win时,应用程序代码将存储到QSPI Flash中,而不是存储到RAM中。由于代码不是在RAM中下载的,如果您希望有足够的RAM用于mbedTLS,您应该增加可用RAM的可用区域。因此,我强烈建议您通过配置configTOTAL_HEAP_SIZE自定义custom_config_qspii .h头文件中的宏。
谢谢,PM_Dialog
.
你好,
谢谢你的帮助!
使用示例项目ble_peripheral,我增加堆大小如下:
#define configtotal_heap_size 40000 / *这是freertos total堆大小* /
当构建我得到这个错误:
将堆大小降低到20512允许程序进行编译,但是不能为mbedTLS留下足够的内存来执行基本的“crypto_asymmetric_key_pair_gen”操作。
.
嗯,这可能不再是内存问题了。它正在一个新的地方崩溃:
hw_watchdog_handle_int()在hw_watchdog.c:111 0x7fc4286
nmi_handlerc()在hw_watchdog.c:143 0x7fc42f2
()在0xffffff9
Mbedtls_mpi_add_abs () at bignum.c:889 0x80011a8
Ecp_mod_koblitz () at ecp_curves.c: 1271 0x8003030
Ecp_mod_p256k1 () at ecp_curves.c: 1322 0x800304e
ECP_MODP()在ECP.C:678 0x8001cc4
Ecp_add_mixed () at ecp.c: 1048 0x800272e
ECP.C中的ECP_MUL_COMB_CORE():1,297 0x8002BE6
Ecp_mul_comb () at ecp.c: 1400 0x8002be6
Mbedtls_ecp_mul () at ecp.c: 1632 0x8002e72
Mbedtls_ecp_gen_keypair_base () at ecp.c: 1892 0x8002efc
MBEDTLS_ECP_GEN_KEYPAIR()在ECP.C:1,903 0x8002F24
Mbedtls_ecp_gen_key () at ecp.c:1,917 0x8002f4e
crypto_asymmetric_key_pair_gen()在bo_crypto.c:320 0x800e8d2
main()在main.c:129 0x800E9FA
这个回溯是什么意思?
编辑:我相信我弄明白了。我已经修改了configTOTAL_HEAP_SIZE和__HEAP_SIZE。我相信malloc返回无效内存导致崩溃。
#define configTOTAL_HEAP_SIZE 20512 /*这是FreeRTOS总堆大小*/
#define __heap_size 8000.
我猜我不应该修改__HEAP_SIZE。增加可用内存以使用mbedTLS的正确方法是什么?
嗨Ddustin,
对不起,你的描述让我有点困惑。你能澄清一下,你是否解决了改变堆大小的问题?
谢谢,PM_DIalog
没有问题仍然是一样的。在将Crypto例程添加到BLE_Peripheral示例程序并使用ConfigtotAl_heap_size宏将其设置为20,000时,该程序仍然以暗示它不足的方式查找Crypto库中的内部。
请帮助。我如何使一个项目与BLE堆栈和加密例程?
嗨Ddustin,
您应该将RAM的大小最小化到您可以编译项目的最小允许大小,并最大化堆大小为最大大小,例如70000,以增加分配的内存。因此,您应该增加堆大小并降低RAM大小。此外,您必须使用OS_FREE)_和OS_MALLOC()进行任务。请尝试一下,让我知道。
谢谢,PM_Dialog
通过关闭dg_configUSE_WDOG并删除看门狗的所有用法,我能够获得使用crypto的ble_peripheral示例程序。
这个看门狗是用来干什么的,为什么要启用它来破解加密程序?
嗨Ddustin,
看门狗机制是一种特殊的硬件计时器,可用于自动检测软件执行过程中意外的系统行为。DA1468x系列设备集成了一个由10.24 ms时钟脉冲驱动的8位下降计数器,导致最大2.6秒超时。为了获得关于DA1468x系列设备中实现的看门狗(WDOG)机制的更多信息,我强烈建议您阅读这一节5重启分析- WDOG的调试技术教程(HTML)我们支持页面的教程。请注意,您可以在我们门户网站的DA14680选项卡中找到非常有用的文档。此外,强烈建议看看DA14680数据表,部分30看门狗定时器.所以,你的代码在使用加密例程时获得堆栈的原因,是某些东西被占用了很长时间,超过了看门狗超时。当您使用异步事件而不知道何时将接收它们时,最佳实践是冻结WDOG,直到获得该事件。既然你得到了它,你应该激活并重新加载它。通常,WDOG用于同步事件。WDOG是一个反向计数的计数器,固件应该在正常的时间段内,在超时之前重新加载它。如果您认为以上答案有用,请将其中一个标记为已接受。
谢谢,PM_Dialog
谢谢您的帮助!