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.

[参考译文] UCD3138:实验示例:链接器命令和 ASM 加载程序之间不一致

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1118471/ucd3138-lab-examples-inconsistence-between-linker-command-and-asm-loader

器件型号:UCD3138

大家好、我将详细介绍实验示例 cyclone.cmd 和 loadUCD3138.asm 文件

链接器命令文件显示:

RAM_PGM_AREA	(RW) : org = 0x00019000, len = 0x00000080
RAM       		(RW) : org = 0x00019080, len = 0x00000DF0
STACKS    		(RW) : org = 0x00019E70, len = 0x00000190
	
.bss            : {} > RAM                       		 /* Global & Static vars	  */
.stack          : {                              		 /* total = 400 = 0x190       */
                    _StackUSER_  = .            + 184;   /* USER                      */
                    _StackFIQ_   = _StackUSER_  + 112;   /* FIQ                       */
	                _StackIRQ_   = _StackFIQ_   + 84;    /* IRQ                       */
                    _StackABORT_ = _StackIRQ_   + 4;     /* ABORT                     */
                    _StackUND_   = _StackABORT_ + 4;     /* UND                       */
                    _StackSUPER_ = _StackUND_   + 12;    /* SUPER                     */
	             } > STACKS                      		 /* Software System stack 	  */

在加载汇编器时:

SUP_STACK_TOP   .equ	0x19ffc ;Supervisor mode (SWI stack) starts at top of memory
FIQ_STACK_TOP	.equ	0x19e00 ;allocate 256 bytes to supervisor stack, then do FIQ stack
IRQ_STACK_TOP	.equ	0x19d00 ;allocate 256 bytes to fiq stack, then start irq stack
USER_STACK_TOP	.equ	0x19b00 ;Allocate 512 bytes to irq stack, regular stack gets rest, down to variables

链接器的地址和范围是否应与汇编器的地址和范围匹配?

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

    你好、Tomasz、是的、他们应该这样做。  堆栈指针在 load.asm 文件中设置。  因此、应将所需的堆栈大小放入.cmd 文件中、以便链接器在变量扩展到堆栈空间时向您发出警告。  在.cmd 文件中没有必要放入所有其他堆栈大小

    您可能可以更改 load.asm 以放置使用.cmd 文件中的_StackuER 标签、但现在它们尚未连接。   load.asm 和.cmd 文件是单独开发的、尚未连接。   

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

    好的、 我将对其进行清理并发布解决方案。  请 回答 一个问题:在 Code Composer 中、您还可以在链接器选项中设置堆栈大小。 是用户堆栈还是所有堆栈一起?

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

    Tomasz、我不知道。  无论堆栈大小如何、都将附加到编译器提供的通用 C 启动函数中。  该函数是一个已准备好初始化 C Sharp 和堆等内容的怪兽、因此我将其破坏到了 load.asm 中看到的内容中。  因此、我负责堆栈上的断开连接。  虽然标准初始化仅初始化用户堆栈、但我认为它不会处理必要的内容。