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.

[参考译文] TM4C123GH6ZRB:从引导加载程序跳转到应用程序时发生故障

Guru**** 1079480 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/1116946/tm4c123gh6zrb-fault-when-jumping-from-bootloader-to-app

器件型号:TM4C123GH6ZRB
Thread 中讨论的其他器件:SYSBIOS

我正在尝试更新从自定义引导加载程序跳转到 TI-RTOS 的代码。  代码进入重新映射的矢量表并开始执行代码、但在启动任务时失败。 我已经了解到有人在 FreeRTOS 上遇到堆栈指针问题、但跳转到 TI-RTOS 时却找不到太多问题。  

我已添加到.cfg 中

m3Hwi.resetVectorAddress = 0x2800;
m3HwI.vectorTableAddress = 0x2800;

并为此调整了.cmd 文件、并添加了一个 startup.c 文件以进行跳转。  

我尝试跳过这个

#pragma CODE_SECTION (ResetISR、".blcode")
无效
ResetISR (空)

#if 0
//将矢量表设置为闪存中应用程序的开头。
HWREG (NVIC_vtable)= APP_START_ADDRESS;

//从应用程序的矢量表加载栈指针。
//
_asm (" LDR R1、[r0]\n"
" mov sp、r1");


//从应用程序的矢量表加载初始 PC 并分支到
//应用程序的入口点。
//
_asm (" LDR r0、[r0、#4]\n"
" bx r0\n");

其他
//
//跳转到 CCS C 初始化例程。 这将启用
//浮点单元,因此不需要在此处执行此操作。
//
_asm (".global _c_int00\n"
" b.w _c_int00");
#endif

--retain=g_pfnVectors

#define has 引导加载1

//#define APP_BASE 0x00000000


存储器

#if 具有 bootload

#define APP_BASE 0x00002800
#define FLASH_SIZE 0x00040000
#define RAM_base 0x20000000


#define CODE_HEADER_BASE 0x0003FFA0
#define CODE_HEADER_SIZE (FLASH_SIZE - CODE_HEADER_BASE)
#define APP_LENGTH (CODE_HEADER_BASE - APP_BASE)

Flash_BL (RX):origin = 0,length = app_BASE
闪存(RX):origin = app_BASE,length = app_length
CODE_HDR (RX):origin = CODE_HEADER_base,length = CODE_HEADER_SIZE
SRAM (rwx):origin = 0x20000000,length = 0x00008000
其他
闪存(RX):origin = 0x00000000,length = 0x00040000
SRAM (rwx):origin = 0x20000000,length = 0x00008000
#endif

/*以下命令行选项作为 CCS 项目的一部分进行设置。 *
/*如果您使用命令行构建,或者出于某种原因想要*/
/*在此处定义它们,您可以根据需要取消注释并修改这些行。 *
/*如果您使用 CCS 进行构建、最好进行任何这样的构建*/
/*对 CCS 项目进行修改并将此文件保留为单独文件。 *
/**//
/*--heap_size=0 */
/*--stack_size=256 */
/*--library=rtsv7M4_T_le_eabi.lib */

/*内存中的段分配*/

部分

#if 具有 bootload

.bvecs:> flash_bl
.bblcode:> flash_bl
.intvecs:> app_base
.text:> FLASH
.const:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH
codedHdr :> CODE_HDR

.vtable:>0x20000000
.data :> SRAM
.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM

其他

.intvecs:> 0x00000000
.text:> FLASH
.const:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH

.vtable:>0x20000000
.data :> SRAM
.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM

#endif

__STACK_TOP =__STACK + 1024;

任何

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

    找到问题、我尝试在 const 存储器中使用重新映射的向量。 当我把它切换到 RAM 时、它工作正常。 它仅与 SYSBIOS 一起工作正常、就像 我之前移植的代码中一样、但我猜 TI-RTOS 需要动态地重新映射矢量。