【编译链接】什么是Copy Table及如何使用Copy Table

目录

前言

正文

1.GHS编译器

1.1. Clear and Copy Tables

1.2 Ifx_Ssw_C_InitInline实现

2.GNU编译器

2.1 Clear and Copy Tables

2.2 Ifx_Ssw_C_InitInline实现

3.Tasking编译器

3.1 Clear and Copy Tables

3.2 Ifx_Ssw_C_InitInline实现

3.3 调试分析

4.总结


前言

嵌入式工程师应该都知道没有初始值的全局变量或者静态局部变量存放在.BSS段,有初始值的全局变量或者静态局部变量存放在.DATA段,芯片上电后我们需要将.BSS段都初始化为0值,将ROM中保存的全局变量或者静态局部变量的初始值拷贝到RAM中也就是.DATA段中。

那么问题来了,在哪个地方进行.BSS段清零以及.DATA段中RAM初始值的拷贝了?

熟悉英飞凌TC3xx芯片的朋友应该知道英飞凌芯片的启动分为6个阶段(Phase1 - Phase6),在__StartUpSoftware_Phase6()中完成.BSS段和.DATA段的初始值拷贝。TC3xx芯片的启动流程参考以下的文章:

参考文章:https://zhuanlan.zhihu.com/p/644563274

如下图所示,最终由Ifx_Ssw_C_InitInline()函数完成初始化C运行时变量,也就说.BSS段的清零及.DATA段的初始化。

Ifx_Ssw_C_InitInline()函数的具体实现根据编译的不同而不同,本文就来介绍3个常用编译器如何完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值