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.

[参考译文] TMS570LC4357:使用 SDL 和安全 RTOS 时发生数据中止

Guru**** 2445440 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1263437/tms570lc4357-data-abort-while-using-sdl-and-safe-rtos

器件型号:TMS570LC4357

您好!

我已经努力处理数据中止问题了几天。 我们已经使用 SafeRTOS 实现了 SDL (safeTI 诊断库)。

执行  portRESTORE_context  代码将进入数据中止函数、

_vPortSVC_start_first:
LDMFD SP!, {R4, R5, LR} ; Pop registers to keep stack pointer correct.
portRESTORE_CONTEXT



void vDataAbort( void )
{
volatile portUInt32Type ulDataFaultStatusReg;
volatile portUInt32Type ulDataFaultAddressReg;

ulDataFaultStatusReg = ulGetDataFaultStatusRegister();   <----  value of ulDataFaultStatusReg is 0x1C06
ulDataFaultAddressReg = ulGetDataFaultAddressRegister(); <----- value of ulDataFaultAddressReg is 0

for( ;; )
{
prvAbortDelay();    <-- enter here
}
}

以下是 link.cmd 文件

MEMORY
{

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
STACKS (RW) : origin=0x08000000 length=0x00003000
KERN_DATA (RW) : origin=0x08003000 length=0x00002000

HIGH_HANDLER (RWX) : origin=0x08005000 length=0x00001000
RAM (RW) : origin=0x08006000 length=0x0007A000

FEE (R) : origin=0xF0200000 length=0x00000064 fill=0xDEADBEEF /* For FEE testing, Valid only for sample application */

ECC_VEC (R) : origin=(0xf0400000 + (start(VECTORS) >> 3))
length=(size(VECTORS) >> 3)
ECC={algorithm=algoL2R5F021, input_range=VECTORS}

ECC_FLA0 (R) : origin=(0xf0400000 + (start(FLASH0) >> 3))
length=(size(FLASH0) >> 3)
ECC={algorithm=algoL2R5F021, input_range=FLASH0 }

}



SECTIONS
{

.intvecs palign(32), START( lnkStartFlashAddress ),START( lnkKernelFuncStartAddr )
fill =0xffffffff {} > VECTORS
.sl_stflash_SRAM : RUN = HIGH_HANDLER, LOAD = FLASH0, LOAD_START(ulHighHandlerLoadStart), LOAD_END(ulHighHandlerLoadEnd),
LOAD_SIZE(ulHighHandlerSize), RUN_START( ulHighHandlerStartAddr ), RUN_END( ulHighHandlerEndAddr )

.kernel_function END( lnkKernelFuncEndAddr ) :
{
*(KERNEL_FUNCTION)
} > KERN_FUNC

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

.cinit align(32) : {} > KERN_FUNC
.pinit align(32) : {} > KERN_FUNC

.STACK_DATA_svc : {. += 1024;} > STACKS, RUN_START(StackModeSVC)
.STACK_DATA_fiq : {. += 1024;} > STACKS, RUN_START(StackModeFIQ)
.STACK_DATA_irq : {. += 1024;} > STACKS, RUN_START(StackModeIRQ)
.STACK_DATA_abt : {. += 1024;} > STACKS, RUN_START(StackModeABT)
.STACK_DATA_und : {. += 1024;} > STACKS, RUN_START(StackModeUND)
.STACK_DATA_sys : {. += 1024;} > STACKS, RUN_START(StackModeSYS)

STACK_DATA START( lnkKernelDataStartAddr ) : {} > STACKS
KERNEL_DATA END( lnkKernelDataEndAddr ) : {} > KERN_DATA

.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM
LOG_DATA : > RAM //LOG
PROFILE_DATA : > RAM //PROFILE

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

}

位于 hl_sys_intvecs.asm 中

.ref _c_int00
.ref vUndefAbort
.ref vSafeRTOSSVCHandler
.ref vPrefetchAbort
.ref vDataAbort
.ref phantomInterrupt
.def resetEntry

;-------------------------------------------------------------------------------
; interrupt vectors

resetEntry
b _c_int00
b vUndefAbort
b vSafeRTOSSVCHandler
b vPrefetchAbort
b vDataAbort
b phantomInterrupt
ldr pc,[pc,#-0x1b0]
ldr pc,[pc,#-0x1b0]

我们已经研究了在执行隔启动函数后,它将运行 portSTART_FIRST_TASK();

在该函数执行中、它将执行  portRESTORE_context   然后代码将进入数据中止状态。

请参阅并支持我们。

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

    尊敬的 Pankaj:

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

    --
    谢谢。此致、
    Jagadish。

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

    尊敬的 Pankaj:

    我们没有用于测试的 SAFERTOS。 SafeRTOS 提供了多个适用于 TMS570LC43x 器件的示例。 Yu 可以用他们的例子作为一个参考。

    https://www.highintegritysystems.com/down-loads/manuals-datasheets/safertos-datasheet-downloads/

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

    您好、Wang、

    我已经浏览了您提供的链接、我正在处理它。

    在此链接中、我已看到 SafeRTOS + SDL 代码可用于不同的 MCU、而不是 TMS570LC43。

    我正在尝试与 TMS570LC43 +SafeRTOS + SDL 集成、

    根据上述演示代码侵入/集成、某个测试用例正在工作、而某个测试用例发生故障。

    我在处理它。 我们将很快向您更新

    谢谢  

    V·潘卡  

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

    感谢您的更新。