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.

[参考译文] SAFETI_DIAG_LIB:TMS570LC43x SAFETI 诊断

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1242577/safeti_diag_lib-tms570lc43x-safeti-diagnostic

器件型号:SAFETI_DIAG_LIB

大家好!  

我将使用具有 SAFeTI 诊断库并集成 RTOS 的 TMS570LC43 MCU。

我面临的一个问题是没有给 HIGHANDLER 内存分配。 并且"uint32 size=(Uint32)&ulHighHandlerSize;"的值 始终为0。 系统进入 SWRST 模式。

我在映射文件中看到它没有为".sl_stflash_SRAM"分配任何存储器。

我在下面共享链接器代码。


- -retain="*(.intvecs)"
--entry_point=_c_int00
/*------------------ */
/*内存映射*/

内存
{
/*这些配置设置对于所有基于 SAFERTOS 的
*应用程序。
*如果整个构建使用 ARM 模式、则向量长度可以为0x20。
*在使用 Thumb 模式时,需要0x80以适应交互工作
*代码。 */
VECTORS (X):origin=0x00000000 length=0x00000080 vfill = 0xffffffff
KERN_FUNC (RX):origin=0x00000080 length=0x0000ff80 vfill = 0xffffffff
FLASH0 (RX):origin=0x00010000 length=0x001F0000 vfill = 0xffffffff
FLASH1 (RX):origin=0x00200000 length=0x00200000 vfill = 0xffffffff
堆栈(RW):origin=0x08000000 length=0x00003800
KERN_DATA (RW):origin=0x08003800 length=0x00001800

RAM (RW):origin=0x08005000 length=0x00070000
high_handler (rwx):origin=0x8075000 length=0x000800
Profile (rw): origin=0x8075800 length=0x00006000                 //添加以进行分析
log (RW): origin=0x807B800 length=0x00003800 fill=0xDEADBEEF      //添加以进行记录
FEE (R):origin=0xF0200000 length=0x00000064 fill=0xDEADBEEF      //对于 FEE 测试,仅对样例应用程序有效


/*------------------ */
/*段配置*/

部分
{
/*这些配置设置对于所有基于 SAFERTOS 的
*应用程序。 */

/*需要导出以下符号:
*
* lnkKernelFuncStartAddr -运行时使用的闪存存储器部分的开始部分。
*
*重要说明: lnkKernelFuncStartAddr 可以重新定位(例如,当
*使用了 bootloader)、但必须根据其大小对齐它
*(四舍五入到下一个2的幂)、否则 MPU 将为
*配置不正确。
*
* lnkEndFlashAddress -运行时使用的 Flash 存储器段的末尾。
*
* lnkKernelFuncStartAddr -包含 ARM Cortex-M4内核的 Flash 块的起始地址、
*中断矢量表和内核函数。
*注意:这应该根据段大小对齐,即0x8000。
*
* lnkKernelFuncEndAddr -包含 ARM Cortex-M4内核的 Flash 块的结束地址、
*中断矢量表和内核函数。
*
* lnkKernelDataStartAddr -包含 ARM Cortex-M4内核的 RAM 块的起始地址、
*系统堆栈和内核数据。
*
* lnkKernelDataEndAddr -包含 XML 核心文件的 RAM 块的结束地址、
*系统堆栈和内核数据。
*/

/*在此演示应用中,内核函数部分位于
* Flash 存储器启动;如果应用程序被重定位,则不会出现这种情况。 */
.intvecs palign (32)、start (lnkStartFlashAddress)、start (lnkKernelFuncStartAddr)
fill =0xffffffff{}>向量
.sl_stflash_SRAM:run = high_handler、load = FLASH0|FLASH1、load_start (ulHighHandlerLoadStart)、load_end (ulHighHandlerLoadEnd)、
Load_Size (ulHighHandlerSize)、RUN_START (ulHighHandlerStartAddr)、RUN_END (ulHighHandlerEndAddr)


.kernel_function end( lnkKernelFuncEndAddr ):
{
*(内核函数)
}> KERN_FUNC

unpriv_flash palign (32),end( lnkEndFlashAddress ):
{
*(.text)
*(.const)
}> FLASH0 | FLASH1

.cinit align (32):{}> FLASH0 | FLASH1
.pinit align (32):{}> FLASH0 | FLASH1
stack_data start( lnkKernelDataStartAddr ):{}> stacks
kernel_data end( lnkKernelDataEndAddr ):{}> kern_data
.bss :{}> RAM
.data :{}> RAM
.sysmem:{}> RAM
.stack_data_Svc:{. += 1024;}>栈、RUN_START (StackModeSVC)
.stack_data_fiq:{。 += 1024;}>栈、RUN_START (StackModeFIQ)
.stack_data_IRQ:{。 += 1024;}>栈、RUN_START (StackModeIRQ)
.stack_data_abt:{. += 1024;}>栈、RUN_START (StackModeABT)
.stack_data_und:{。 += 1024;}>栈、RUN_START (StackModeUND)
.stack_data_sys:{。 += 1024;}>栈、RUN_START (StackModeSYS)

log_data : start( ulLOGStartAddr ), end( ulLOGEndAddr )> log
Profile_data : start( ulPROFILEStartAddr ), end( ulPROFILEEndAddr )>个人资料
/*这些配置设置适用于 SafeRTOS TMS570LC43x FPU 演示
*项目。 其中包含了这些示例、用于演示如何使用
*被分组到已知的位置,从而使 MPU 区域能够
*可以定义。 */

__idle_hook_data__
: start( lnkIdleTaskDataStartAddr )
{}> RAM palign ( 0x20)

下面是映射文件图像。

存储器配置

名称源长度已使用未使用属性填充
---------------- ---------------- ---------------- ---------------- ---------------- ----------------
向量00000000 00000080 00000020 00000060 X (ffffffff)
KERN_FUNC 00000080 0000ff80 0000864c 00007934 R X (ffffffff)
FLASH0 00010000 001f0000 00025090 001caf70 R X (ffffffff)
FLASH1 00200000 00200000 00200000 00000000 00200000 R X (ffffffff)
堆栈08000000 00001800 00001800 00000000 RW
KERN_DATA 08001800 00000800 00000504 000002fc RW
RAM 08004000 00019000 00005630 000139d0 RW
high_handler 08075000 00000800 00000000 00000800 RW X                <-未从 sl_stflash_sram 获取内存
配置文件08075800 00006000 00003e78 00002188 RW
Log 0807b800 00003800 00003800 00000000 RW 死牛肉
FEE f0200000 00000064 00000064 00000000 R DEADBE牛肉


分段分配映射

运行原点 load origin length init length attrs 成员
---------------- ---------------- ---------------- ---------------- -------- ----------------
00000000 00000000 00000020 00000020 r-x
00000000 00000000 00000020 00000020 r-x .intvecs
00000080 00000080 0000864c 0000864c r-x
00000080 00000080 0000864c 0000864c r-x .kernel_function
00010000 00010000 00025090 00025090 r-x
00010000 00010000 00025000 00025000 00025000 r-x .unpriv_flash
00035000 00035000 00000090 00000090 r--.cinit
08000000 08000000 00001800 00000000 r--
08000000 08000000 00000400 00000000 r--.stack_data_abt
08000400 08000400 00000400 00000000 r-.STACK_DATA_FIQ
08000800 08000800 00000400 00000000 r-.STACK_DATA_IRQ
08000c00 08000c00 00000400 00000000 r-.STACK_DATA_Svc
08001000 08001000 00000400 00000000 r-.STACK_DATA_sys
08001400 08001400 00000400 00000000 r-.stack_data_und
08001800 08001800 00000504 00000000 RW
08001800 08001800 00000504 00000000 rw- kernel_data
08004000 08004000 00005610 00000000 RW
08004000 08004000 000054e8 00000000 RW-.data
080094e8 080094e8 00000128 00000000 RW-.bss
08009620 08009620 00000020 00000000 RW-
08009620 08009620 00000020 00000000 RW -_IDLE_HOOK_DATA__
08075800 08075800 00003e78 00000000 RW-
08075800 08075800 00003e78 00000000 rw- PROFILE_DATA
0807b800 0807b800 00003800 00003800 r-
0807b800 0807b800 00003800 00003800 r--$fill000
f0200000 f0200000 00000064 00000064 r-
f0200000 f0200000 00000064 00000064 r-$fill001

您能告诉我为什么没有为 high_handler 或".sl_stflash_SRAM"获得内存分配?

因此、不执行以下代码部分、系统进入复位模式。

uint32 i;/*TODO*/
uint32 size=(uint32)&ulHighHandlerSize;/*待办事项*/
for (I=0;I)
{
((char *)&ulHighHandlerStartAddr)[i]=((char *)&ulHighHandlerLoadStart)[i];/* Todo*/

我们在 sl_selftest.c 中还有 pragma

#ifdef __TI_Compiler_version__
#pragma CODE_SECTION (sl_SelfTest_Flash、".sl_stflash_SRAM")
#endif

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

    尊敬的 Pankaj:

    我们已开始处理您的问题、并将尽快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    尊敬的 Pankaj:

    您正在使用哪个编译器及其版本号?  

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

    您好、Wang、

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

    好的、您使用 TI CCS + TI ARM 编译器:

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

    您好、Wang、

    我尝试根据您的指令更改编译器版本、但结果相同。

    没有将任何存储空间分配给 .sl_stflash_sram  

    谢谢  

    V·潘卡

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

    尊敬的 Pankaj:

    只有在 TMS570LC43x 和 RM57器件上运行自检时才需要.sl_stflash_SRAM。 您是否 在项目属性中定义了_tms570LC43x_?  

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

    您是否可以注释出#841和#843行以检查该部分是否在映射文件中生成:

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

    您好、Wang、

    我已经定义了宏、并尝试对您建议的行进行注释。

    但结果相同   

    没有将任何存储空间分配给 .sl_stflash_sram  

    谢谢  

    V·潘卡

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

    尊敬的  Pankaj:

    请试用: #pragma Retain (sl_SelfTest_Flash)

    retain 会向链接器指示 、即使未引用该段、也不会从条件链接输出中省略该段。

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

    您好、Wang、

    感谢您的支持。

    使用 #pragma Retain (sl_SelfTest_Flash)后、以下是内存分配、

    您能不能要求它没有问题吗?

    分段分配映射

    运行原点 load origin length init length attrs 成员
    ---------------- ---------------- ---------------- ---------------- -------- ----------------
    00000000 00000000 00000020 00000020 r-x
    00000000 00000000 00000020 00000020 r-x .intvecs
    00000080 00000080 0000864c 0000864c r-x
    00000080 00000080 0000864c 0000864c r-x .kernel_function
    00010560 00010560 000246a0 000246a0 r-x
    00010560 00010560 00024620 00024620 r-x .unpriv_flash
    00034b80 00034b80 00000080 00000080 r--.cinit
    08000000 08000000 00001800 00000000 r--
    08000000 08000000 00000400 00000000 r--.stack_data_abt
    08000400 08000400 00000400 00000000 r-.STACK_DATA_FIQ
    08000800 08000800 00000400 00000000 r-.STACK_DATA_IRQ
    08000c00 08000c00 00000400 00000000 r-.STACK_DATA_Svc
    08001000 08001000 00000400 00000000 r-.STACK_DATA_sys
    08001400 08001400 00000400 00000000 r-.stack_data_und
    08003800 08003800 00000504 00000000 RW -
    08003800 08003800 00000504 00000000 rw- kernel_DATA
    08005000 08005000 00005618 00000000 RW
    08005000 08005000 000054e4 00000000 RW-.data
    0800a4e4 0800a4e4 00000128 00000000 RW-.bss
    0800a60c 0800a60c 0000000c 00000000 rw-_idle_hook_data___
    08073000 00010000 0000055c 0000055c r-x
    08073000 00010000 0000055c 0000055c r-x .SL_stflash_SRAM         <----值是55C,但在演示代码中是370,还可以吗?
    0807b800 0807b800 00003800 00003800 r-
    0807b800 0807b800 00003800 00003800 r--$fill000
    f0200000 f0200000 00000064 00000064 r-
    f0200000 f0200000 00000064 00000064 r-$fill001

    段分配映射

    .sl_stflash_sram
    * 0 00010000 0000055c 运行 ADDR = 08073000
    00010000 00000534 sl_selftest.obj (.sl_stflash_SRAM:retain)
    00010534 00000008 SL_ASM_API.obj (.tramp._SL_GET_ARM_Mode.1)
    0001053c 00000008 sl_ESM.obj (.tramp.sl_ESM_nError_Active.1)
    00010544 00000008 sl_priv.obj (.tramp.sl_FLAG_set.1)
    0001054c 00000008 sl_priv.obj (.tramp.sl_flag_clear.1)
    00010554 00000008 sl_priv.obj (.tramp._sl_HoldNClear_nError.1)

     我们在 AfterSTC();

    现在、代码覆盖到 sl_SelfTest_VIM (VIM_software_test);在此处运行并失败

    此处"tmp = sl_SelfTest_CCMR5F (CCMR5F_CPUCOMP_ERROR_FORCE_TEST、true、&failInfoCCMR5F)"内部

    * ccmr5fKeyReg = CCMR5F_CCMKEYR_MODE_ERRFORCING;           <-"CCMkeyR1"寄存器0xFFFFF604内的值为0

    while (CCMR5F_CCMKEYR_MODE_lockstep!=(* ccmr5fKeyReg 和 CCMR5F_CCMKEYR_MODE)){

     卡在这里、系统将进行软件复位。

    我也在做这件事,但你能告诉我们背后的原因是什么,我们已经做了 viminit();

    两个 SL_SelfTest_VIM (VIM_software_test);和 SL_SelfTest_DMA (DMA_software_test);  失败

    谢谢  

    V·潘卡

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
     <---值是55°C,但在演示代码中是370,可以吗?

    大小为0x55C --> 0x534 + 0x8 + 0x8 +  0x8 + 0x8  + 0x8 + 0x8      

    您能不能确定是否没问题吗?

    没关系。

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

    尊敬的 Pankaj:

    您可以为新问题打开一个新主题吗? 谢谢

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

    添加了部分  .sl_stflash_sram 是在使用 #pragma Retain (sl_SelfTest_Flash)后正确创建的。