OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4025|回复: 9

MDK5编译中文的问题

[复制链接]

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-8-8 10:01:18 | 显示全部楼层 |阅读模式
10金钱
最近在使用MDK5的时候发现了一个奇怪的现象,现象描述如下:
之前做程序时,一直使用如下的定义方式 unsigned char ctrl[4]="控制";,编译后,数组ctrl中会存储“控制”两个汉字的内码,从来没有出过什么问题。
现在在MDK5上使用相同的定义方式时,编译器开始报错了。
TIM图片20180803145806.png
编译器编码设置时GB2312,问题应该不是出现在这里。
后来,一个更加奇怪的现象出现了,我如果把之前的工程中有上述方式定义的文件直接拷贝到本工程目录并添加后,这种定义方式可以使用,但新建的文件还是不行。甚至于如果
之前的工程中的文件拷贝添加过来后先清空(ctrl+a 然后delete)再写上述定义,同样不行。为什么?
请知道的大神或有过解决经验的大神告诉一下,万分感谢!!!
TIM图片20180803145722.png TIM图片20180803145629.png

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
 楼主| 发表于 2018-8-8 10:05:16 | 显示全部楼层
后面的两个截图,是同一个工程中不同的文件中截取的,第一个是添加的以前的文件,能顺利的编译,第二个是把同样的内容拷贝到新建的文件中(修改了一下数组名,否则会报错),汉字那行的双引号下面有红色波浪线,编译会报错。奇怪的现象就是,两个文件在同一工程内,相同定义,一个报错,一个不报。
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17784
金钱
17784
注册时间
2018-3-3
在线时间
523 小时
发表于 2018-8-8 11:44:19 | 显示全部楼层
中文字符串超过16byte了?
/*
*
*
*
*
*
*/
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-8-8 12:32:34 | 显示全部楼层
帮顶!!
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
 楼主| 发表于 2018-8-8 16:43:23 | 显示全部楼层
Psheng 发表于 2018-8-8 11:44
中文字符串超过16byte了?

没超过,甚至只有一个汉字的字符串都不行。但之前的工程中的.c文件添加进来后就可以用,不知道为啥
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
发表于 2018-8-8 17:12:49 | 显示全部楼层
MDK5报错missing closing quote - LegendaryAC - 博客园 https://www.cnblogs.com/xiaohongmao/p/8668826.html
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
 楼主| 发表于 2018-8-9 07:55:46 | 显示全部楼层
qiuzhicheng 发表于 2018-8-8 17:12
MDK5报错missing closing quote - LegendaryAC - 博客园 https://www.cnblogs.com/xiaohongmao/p/8668826.h ...

感谢回复,这样设置以后虽然不报错了,但编译出来的东西依然不对,也就是汉字没有真正转化成内码然后赋值给数组。而且文本里面的红色波浪线依然存在。
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
 楼主| 发表于 2018-8-9 08:01:15 | 显示全部楼层
昨天晚上又实验了实验这个问题,最新发现是,如果我新建的工程不用freeRTOS的话,所有文件都没有类似的问题,一旦使用系统,则出现上述问题,而且还是新建的C文件有问题,以前的里面使用过汉字字符串的C文件里面新定义汉字字符串则没问题。会跟freeRTOS系统有关吗?觉得不可思议啊!
回复

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-9-16
在线时间
33 小时
发表于 2018-9-19 17:43:32 | 显示全部楼层
原来是文件可能是UTF-8编码保存的,所以没问题,而你新建的文件不是UTF-8编码的。在新建文件的时候另存为UTF-8编码格式,或者用notePad++打开来转为UTF-8试试,应该能解决问题。
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
 楼主| 发表于 2018-9-20 20:05:44 | 显示全部楼层
kaney4115 发表于 2018-9-19 17:43
原来是文件可能是UTF-8编码保存的,所以没问题,而你新建的文件不是UTF-8编码的。在新建文件的时候另存为UT ...

谢谢回复,试过,没有作用。
而且还有一个奇怪的现象就是,一个能用的文件添加到工程中,如果把这个文件所有的汉字(非注释部分)全部删掉或者直接把文件内容清空,保存,再添加汉字(或者把刚才的文件内所有内容拷贝过来)就不行了。也就是以前能用的文件,添加到工程后,不能把里面的汉字全部去掉,再增加新的汉字数组都是没问题的,一旦文件某个时刻里面没有汉字了,再添加就出错了。
我现在总怀疑是FreeRTOS的原因,同样的文件,添加到裸机程序里编译就没问题,在带FreeRTOS的工程里编译就出错。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 01:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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