This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DK-TM4C129X:本地时间不能从时钟 SWI (或空闲任务)内工作

Guru**** 2478485 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/688808/dk-tm4c129x-localtime-does-not-work-from-within-clock-swi-or-idle-task

器件型号:DK-TM4C129X

您好!

我正在尝试在我的开发套件屏幕上显示本地时间。

我从 ti/sysbios/hal/sonds 的手册页之一获得了以下代码

   

#include 
#include 

//... time_t; struct TM *LTM; char *curTime; t = time (NULL); LTM = localtime (&t); curTime = asctime (LTM); System_printf ("time (GMT):%s\n"、curTime); System_flush ();

它的工作方式符合我的预期、并将时间放在控制台中。

但是、如果我尝试在时钟函数或空闲回调中调用与上述完全相同的代码、我会得到

未处理的 ADP_Stopped 异常0x20023

在单步执行 localtime 函数调用时。 我已经尝试步入、没有文件。 但是、其中包括在有用的情况下进行的反汇编。

localtime():
0000dd5c:B510 按 {R4、LR}
0000dd5e:4604 MOV R4、r0
57.
0000dd60:F7F6F9B8 BL #0x40d4
0000dd64:F100017C 添加 R1、r0、#0x7c
0000dd68:4620 MOV R0、R4
58 _REENT_CHECK_TM (REENT);
0000dd6a:E8BD4010 弹出 {R4、LR}
57
0000dd6e:F000B801 b.w localtime_r
0000dd72:BF00 NOP
17. 返回_mktm_r (TIM_p、res、0); 

`、它尤其在第一个` BL 上消失。

我已经尝试深入探讨了这一点、它正在消亡

assert_isTrue (((BIOS_getThreadType ()!= BIOS_ThreadType_Hwi)&&
(BIOS_getThreadType ()!= BIOS_ThreadType_Swi))、
ReentSupport_a_badThreadType); 

但我无法想象为什么 localtime 会在这里引起问题。

有什么建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 David:

    localtime 是 GCC C 运行时(libc)中定义的函数、需要每个线程的可重入性结构。 SYS/BIOS 在 libc 首次需要时分配此可重入结构。 由于需要可重入结构的 libc API 可能会导致动态内存分配(malloc)、因此不允许从中断(Hwi)或 Swi 上下文中调用它们。

    最棒的
    Ashish