硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6232|回复: 24
收起左侧

[ThreadX全家桶] ThreadX内核每次升级的MDK AC5移植代码是没法直接使用的,这次6.1.7更是没法用,AC5的汇编代码里面搞了个#if,#endif

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
发表于 2021-6-8 09:34:03 | 显示全部楼层 |阅读模式
这次升级就很有问题了,#if #endif在MDK AC6里面可以使用,而在MDK AC5里面是不支持的。

编译是无法通过的

QQ截图20210608093337.png



2021-06-09 后续

进一步测试,汇编加上--cpreproc,并在option选项里面使能汇编的相应宏定义,实际测试发现代码并有按照正常的条件编译选择。

暂时不研究了。

已经将所有汇编代码里面的#if之类的定义全部修改为AC5的标准汇编方式,问题解决,已经正常运行。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
发表于 2021-6-8 11:01:02 | 显示全部楼层
放弃AC5的支持吧。。。。。
回复

使用道具 举报

73

主题

1190

回帖

1409

积分

至尊会员

积分
1409
发表于 2021-6-8 11:06:03 | 显示全部楼层
那就ac6走起,趋势所在
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-8 12:41:17 | 显示全部楼层
木兰花 发表于 2021-6-8 11:01
放弃AC5的支持吧。。。。。

现在还不行,很多用户在用,最主要是有些地方AC6支持不给力,比如go to def,比如优化等级
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-8 12:41:25 | 显示全部楼层
wdliming 发表于 2021-6-8 11:06
那就ac6走起,趋势所在

现在还不行,很多用户在用,最主要是有些地方AC6支持不给力,比如go to def,比如优化等级
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2021-6-8 16:38:30 | 显示全部楼层
可以在Keil/Options/Asm/Misc Controls中定义这个试试--cpreproc
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2021-6-8 16:41:06 | 显示全部楼层
可以在Keil/Options/Asm/Misc Controls定义这个试试--cpreproc
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-8 17:18:35 | 显示全部楼层
chenbo 发表于 2021-6-8 16:41
可以在Keil/Options/Asm/Misc Controls定义这个试试--cpreproc

给力,解决了
回复

使用道具 举报

73

主题

1190

回帖

1409

积分

至尊会员

积分
1409
发表于 2021-6-8 17:33:13 | 显示全部楼层
chenbo 发表于 2021-6-8 16:41
可以在Keil/Options/Asm/Misc Controls定义这个试试--cpreproc

看来是看了ac6的汇编文档了,这个指令是:--cpreproc选项是告诉armasm在汇编代码时先调用armclang来处理该汇编代码,然后再将处理后的代码给armasm来汇编成机器码。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-8 17:39:27 | 显示全部楼层
chenbo 发表于 2021-6-8 16:41
可以在Keil/Options/Asm/Misc Controls定义这个试试--cpreproc

加上后仅解决了错误警告问题,使能宏定义后,代码并没有执行。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-8 18:06:05 | 显示全部楼层
自己动手丰衣足食,改造了一个

所有#if的地方修改为AC5的标准汇编方式了。
回复

使用道具 举报

3

主题

334

回帖

343

积分

高级会员

积分
343
发表于 2021-6-8 18:44:20 | 显示全部楼层
看来我来迟了,楼上已经给出答案。不过还是想对楼上坛友说,不要轻言放弃某某工具,armcc是我用过【IAR,GCC,ARMCC】中最好用的arm编译器。
遇到问题无非就是看帮助,看示例:
2021-06-08_184002.png
回复

使用道具 举报

3

主题

334

回帖

343

积分

高级会员

积分
343
发表于 2021-6-8 18:47:04 | 显示全部楼层
加了cpreproc,这些宏所在的头文件,也可以#include进来。
回复

使用道具 举报

10

主题

130

回帖

160

积分

初级会员

