当在Dev Pro板上使用Smart Snippets“ble_peripheral”项目和“QSPI”部署方法时,程序被存储在哪里?
它是存储在占用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_qspi.h头文件。
谢谢,PM_Dialog
.你好,
谢谢你的帮助!
使用示例项目ble_peripheral,我增加了堆大小如下:#define configTOTAL_HEAP_SIZE 40000 /*这是FreeRTOS的总堆大小*/
#define configTOTAL_HEAP_SIZE 40000 /*这是FreeRTOS的总堆大小*/
当构建时,我得到了这个错误:
建设目标:ble_peripheral.elf调用:交叉ARM C连接器c: / diasemi / smartsnippetsstudio / gcc / 4 _9 - 2015 q1 / bin / . . / lib / gcc / arm-none-eabi / 4.9.3 /../../../../ arm-none-eabi / bin / ld.exe: ble_peripheral。elf section ' RETENTION_RAM0'不适合区域' RetRAM0'c:/diasemi/ smartsnippetstudio /gcc/4_9-2015q1/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exeCollect2.exe:错误:ld返回1退出状态: * * * (ble_peripheral。精灵]错误1
将堆大小降低到20512允许程序编译,但是没有给mbedTLS留下足够的内存来执行基本的'crypto_asymmetric_key_pair_gen'操作。
.嗯,这可能不再是内存问题了。它正在一个新的地方崩溃:Hw_watchdog_handle_int () at hw_watchdog_c:111 0x7fc4286 . txt (NMI_HandlerC() at hw_watchdog.c:143在0 xfffffff9 ()Mbedtls_mpi_add_abs () at bignum.c:889 0x80011a8Ecp_mod_koblitz () at ecp_curves.c:1,271 0x8003030Ecp_mod_p256k1 () at ecp_curves.c:1 322 0x800304e . (Ecp_modp () at ecp.c:678 0x8001cc4Ecp_add_mixed () at ecp.c: 1048 0x800272e . (Ecp_mul_comb_core () at ecp.c:1,297 0x8002be6 . Ecp_mul_comb_core () at ecp.c:1,297 0x8002be6 . Ecp_mul_comb_core (Ecp_mul_comb () at ecp.c: 400 0x8002be6Mbedtls_ecp_mul () at ecp.c: 1632 0x8002e72Mbedtls_ecp_gen_keypair_base () at ecp.c: 1892 0x8002efcMbedtls_ecp_gen_keypair () at ecp.c: 1903 0x8002f24Mbedtls_ecp_gen_key () at ecp.cbo_crypto_key_pair_gen () at bo_crypto_c:320 0x800e8d2Main () at Main .c:129 0x800e9fa
Hw_watchdog_handle_int () at hw_watchdog_c:111 0x7fc4286 . txt (NMI_HandlerC() at hw_watchdog.c:143在0 xfffffff9 ()Mbedtls_mpi_add_abs () at bignum.c:889 0x80011a8Ecp_mod_koblitz () at ecp_curves.c:1,271 0x8003030Ecp_mod_p256k1 () at ecp_curves.c:1 322 0x800304e . (Ecp_modp () at ecp.c:678 0x8001cc4Ecp_add_mixed () at ecp.c: 1048 0x800272e . (Ecp_mul_comb_core () at ecp.c:1,297 0x8002be6 . Ecp_mul_comb_core () at ecp.c:1,297 0x8002be6 . Ecp_mul_comb_core (Ecp_mul_comb () at ecp.c: 400 0x8002be6Mbedtls_ecp_mul () at ecp.c: 1632 0x8002e72Mbedtls_ecp_gen_keypair_base () at ecp.c: 1892 0x8002efcMbedtls_ecp_gen_keypair () at ecp.c: 1903 0x8002f24Mbedtls_ecp_gen_key () at ecp.cbo_crypto_key_pair_gen () at bo_crypto_c:320 0x800e8d2Main () at Main .c:129 0x800e9fa
这个回溯是什么意思?
编辑:我想我弄明白了。我已经修改了configTOTAL_HEAP_SIZE和__HEAP_SIZE。我相信malloc返回无效内存导致崩溃。#define configTOTAL_HEAP_SIZE 20512 /*这是FreeRTOS总堆大小*/#定义__HEAP_SIZE 8000我猜我不应该修改__HEAP_SIZE。使用mbedTLS增加可用内存的正确方法是什么?
#define configTOTAL_HEAP_SIZE 20512 /*这是FreeRTOS总堆大小*/#定义__HEAP_SIZE 8000
对不起,我对你的描述有点困惑。您能否澄清一下,您是否通过改变总堆大小解决了问题?
谢谢,PM_DIalog
不,问题还是一样的。当将加密例程添加到ble_peripheral示例程序并使用configTOTAL_HEAP_SIZE宏将其设置为20,000时,该程序仍然在加密库中暂停,这意味着它的内存不足。
请帮助。我如何用BLE堆栈和加密例程做一个项目?
您应该将RAM的大小最小化到您可以编译和项目的最小允许大小,并将堆大小最大化到最大大小,例如70000,以便增加分配的内存。因此,您应该增加堆大小并减少RAM大小。此外,您必须使用OS_FREE)_和OS_MALLOC()执行任务。请试试,然后告诉我。
我能够通过关闭dg_configUSE_WDOG并擦除所有看门狗的使用来让ble_peripheral示例程序与crypto一起工作。
这个看门狗的用途是什么?为什么它会被启用来打破加密程序?
看门狗机制是一种特殊的硬件计时器,可用于在软件执行期间自动检测意外的系统行为。DA1468x系列设备包含一个由10.24 ms时钟脉冲驱动的8位下位计数器,最大超时时间为2.6秒。要获得关于DA1468x系列设备中实现的watchdog (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_qspi.h头文件。
谢谢,PM_Dialog
.
你好,
谢谢你的帮助!
使用示例项目ble_peripheral,我增加了堆大小如下:
#define configTOTAL_HEAP_SIZE 40000 /*这是FreeRTOS的总堆大小*/
当构建时,我得到了这个错误:
将堆大小降低到20512允许程序编译,但是没有给mbedTLS留下足够的内存来执行基本的'crypto_asymmetric_key_pair_gen'操作。
.
嗯,这可能不再是内存问题了。它正在一个新的地方崩溃:
Hw_watchdog_handle_int () at hw_watchdog_c:111 0x7fc4286 . txt (
NMI_HandlerC() at hw_watchdog.c:143
在0 xfffffff9 ()
Mbedtls_mpi_add_abs () at bignum.c:889 0x80011a8
Ecp_mod_koblitz () at ecp_curves.c:1,271 0x8003030
Ecp_mod_p256k1 () at ecp_curves.c:1 322 0x800304e . (
Ecp_modp () at ecp.c:678 0x8001cc4
Ecp_add_mixed () at ecp.c: 1048 0x800272e . (
Ecp_mul_comb_core () at ecp.c:1,297 0x8002be6 . Ecp_mul_comb_core () at ecp.c:1,297 0x8002be6 . Ecp_mul_comb_core (
Ecp_mul_comb () at ecp.c: 400 0x8002be6
Mbedtls_ecp_mul () at ecp.c: 1632 0x8002e72
Mbedtls_ecp_gen_keypair_base () at ecp.c: 1892 0x8002efc
Mbedtls_ecp_gen_keypair () at ecp.c: 1903 0x8002f24
Mbedtls_ecp_gen_key () at ecp.c
bo_crypto_key_pair_gen () at bo_crypto_c:320 0x800e8d2
Main () at Main .c:129 0x800e9fa
这个回溯是什么意思?
编辑:我想我弄明白了。我已经修改了configTOTAL_HEAP_SIZE和__HEAP_SIZE。我相信malloc返回无效内存导致崩溃。
#define configTOTAL_HEAP_SIZE 20512 /*这是FreeRTOS总堆大小*/
#定义__HEAP_SIZE 8000
我猜我不应该修改__HEAP_SIZE。使用mbedTLS增加可用内存的正确方法是什么?
嗨ddustin,
对不起,我对你的描述有点困惑。您能否澄清一下,您是否通过改变总堆大小解决了问题?
谢谢,PM_DIalog
不,问题还是一样的。当将加密例程添加到ble_peripheral示例程序并使用configTOTAL_HEAP_SIZE宏将其设置为20,000时,该程序仍然在加密库中暂停,这意味着它的内存不足。
请帮助。我如何用BLE堆栈和加密例程做一个项目?
嗨ddustin,
您应该将RAM的大小最小化到您可以编译和项目的最小允许大小,并将堆大小最大化到最大大小,例如70000,以便增加分配的内存。因此,您应该增加堆大小并减少RAM大小。此外,您必须使用OS_FREE)_和OS_MALLOC()执行任务。请试试,然后告诉我。
谢谢,PM_Dialog
我能够通过关闭dg_configUSE_WDOG并擦除所有看门狗的使用来让ble_peripheral示例程序与crypto一起工作。
这个看门狗的用途是什么?为什么它会被启用来打破加密程序?
嗨ddustin,
看门狗机制是一种特殊的硬件计时器,可用于在软件执行期间自动检测意外的系统行为。DA1468x系列设备包含一个由10.24 ms时钟脉冲驱动的8位下位计数器,最大超时时间为2.6秒。要获得关于DA1468x系列设备中实现的watchdog (WDOG)机制的更多信息,我强烈建议您阅读本节5重启分析- WDOG的调试技术教程(HTML)教程来自我们的支持页面。请注意,您可以在我们门户的DA14680选项卡中找到非常有用的文档。另外,强烈建议查看DA14680数据表部分30看门狗定时器.所以,为什么你的代码在使用加密例程时堆栈,是一些东西已经采取了很长,超过看门狗超时。当您正在使用异步事件而又不知道何时将接收到它们时,最佳实践是冻结WDOG直到您获得事件。既然你得到了它,你应该再次激活并重新加载它。通常,WDOG用于同步事件。WDOG是一个计数器,它计数倒转和固件应该在正常的时间周期和超时之前重新加载它。如果你发现上面的任何一个答案有用,请标记其中一个为接受。
谢谢,PM_Dialog
谢谢你的帮助!