Tasking编译器开发TC275(Tricore)中使用自定义段

Tasking编译器使用的不是GCC那套链接脚本语言,自创了一个LSL脚本语言。所以GCC那套链接脚本语法就不好使的。如果你在用Tasking编译并且需要用自定义段的话,你肯定不知道咋搞,因为网上没公开没资料。。。。只有个非常简单的Tasking的Linker使用手册,并不能满足从链接脚本中导出符号 给到C源文件中使用。这个问题我花了一天的时间解决了。

看代码吧

假设条件:假定想添加只读段的名称是.text.myrodata
        1.在链接脚本文件中text group中修改成如下代码:
        group  (ordered, run_addr=mem:pfls0)
        {
            select "(.text.myrodata)"; //这里记得加括号!!!
            select ".text*";
        }
        2.在本文件中添加如下代码:
        extern uint32_t _lc_ub__text_myrodata;//段的起始地址 规则:_lc_ub_ + 段名   遇到点 用下划线代替点所以生成的是_lc_ub__text_myrodata
        extern uint32_t _lc_ue__text_myrodata;//段的结束地址。
        3. 在任何一个C文件中定义变量
        __attribute__((section(".text.myrodata")))  Type TestValue=X;//如:__attribute__((section(".text.myrodata")))  int TestValue=5; 

        二.添加自定义data段教程:

        假设条件:假定想添加data段的名称是.data.mydata
        1.在链接脚本文件中data_bss group中修改成如下代码:
#       if LCF_DEFAULT_HOST == LCF_CPU2
        group data_bss(ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram2)
#       endif
#       if LCF_DEFAULT_HOST == LCF_CPU1
        group data_bss(ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram1)
#       endif
#       if LCF_DEFAULT_HOST == LCF_CPU0
        group data_bss(ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram0)
#       endif
        {
            select "(.data.mydata)";
            select "(.data|.data*)";
            select "(.bss|.bss*)";
        }  
        2.在本文件中添加如下代码:
        extern uint32_t _lc_ub__data_mydata;//段的起始地址
        extern uint32_t _lc_ue__data_mydata;//段的结束地址。
        3. 在任何一个C文件中定义变量
        __attribute__((section(".data.mydata")))  Type TestValue=X;//如:__attribute__((section(".data.mydata")))  int TestValue=5; 

 

假定你想导出".data.mydata" 段的起始地址和结束地址,那么链接器生成的导出符号必定是_lc_ub__data_mydata(起始地址)_lc_ue__data_mydata(结束地址)

网上现在所有公开的资料上都没有说,我也是花了很长的时间才得到的。

规则:

起始地址:_lc_ub_ + 段名

结束地址:_lc_ue_ + 段名 

遇到点 用下划线代替

 

用处?

比如你上个项目上用了22 31 34三个服务,这个项目上只有31 34服务,22服务不用了。这些服务你通常会定义成数组。那你如果使用C数组,那么你的需要定义LEN宏定义,然后修改某个cfg源文件。带来了耦合。

用我的这种方法的话就非常简单:

//service22.c
__attribute__((section(".data.uds.service"))) UDS_Service_t service22=
{
    .Service=service22_callback,
};

如果项目中不需要22服务的话,直接把service22.c文件删掉,或者把后缀名改成其他格式的,比如我通常改成service22.c.no这样编译器生成makefile的时候就不会把service22.c.no编译进去。其他啥也不用改。

  • 5
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
很抱歉,我是用 CSDN 开发的 AI ,名字叫 'C知道',但我并没有与 OpenAI 公司开发的 ChatGPT 有关。对于 TASKING 编译器使用手册,我无法提供具体的手册内容,但我可以给你一些基本的信息和指导。 TASKING 编译器是一款常用的嵌入式软件开发工具,由 Altium 公司开发。它提供了广泛的功能和选项,用于编译、调试和优化嵌入式系统的代码。 下面是一些常见的使用手册主题,你可以在 TASKING 编译器的官方文档找到更详细的内容: 1. 安装和配置:了解如何正确安装和配置 TASKING 编译器,包括系统要求、环境变量设置等。 2. 项目管理:了解如何创建、管理和组织任务(projects)和工程(workspaces),以及如何添加源文件、库和其他资源。 3. 编译和构建:学习如何使用 TASKING 编译器进行编译和构建代码,包括编译选项、预处理器指令等。 4. 调试和仿真:掌握如何使用 TASKING 编译器的调试工具,包括调试器、仿真器等,以及如何设置断点、观察变量等。 5. 优化和性能分析:了解如何使用 TASKING 编译器的优化选项以及性能分析工具,优化代码的执行效率和内存占用。 6. 其他功能:探索 TASKING 编译器的其他功能,如代码静态分析、错误检测、代码生成等。 这只是一些常见主题,具体的使用手册内容可能因版本和产品配置而有所不同。建议你查阅 TASKING 编译器官方文档或相关资源,以获取更详细和准确的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值