积分
160
发表于 2021-6-8 21:17:55 | 显示全部楼层
不错不错 还是高手多 (刚准备贴我的链接的https://blog.csdn.net/onev2012/a ... 1001.2014.3001.5501  )
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2021-6-8 23:02:42 | 显示全部楼层
eric2013 发表于 2021-6-8 17:39
加上后仅解决了错误警告问题,使能宏定义后,代码并没有执行。

在Asm/Define里面定义对应的宏?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-8 23:33:25 | 显示全部楼层
chenbo 发表于 2021-6-8 23:02
在Asm/Define里面定义对应的宏?

是的,测试发现没有执行相应代码。
回复

使用道具 举报

5

主题

179

回帖

194

积分

初级会员

积分
194
发表于 2021-6-9 08:52:49 | 显示全部楼层
glory 发表于 2021-6-8 18:44
看来我来迟了,楼上已经给出答案。不过还是想对楼上坛友说,不要轻言放弃某某工具,armcc是我用过【IAR,GC ...

https://mp.weixin.qq.com/s/busl8i5BWSUxTJy-Tdqf5g
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-9 09:10:21 | 显示全部楼层
我刚下载了代码已经改成普通汇编了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-9 10:04:27 | 显示全部楼层
jiaoxiake 发表于 2021-6-9 09:10
我刚下载了代码已经改成普通汇编了

还是普通汇编靠谱。

改了就能用。
回复

使用道具 举报

3

主题

1220

回帖

1229

积分

至尊会员

积分
1229
发表于 2021-6-9 10:26:07 | 显示全部楼层
**** 以下为网络帖子内容摘录  *********

我在迁移一个项目使用AC6.12的过程中,主要还是参考《migration_and_compatibility_guide_100068_0612_00_en.pdf》文档进行参数修改,起初还算比较顺利,但是涉及到汇编代码的编译过程中死活编译会有问题。这里简单的记录下吧。我这里仍然使用armasm来编译之前的ARM语法格式的汇编代码。

    修改汇编的编译参数时,一定要注意编译选项--cpreproc,该编译选项在AC5的含义是命令armasm调用armcc预处理输入的汇编源代码;在AC6的含义是命令armasm调用armclang预处理输入的汇编源代码。

    我的工程,在使用AC5编译工具链时,在汇编过程中,使用的编译参数配置和armcc的编译参数配置是一样的,并且也添加了编译选项--cpreproc。

    升级到AC6.12之后,因为armclang的编译参数和armcc的差异比较大,自然的就不能够直接用于armasm的配置,因此我按照AC5的armasm配置作为AC6.12armasm的配置,此时能够进行汇编,但是提示:armclang: fatal error: no target architecture given; use --target=arm-arm-none-eabi or --target=aarch64-arm-none-eabi。

    当时我就在想,为什么我使用armasm编译汇编代码怎么会调用armclang呢,还以为编译工程的脚本有问题,检查了编译脚本也没发现问题,后来还是查看《migration_and_compatibility_guide_100068_0612_00_en.pdf》文档才有所收获。

    原来在汇编过程中调用armclang是armasm的编译选项--cpreproc在作怪,该编译选项是命令armasm调用armclang预处理输入的汇编源代码。ARM Compile 6中armasm需要另一个编译选项--cpreproc_opts,用于填写armclang预处理汇编代码时的一些配置参数。由于先前没有配置--cpreproc_opts,当然的在使用armclang进行预处理时会提示armclang: fatal error: no target architecture given; use --target=arm-arm-none-eabi or --target=aarch64-arm-none-eabi。

    问题解决办法:对armasm新增编译选项--cpreproc_opts,并且填写上armclang预处理汇编代码需要用到的一些配置信息。例如:

armasm --cpu=cortex-a9 --cpreproc --cpreproc_opts=--target=arm-arm-none-eabi,-mcpu=cortexa9,-D,DEF1,-D,DEF2 -I /path/to/includes1 -I /path/to/includes2 input.S

    对于--cpreproc和--cpreproc_opts编译选项,可参考《migration_and_compatibility_guide_100068_0612_00_en.pdf》文档的 3.3 Command-line options for preprocessing assembly source code。
————————————————


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-9 10:43:15 | 显示全部楼层
进一步测试,汇编加上--cpreproc,并在option选项里面使能汇编的相应宏定义,实际测试发现代码并有按照正常的条件编译选择。

暂时不研究了。

已经将所有汇编代码里面的#if之类的定义全部修改为AC5的标准汇编方式,问题解决,已经正常运行。
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2021-6-10 08:12:34 | 显示全部楼层
你好,方便分享一下工程么?这样我可以本地看看为什么加宏没有生效。谢谢。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2021-6-10 08:30:49 | 显示全部楼层
chenbo 发表于 2021-6-10 08:12
你好,方便分享一下工程么?这样我可以本地看看为什么加宏没有生效。谢谢。

test ac5.7z (7.42MB)
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-3-13 15:20:21 | 显示全部楼层
https://www.armbbs.cn/forum.php?mod=redirect&goto=findpost&ptid=107261&pid=224616&fromuid=43586

宏定义需要用这种姿势使能:--cpreproc --cpreproc_opts=-D,TX_EXECUTION_PROFILE_ENABLE --cpreproc_opts=-D,TX_ENABLE_EXECUTION_CHANGE_NOTIFY
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106545
QQ
 楼主| 发表于 2024-3-14 00:31:46 | 显示全部楼层
SunHaoArm 发表于 2024-3-13 15:20
宏定义需要用这种姿势使能:--cpreproc --cpreproc_opts=-D,TX_EXECUTION_PROFILE_ENABLE --cpreproc_opt ...

这个方式之前也测过一次,统计老是出问题了,后来不研究了,干脆所有#if的地方修改为AC5的标准汇编方式了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-24 10:57 , Processed in 0.382874 second(s), 36 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表