Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
漫游者HAHAHAH
Level 2

#TC39XB 问题描述:

我设置的段是const类型,

1、设置一个section,然后向这个段中添加对象,

#define XXX_INFO __attribute__((used, protect)) __attribute__((section("info_table"))) const struct_info

链接脚本中修改:

# if LCF_DEFAULT_HOST == LCF_CPU0

group (ordered, run_addr=mem:pfls0)

# endif

{

select ".text.fast.pfls.cpu0";

select ".text.slow.pfls.cpu0";

select ".text.5ms.pfls.cpu0";

select ".text.10ms.pfls.cpu0";

select ".text.callout.pfls.cpu0";

select "(.text|.text.*)";

select "info_table";

}

程序中有多个对象实例,然后使用_lc_ub_driver_table、_lc_ue_driver_table来获取取址获得地址;

结果这两个量只能框住第一个成员对象的范围;

2、如果修改下链接文件,将该段放到单独的group中

# if LCF_DEFAULT_HOST == LCF_CPU0

group (ordered, run_addr=mem:pfls0)

# endif

{

select "driver_table";

}

程序中有多个对象实例,然后使用_lc_gb_driver_table、_lc_ge_driver_table来获取取址获得地址;此时范围是正常的;

但是我的程序中有多个段,都按照这种写法存放时,会出现段内容交错的情况,而且可能地址不连续,和其他的代码部分混杂在一起了;

疑问:

1、为什么section没有按照标准的语法组织?不同的情况下表现不一致呢?

2、是否和我存放在flash中有关?

3、关于lsl链接文件语法,有没有语法方面的介绍?

1 Solution
Jeremy_Z
Moderator
Moderator
Moderator
250 sign-ins 100 likes received 750 replies posted

Hi @漫游者HAHAHAH ,

我看到你上传的附件中的linker文件(mytest.lsl)应该是自己从零开始创建的,我建议你可以参考iLLD工程代码中的linker文件格式,然后在其基础上进行修改满足自身需求。

其次,我想知道你有试过ADS+miniwingger调试TC39XB吗,也是碰到相同的问题吗?最后,TC39XB的板子是你自己的做的板子还是Infineon的评估板?

BR,

Jeremy

View solution in original post

0 Likes
8 Replies
danyun
Level 1
Level 1
First reply posted First like given Welcome!

正好遇到了类似的问题,希望大神们帮忙解答啊!

0 Likes
waro
Level 1
Level 1
First like received First reply posted Welcome!

Have you solved the problem,Can you tell me the solution to this problem

Jeremy_Z
Moderator
Moderator
Moderator
250 sign-ins 100 likes received 750 replies posted

Hi @漫游者HAHAHAH ,

1)说实话,我不是很理解你的问题,能否基于任意的iLLD工程为例,解释一下你的需求。

2)关于Linker file的语法,你可以参考此文档

BR,

Jeremy

0 Likes
lock attach
Attachments are accessible only for community members.

你好,其实就是C语言的标注section语法,实际上我分配了多个section段,结果并不是所有的section内容都各自连续;由于我是用的是const类型,有的段内容是和固件程序函数的部分交错了。

该问题我会再看下你们的lsl文件说明;

 

另外有没有关于如何使用TASKING+miniwingger调试TC39XB的方法,现在我这面环境安装好之后,点击debugging,会提示Loading failed: Flash programming failed because resetting the target failed.

如何去选择下载调试的工具呢?这部分的文档并没有详细的说明;附件是一个简单的demo工程包含配置;

 

0 Likes

应该是之前没有打开DAS server,但是我使用DAS device scanner扫描到设备后TriCore-Family,debug时报错:

Error creating session The debug instrument IO could not be initialized. The GDI debug instrument provided the following error message. Could not start server!

 

0 Likes
Jeremy_Z
Moderator
Moderator
Moderator
250 sign-ins 100 likes received 750 replies posted

Hi @漫游者HAHAHAH ,

我看到你上传的附件中的linker文件(mytest.lsl)应该是自己从零开始创建的,我建议你可以参考iLLD工程代码中的linker文件格式,然后在其基础上进行修改满足自身需求。

其次,我想知道你有试过ADS+miniwingger调试TC39XB吗,也是碰到相同的问题吗?最后,TC39XB的板子是你自己的做的板子还是Infineon的评估板?

BR,

Jeremy

0 Likes
漫游者HAHAHAH
Level 2

针对section的问题,做了进一步修改之后仍然存在问题,而且是在ADS和TASKING中都存在:

#define XXX_INFO __attribute__((used, protect)) __attribute__((section("info_table"))) const struct_info

XXX_INFO  xxx0_info;

XXX_INFO  xxx1_info;

XXX_INFO  xxx2_info;

group info_table(ordered, align = 4, run_addr=mem:pfls0)
{
select "info_table";
}
"info_table_begin" := "_lc_ub_info_table";
"info_table_end" := "_lc_ue_info_table";

但是实际的结果是:

yuanyong_sc_0-1706078423577.png

可以看出来ub和ue并不是整个section的段空间;实际只包含了第一个对象;

当然我换一种写法,使用

"info_table_begin" := "_lc_gb_info_table";
"info_table_end" := "_lc_ge_info_table";

这个时候会包含整个group的空间起始和结束地址;

 

但是会出现新的问题,当我有多个这类的section时竟然会发生段内容交错,竟然不是每个各自连续;

这个时候我是用()将section名称括起来之后能够强行将各自的段内容放到连续位置;

group info_table(ordered, align = 4, run_addr=mem:pfls0)
{
select "info_table";
}

不过这个时候gb和ge的方式就拿不到对应的地址了,都是0;

"xxx_begin" := addressof(group:info_table);
"xxx_end" := addressof(group:info_table) + sizeof(group:info_table);

这种方式似乎是可以的,但是在map中无法看到这些变量;似乎地址方面仍然有问题;

 

后续在学习lsl编写,但是希望有经验的同志可以快速解答下,谢谢!!!!

 

0 Likes

还有一个想想,我创建了一个section,没有指定地址,结果成员被完全打散了,第一个成员离得很远,他的后续地址跟了另一个系统指定了地址的section,造成了我想要放到一起的section被分成了两段;

0 Likes