ATJ2157内存篇【炬芯音频芯片】---sct语法

本文介绍了ATJ2157平台的内存配置及SCT(Scatter File Syntax)脚本的使用,详细讲解了SCT的作用、语法规则,包括加载域、执行域描述以及输入节的描述。通过SCT脚本,可以控制输入文件的节映射到内存中并管理存储布局。此外,还提到了在ATJ2157平台上不同数据类型如.data, .constdata, .bss的编译情况,并提供了学习资源。" 107681583,9510541,手把手教你使用Heroku部署Node.js网页并连接MongoDB Atlas,"['node.js', 'javascript', '云部署', '数据库管理', 'MongoDB']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公共知识篇

BNF 简介

巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur,首次引入一种形式化符号来描述给定语言的语法。

简称为:BNF符号。   
现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则

巴科斯范式的内容

在双引号中的字(“word”)代表着这些字符本身。而double_quote用来代表双引号。

在双引号外的字(有可能有下划线)代表着语法部分。

尖括号( < > )内包含的为必选项。

方括号( [ ] )内包含的为可选项。

大括号( { } )内包含的为可重复0至无数次的项。

竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。

::= 是“被定义为”的意思。

关于具体的例子可以上网搜索,网上资料比较齐全

Sct脚本

Sct 的全称是 Scatter File Syntax,

Sct的作用

在学习一个东西之前,首先要明白,她是干什么的?那么sct脚本文件到底是什么东西?

其实吧,sct脚本文件是描述如何把输入文件中的节(sections)映射到输出文件中,并控制输出文件的存储布局的脚本文件。并且sct的语法是遵守BNF的语法规则的。

Sct的语法规则

一个.sct文件,包括了一个或者多个加载域(load region),每个加载域也包括一个或者多个执行域(execution region)

下面是一个.sct文件的文件结构图
在这里插入图片描述

1. 加载域描述(Loadd region descriptions)

其实加载域就是用来描述下内存的区域,这个区域是用来存放执行域的

加载区域描述的组件允许您唯一标识加载区域,并控制ELF文件的哪些部分放置在该区域中

加载域的具体结构

在这里插入图片描述

一个加载域描述,应该包括哪些内容呢?

1:名字(被编译器用来识别不同的加载域)
2:一个基地址(代码或数据的开始地址)
3:属性说明
4:大小
5:一个或者多个执行域

加载域的语法详解
符合BNF的规则,对规则不了解的可以百度下

load_region_description ::= load_region_name (base_address | (“+”
offset)) [attribute_list] [max_size]
“{”
execution_region_description+
“}”

load_region_name:
加载域的名字,这个是区域中区分大小写的

base_address :
这个区域内被链接的地址,注意要满足对齐的要求

+offset:
     描述一个基地址,其偏移字节超出了前一个加载区域的结尾,offset必须是4字节对齐,如果这是第一个加载区域,那么+offset意味着基址从零开始偏移字节。如果使用+offset,则加载区域可能从以前的加载区域继承某些属性

attribute_list:
待定补充

max_size:
指定加载区域的最大大小。这是在执行任何解压缩或零初始化之前加载区域的大小。如果指定了可选的max_size值,那么如果分配给armlink的区域超过max_size字节,则armlink将生成错误


execution_region_description:
指定执行区域名称、地址和内容
加载的属性问题
PI       与地址无关方式存放;
RELOC    重新部署,保留定位信息,以便重新定位该段到新的执行区;
OVERLAY  覆盖,允许多个可执行区域在同一个地址,ADS不支持;
ABSOLUTE 绝对地址(默认);


加载域的继承问题

一个加载域继承另一个加载域的属性,请使用+offset

在这里插入图片描述

RELOC属性的继承规则
如果显性设置了一个加载域的属性为RELOC,那么执行域只能承认,不能设置
如下:
LR1 0x8000 RELOC
{
    
    ER1 +0 ; inherits RELOC from LR1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个专研技术的小蜜蜂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值