在SDK6 platform_reset_func
DA14585
1个月前
在SDK6 platform_reset_func
发布的GreenTea140点 3回复你好
下面的代码生成了platform_reset_func()函数。
如何避免上述的重置函数调用?
我所做的就是调用arch_puts()。
我知道我不需要打印“计时器停止”很多次,但这样做使重置函数调用。
我想测量通过I2C从传感器设备读取少量数据和用ADC读取模拟输入的总时间。
user_peripheral_setup.c
空白start_timer(空白)
{
arch_puts(“计时器开始\ r \ n”);
/ / systick_start (100 0);
}
空白stop_timer(空白)
{
// uint32_t time = systick_value();
/ / systick_stop ();
arch_puts(“计时器停止\ r \ n”);
arch_puts(“计时器停止\ r \ n”);
arch_puts(“计时器停止\ r \ n”);
arch_puts(“计时器停止\ r \ n”);
arch_puts(“计时器停止\ r \ n”);
arch_puts(“计时器停止\ r \ n”);
arch_puts(“计时器停止\ r \ n”);
arch_puts(“计时器停止\ r \ n”);
arch_puts(“计时器停止\ r \ n”);
//arch_printf("运行时间= 0x%x\r\n\r\n",时间);
//arch_printf("systick value = 0x%x\r\n", systick_value());
}
空白periph_init(空白)
{
:
:
start_timer ();
stop_timer ();
start_timer ();
stop_timer ();
start_timer ();
stop_timer ();
start_timer ();
stop_timer ();
}
1个月前
你好
谢谢您的回复。
我看到platform_reset()函数是如何调用的。
向UART打印消息的stop_timer()函数在尝试打印一行时不会调用平台重置。
尝试在peripheral_init()函数中用许多打印消息调用start_timer()函数和stop_timer()函数,在调用了两个start_timer()、stop_timer()函数之后,调用了平台重置函数。(在我的串行通信终端上没有显示任何消息,这意味着它在连接事件到达之前就耗尽了内存)
谢谢你的推荐。
我尝试在user_*函数中使用start_timer()函数和stop_timer()函数,只打印所需的消息,它不需要调用平台重置函数就可以工作。
谢谢你的指导。
1个月前
嗨GreenTea,
谢谢你的在线问题。此断言意味着发生平台重置。Τhe platform_reset_func()由platform_reset()调用,它在ROM代码中实现。产生这种断言的最可能的原因是内存不足,因为您分配的消息永远不会被使用。例如,如果您正在分配通知消息,并且您有一个小的连接间隔,那么消息将被堆起来直到连接事件到达,但是如果连接间隔较大,则在连接事件到达之前就会耗尽内存。
关于所附的代码,UART上的消息可能永远不会被使用,这会造成某种内存泄漏。
最初,我建议不要打印peripher_init()函数—您可以将其写入应用程序级(所有以user_*开头的文件)。
此外,请尝试增加MSG堆大小-参阅本教程:http://lpccs-docs.dialog-semiconductor.com/Tutorial_SDK6/heap_usage.html
谢谢,PM_Dialog