当前位置: 首页 > news >正文

【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被初

http://www.lryc.cn/news/211502.html

相关文章:

  • Linux高级命令(扩展)
  • LLM在text2sql上的应用 | 京东云技术团队
  • 【MySQL】 复合查询 | 内外连接
  • 【linux】麒麟v10安装openjdk8
  • 项目部署与上线
  • 系统架构主题之八:非功能性需求对系统架构及设计的影响
  • 盛元广通化工实验室管理系统
  • 代码没注释?一个方法几百行?
  • Angular-04:指令
  • [SpringCloud] Eureka 与 Ribbon 简介
  • 【Python 零基础入门】常用内置函数 再探
  • 10.30二叉树一些性质,找公共祖先(一般与搜索树),操作的复杂度,选择题细节
  • 亮氨酸脯氨酸肽——一种新型的医药中间体研究肽
  • Ubuntu 22.04 开机闪logo后卡在/dev/sda3: clean
  • avue-crud 自定义列
  • 达索系统SOLIDWORKS 2024 装配体新增功能
  • 电脑入门:电脑专业英语500词,供新手参考
  • 采购管理工具-采购软件-Leangoo免费看板工具
  • 【23真题】大神凭这套拿452分!看看你能拿多少?
  • 大数据之LibrA数据库系统告警处理(ALM-12002 HA资源异常)
  • CSS基础入门04
  • LeetCode2741.特别的排列 状压
  • 【Linux】Centos 8 服务器部署:阿里云域名注册、域名解析、个人网站 ICP 备案详细教程
  • Sass、Less和Stylus之间有什么主要的区别?
  • 第八章 软件测试自动化
  • 科大讯飞勾勒生成式AI输入法“模样”,开启下一代输入法革命
  • OV-VG: A Benchmark for Open-Vocabulary Visual Grounding
  • win10 javaweb 项目8080端口被占用
  • C语言每日一题(22)合并两个有序数组
  • C++学习day--24 推箱子游戏图像化开发