本文主要是介绍【Aurix Tricore】HighTec启动代码crt0-tc37x.c分析笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 前言
crt0是hightec 在其toolchain的gcc库中实现启动startup功能的核心代码。
HighTec已为tc3xx设置了一些默认的启动行为。在此启动过程中,目标被初始化并设置为其默认值。启动文件的代码在进入main()函数之前执行。之后,执行main()函数的构造函数。
编译器附带的启动代码仅是示例,用户可以根据自己需要去修改启动代码。
默认的启动过程分为两个步骤:
1. 执行crt0.o的启动代码
2. 调用main()函数的构造函数
2. 启动代码的一些说明
编译器toolkit包含一个启动代码示例。此代码在控制器reset后执行,并必须放置在目标期望其第一条指令(入口点)的地址处。默认代码初始化了以下内容:
▶ 用户和中断堆栈指针
▶ 访问系统全局寄存器
▶ OCDS软件断点服务
▶ SDA基指针
▶ 初始化上下文保存区(CSA)
此外,未初始化的数据设置为零,并且初始化的数据从ROM复制到RAM。这是通过使用默认链接器描述文件中定义的__clear_table和__copy_table表来完成的。
__clear_table用于在进入main()函数之前将未初始化的数据(即.bss、.sbss和.zbss节)设置为零。(这样做是因为ANSI规定未初始化的数据应为零。)
通过使用-fzero-initialized-in-bss选项,用户可以告诉tricore-gcc将初始化为零的变量放置在.bss节而不是.data节中。使用static修饰符的变量不受此选项的影响。
初始化数据位于复位时的RAM区域。在程序访问数据之前,必须将该数据复制到其RAM地址。
在默认的链接器脚本中,__copy_table被初
这篇关于【Aurix Tricore】HighTec启动代码crt0-tc37x.c分析笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!