没有合适的资源?快使用搜索试试~ 我知道了~
TC3xx MCAL中Tasking Link文件解析以及代码变量定位方法
5星 · 超过95%的资源 需积分: 43 144 下载量 178 浏览量
2022-06-07
09:51:10
上传
评论 24
收藏 257KB PDF 举报
温馨提示
试读
14页
TC3xx MCAL中Tasking Link文件解析以及代码变量定位方法:简单介绍 Tasking Link 文件的解析;如何快速修改 Link 文件定位变量、常量和代码存放的RAM 和 Flash 位置,包括 UCB 区域的部分设置
资源详情
资源评论
资源推荐
1. Tasking Link 文件解析:
1.1 DSRAM 中的数据存放:
在 Aurix 2G 中(以 TC387 为例),每个 CPU 都有自己的 PSRAM (又称 PSPR)和 DSRAM
(又称 DSPR),它们都是 RAM,只不过 PSRAM 是挂在指令总线上,而 DSRAM 是挂在数据
总线上,因此如果在 PSRAM 运行代码,DSRAM 存放数据,可以达到 0 cycle 等待。但是
PSRAM 上也是可能存放数据的,只不过效率低一点。
DSRAM 的起始地址如下:
CPU0 DSRAM
0x70000000
CPU1 DSRAM
0x60000000
CPU2 DSRAM
0x50000000
CPU3 DSRAM
0x40000000
在 MCAL 的 Tasking link 文件中,对于数据的存放如下图所示,
CSA:
CSA 是用来在函数调用或者进出中断时用来保存通用寄存器的区域,具体可以看 Tricore 内
核参考手册。它的大小由 LCF_CSAx_SIZE 决定。
ISTACK:
在中断服务程序中使用的栈,它的大小由 LCF_ISTACKx_SIZE 决定
USTACK:
在用户程序中使用的栈,它的大小由 LCF_USTACKx_SIZE 决定
Heap:
程序中使用的堆,它的大小由 LCF_HEAP_SIZE 决定
Predefine Data/Data:
Data 区域是用来存放带初始化值的全局变量,在 link 文件中,这个区域有两种类型,一种是
预先定义的区域和默认区域,
预先定义的 Data 区域,例如.data.Ifx_Ssw_Tc1 和.data.Cpu1_Main.*, 在 cpu1_main.c
中如果定义了一个带初始化值的变量,则它会放在 DSRAM1 中的.data.Cpu1_Main.*段中
group (ordered, attributes=rw, run_addr=mem:dsramx)
{
select ".data.Ifx_Ssw_Tcx.*";
select ".data.Cpux_Main.*";
…
}
而如果在一个其他.c 文件(例如 demo.c)中定义了一个带初始化值的变量,则它会放在
DSRAM0 中 data 区域(即默认区域),这个是由于 Link 文件中下面语句决定:
# if LCF_DEFAULT_HOST == LCF_CPU0
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram0)
# endif
{
group data(attributes=rw)
{
select ".data.*";
select ".data.farDsprInit.cpu0.32bit";
select ".data.farDsprInit.cpu0.16bit";
select ".data.farDsprInit.cpu0.8bit";
}
…
}
Predefine BSS/BSS:
BSS 区域是用来存放没有初始值的全局变量,在 link 文件中,这个区域有两种类型,一种是
预先定义的区域和默认区域,
预先定义的 BSS 区域,例如.bss.Ifx_Ssw_Tc1 和.bss.Cpu1_Main.*, 在 cpu1_main.c 中
如果定义了一个带初始化值的变量,则它会放在 DSRAM1 中的.bss.Cpu1_Main.*段中
group (ordered, attributes=rw, run_addr=mem:dsramx)
{
select ".bss.Ifx_Ssw_Tcx.*";
select ".bss.Cpux_Main.*";
…
}
而如果在一个其他.c 文件(例如 demo.c)中定义了一个不带初始化值的变量,则它会放在
DSRAM0 中 BSS 区域(即默认区域),这个是由于 Link 文件中下面语句决定:
# if LCF_DEFAULT_HOST == LCF_CPU0
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram0)
# endif
{
group bss(attributes=rw)
{
select ".bss.*";
select ".bss.farDsprClearOnInit.cpu0.32bit";
select ".bss.farDsprClearOnInit.cpu0.16bit";
select ".bss.farDsprClearOnInit.cpu0.8bit";
}
…
}
剩余13页未读,继续阅读
大橙子疯
- 粉丝: 1494
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论5