跳过主要内容

在SDK6 platform_reset_func

DA14585

1个月前

在SDK6 platform_reset_func

发布的GreenTea140点 3回复
0的问题

你好

下面的代码生成了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个月前

PM_Dialog

嗨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

1个月前

GreenTea 140点

你好

谢谢您的回复。

我看到platform_reset()函数是如何调用的。

向UART打印消息的stop_timer()函数在尝试打印一行时不会调用平台重置。

尝试在peripheral_init()函数中用许多打印消息调用start_timer()函数和stop_timer()函数,在调用了两个start_timer()、stop_timer()函数之后,调用了平台重置函数。(在我的串行通信终端上没有显示任何消息,这意味着它在连接事件到达之前就耗尽了内存)

谢谢你的推荐。

我尝试在user_*函数中使用start_timer()函数和stop_timer()函数,只打印所需的消息,它不需要调用平台重置函数就可以工作。

谢谢你的指导。

1个月前

PM_Dialog

嗨GreenTea,

很高兴你解决了这个问题,谢谢你接受我的答案。如果您有任何其他问题,请提出新的论坛门票。

谢谢,PM_Dialog