硬汉嵌入式论坛

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

[MDK] MDK5.25对C和C++混合支持

[复制链接]

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2018-6-15 11:36:55 | 显示全部楼层 |阅读模式
已经支持得比较好了,虽然还有各种问题,不过这肯定是个趋势。想弯道超车的可以先进入。

新建一个c++的工程,默认使用ARMC6编译。可以看到c文件默认用c99语法,c++默认用c11.

然后集成stm32cubemx  rtx5v2.。。。

编译速度超快,没有发现有什么问题。一些编译不过的小问题多是文件路径,生成重复之类。没有想象中那么难。好似__CC_ARM这个宏不能有
不过出现时不时点击所有文件,编辑框都是空的。必须关了重启MDK,不知道是我系统问题还是MDK的问题。
2018-06-15_113320.png

回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
 楼主| 发表于 2018-6-15 15:03:06 | 显示全部楼层
本帖最后由 roguebear 于 2018-6-15 15:58 编辑

尝试把一个比较大的工程转到V6.
ucos emwin stm32cubemx(hal)..

太多的警告和错误,后来想了想V6是基于Clang的。 是不是应该把__CC_ARM换成_GNUC ?   于是只将原工程换这一个。编译基本没有错误。
剩下的一些小地方,再看了下__CC_ARM定义的头文件,发现有:/*
* ARM Compiler 6 (armclang)
*/
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
  #define __NOINLINE __attribute__ ((noinline) )

于是Define里面把__CC_ARM改为   __ARMCC_VERSION = 6500000编译提示 ARMCC_VERSION定义重复了。。。。原来keil选择了v6就自动定义在里面了。然后将gnuc和armcc-version都删除。。编译。提示了一个weak的错误。
在main.h里面把这个定义加入进去,就不用全部替换了。。。
/* USER CODE BEGIN Private defines */
#ifndef   __weak
  #define __weak                                 __attribute__((weak))
#endif
/* USER CODE END Private defines */




1: 把原来的static __inline换成
#ifndef   __STATIC_FORCEINLINE                 
  #define __STATIC_FORCEINLINE                   __attribute__((always_inline)) static __inline
#endif  

2: emwin的配置里面
__align(32) 换成 __attribute__((aligned(32)))

__attribute__((aligned(32))) static U32 aMemory[GUI_NUMBYTES / 4] __attribute__((at(  0xC1000000 )));   
提示一堆的at无效,凡是这种定位的at , 不管了。也不知道最后行不行。

编译输出超级快!!

但是最后空间不够。
R:\TEMP\STM32F767IGT\STM32F767IGT.axf: Error: L6407E: Sections of aggregate size 0x11f4000 bytes could not fit into .ANY selector(s).
我开到最大优化还是不够。。。。
据说是RAM被我的大数组撑爆炸了。 可是我用V5啥优化也没有用得很溜啊。。是不是at这个地方的问题。继续看看。。。。


然后把at改成  __attribute__((aligned(32))) static U32 aMemory[GUI_NUMBYTES / 4] __attribute__((section(".ARM.0xC1000000")));   
这下对了。但是还是空间不够。。。 0x11f4000 bytes也太多了点。。。啥情况这是。V5非常够。。。

发现有警告:  ../../../../Micrium/uCOS-III/Source/os_core.c(520): warning: implicit declaration of function '__isb' is invalid in C99 [-Wimplicit-function-declaration]
仔细看了看想了想。  难道ucos是用的IAR改的,  现在必须得用gcc???  我靠,这个工作量有点大。。。。
准备放弃了。。。。

不过编译超级快!!!           我估计ARM已经放弃V5,准备主推V6了。。。。
硬汉我觉得是时候完全抛弃V5改换V6了。从一开始就上比项目整完了来慢慢改要轻松。我现在看着这一堆项目实在不想改了。V5的编译速度实在是无法忍受。
目前我这个项目V5编译要去喝杯茶上个厕所活动一下回来。 V6不超过15秒,还是在开Browe的情况下。不过我这里有个让我抓狂的情况就是编译几次后,打开任何文件都是空的。我必须不停的关闭mdk,
打开mdk。。我要疯了。。。


回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2018-6-15 15:48:21 | 显示全部楼层
我记得现在官方应该是主推V6,V5是属于维护
回复

使用道具 举报

0

主题

85

回帖

85

积分

初级会员

积分
85
发表于 2018-6-15 16:28:40 | 显示全部楼层
有兴趣的话也可以尝试下新版的 IAR ,最新的版本不但支持C++,而且支持中文名称的变量,现在用着中文的变量和函数,阅读起来非常直观,很多时候连注释都不用写了。
回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-6-17 12:05:41 | 显示全部楼层
中文变量和函数名?! 难道是易语言?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 09:19 , Processed in 0.320666 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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