打印
[开发工具]

探讨一下ChipON---IDE编译代码低效的原因

[复制链接]
楼主: laoxu
手机看帖
扫描二维码
随时随地手机跟帖
41
本帖最后由 Jim12345 于 2016-6-12 17:21 编辑
laoxu 发表于 2016-6-12 17:00
2.  这个从V2开始,PSW及70-7F的RAM都是这样处理的;
------------------------------------------------ ...

2 PSW等关键寄存器所有V1/V2版本都不用切换的。如KF8F213的00-7F只有一个bank,则所有使用00-7F的特殊寄存器都不用切换bank。
   RAM是从V2开始才有公共区域。

3.硬件上所有版本都支持,只是没有做库。标准的指令实现查表只能查8位,要查16位要用库模式,这种查表模式类似外设读的方式实现的。

使用特权

评论回复
42
laoxu|  楼主 | 2016-6-12 17:22 | 只看该作者
Jim12345 发表于 2016-6-12 16:19
配置项选择release模式(不要选择debug模式),开O3优化,如图

找到了!

打开看了一下, 里面已经设置成 O3优化了。

选择release模式,再 全部构建,程序短了近一半。

另外,不能 重新全部构建的原因也找到了,要到 “项目-->清理” 点一下,即可。

时个小BUG, 建议下一版本,在 “全部构建” 时,先执行 自动 “清理项目” 。

使用特权

评论回复
43
laoxu|  楼主 | 2016-6-12 17:31 | 只看该作者
哪位朋友能 解释一下,指令集中没有的    MOVZ   R0, 0x8e  的执行的动作吗?

和 指令 MOV    R0, 0x8e 有啥区别?  


是否 MOVZ   R0, 0x8e 指令,相当于执行 MOV    R0, 0x8e; BANKSEL  0x00(切换到第0页); 这两条指令?

使用特权

评论回复
44
Jim12345| | 2016-6-12 17:41 | 只看该作者
MOVZ应该是对标志位有影响,不影响banksel
MOV对标志位没有影响

使用特权

评论回复
45
laoxu|  楼主 | 2016-6-12 17:53 | 只看该作者
Jim12345 发表于 2016-6-12 16:19
配置项选择release模式(不要选择debug模式),开O3优化,如图

选择release模式,编译显示:1280(31.4%) ,比原 2439(59.8%) 减少了近一半。

但通过查看 LST文件,发现此显示数据 1280(31.4%) 不正确!!!

实际占用程序内存约为 0- 0x7a3 ,0xe00 - 0xfe3,   2444字(里面有几个空位没挑出),等于优化无效,不知何故?

使用特权

评论回复
46
laoxu|  楼主 | 2016-6-12 18:01 | 只看该作者
重建新文件,只单选 release模式,编译显示:1280(31.4%) 。

通过查看 LST文件,发现实际占用程序内存约为 0- 0x500 ,  正确!!!

因此,编译程序还是有小BUG, 手动 执行  “清理项目” ,清理的不够彻底,保留debug部分程序。 建议下一版本,在 “全部构建” 时,要先彻彻底底的 执行 自动 “清理项目” ,做到初始化格式化。

使用特权

评论回复
47
Jim12345| | 2016-6-12 18:13 | 只看该作者
laoxu 发表于 2016-6-12 18:01
重建新文件,只单选 release模式,编译显示:1280(31.4%) 。

通过查看 LST文件,发现实际占用程序内存约为 ...

目前确实要手动 清理项目。

使用特权

评论回复
48
laoxu|  楼主 | 2016-6-13 08:15 | 只看该作者
Jim12345 发表于 2016-6-12 18:13
目前确实要手动 清理项目。

还有一个问题,在 “全部构建” 时,不会将修改后的文件自动存盘,要手动存盘后,编译结果才会正确。

建议下一版本改正。

使用特权

评论回复
49
dongshan| | 2016-6-13 08:35 | 只看该作者
大家都是做产品的,如果一个芯片就需要这么折腾,那这个芯片的意义何在?
我从来就是什么好用用什么。

使用特权

评论回复
50
laoxu|  楼主 | 2016-6-13 08:38 | 只看该作者
本帖最后由 laoxu 于 2016-6-14 07:23 编辑

好像 ChipON 不支持 C和汇编 混合编译,希望插入汇编能支持标号,否则这插入汇编用途不大,如下:

void abc()
{ char Ca;
   int  Ia;

__asm
    MOV     R0, Ca   ;将Ca装入R0
    MOV     R1, Ia    ;将Ia装入R1,R2
    MOV     R2, Ia+1
__endasm;

}


使用特权

评论回复
51
laoxu|  楼主 | 2016-6-13 08:54 | 只看该作者
dongshan 发表于 2016-6-13 08:35
大家都是做产品的,如果一个芯片就需要这么折腾,那这个芯片的意义何在?
我从来就是什么好用用什么。 ...

我的观点和你相反,个人认为,ChipON还是有些实力的。

市场上的芯片一大堆,从海尔到台系,几乎都是抄欧美的东西,改改弄弄的,真真自成一系(从C编译器到芯片)的,少的可怜。

相反,或许ChipON 实力较强,走自主创新的道路,正因为自主创新,被俺一试用,就试出问题了,什么问题?经验不足考虑不周呀。

人家做了几十年的东西,积累了丰富的经验,不是一天二天就能搞清楚弄明白的,总要付点学费吧。

既然ChipON 开了这个头,只要公司能生存下去,用不了几年,我相信ChipON 会越做越好越完善的。

使用特权

评论回复
52
EthanHen| | 2016-6-13 09:41 | 只看该作者
laoxu 发表于 2016-6-12 16:52
配置项选择release模式,第一次程序能编译,现在又不能编译了(程序没变)。

这个不是不能编译的问题,是程序没有做任何改动的情况下,系统默认不会做重复编译的事情。表示已经编译过了,编译器此时什么都没做。

使用特权

评论回复
53
linqing171| | 2016-6-13 13:50 | 只看该作者
从楼主抓图上来看,应该是用的eclipse,对于build的时候,没有修改则不编译,是eclipse的问题。
eclipse集文本编辑器、工程管理、编译器于一身的IDE。
Build All的时候不修改则不动作,此功能不属于 C Compiler。

使用特权

评论回复
54
linqing171| | 2016-6-13 13:54 | 只看该作者
还有就是按照惯例,O0优化等级太低,一般不用,除非调试。O2 speed模式是正式产品用的(你的产品flash这么小,可能要size模式)。O3仅仅用来测试,一般不要用。你的项目小是无所谓的。像几十M以上的项目,GCC一般是不敢用O3的。

使用特权

评论回复
55
Jim12345| | 2016-6-13 14:12 | 只看该作者
linqing171 发表于 2016-6-13 13:54
还有就是按照惯例,O0优化等级太低,一般不用,除非调试。O2 speed模式是正式产品用的(你的产品flash这么 ...

确实,IDE是基于eclipse的,习惯了就会发现他的功能比较强,尤其是编辑等功能。
ChipONCC不是基于GCC的,所以开的优化方式不完全一样。但对于用户来说优化等级实际是不用管的(毕竟系统小),只需要记住调试时用debug模式,代码生成是用release模式。

使用特权

评论回复
56
laoxu|  楼主 | 2016-6-13 14:19 | 只看该作者
linqing171 发表于 2016-6-13 13:54
还有就是按照惯例,O0优化等级太低,一般不用,除非调试。O2 speed模式是正式产品用的(你的产品flash这么 ...

本例中,没优化的编译,实际内设O2级优化。我试过,和O0,O1级优化,代码量基本相同。

只有上O3级优化,代码量才显著下降。

应该是编译器对ChipON的数据结构未合理分配及库函数质量不佳造成的。

使用特权

评论回复
57
laoxu|  楼主 | 2016-6-13 14:22 | 只看该作者
Jim12345 发表于 2016-6-13 14:12
确实,IDE是基于eclipse的,习惯了就会发现他的功能比较强,尤其是编辑等功能。
ChipONCC不是基于GCC的, ...

ROM容量偏小,不优化节约点用,没写多少程序就ALL了。

使用特权

评论回复
58
Jim12345| | 2016-6-13 14:26 | 只看该作者
本帖最后由 Jim12345 于 2016-6-13 14:45 编辑
laoxu 发表于 2016-6-13 08:54
我的观点和你相反,个人认为,ChipON还是有些实力的。

市场上的芯片一大堆,从海尔到台系,几乎都是抄欧 ...

laoxu楼主还是很赞的,目前阶段我认为ChipON的工具还是有瑕疵的,是需要进一步改进,最大的问题是使用习惯还不一样,不过工具是基于eclipse的,用过JAVA的人就很容易上手。当然,熟悉了我们的工具,用JAVA也是很容易的。

认同楼主的观点,在MCU领域我们还是要有一定的自主创新,只有这样,我们在后续的发展中才能跟得上节奏,甚至某种程度上实现超越,后续我们的8位新内核、32位DSP内核无不体现了这一思想,这也是我们内核采用KungFu命名的原因。

ChipON MCU的特点在于行业针对性比较强,外设非常丰富,尤其是模拟外设,精度较高,另外就是抗干扰能力和低功耗能力,这两点对每一个产品型号来说都是要时间磨的。KF系列的MCU经过六七年的时间量产,性能上得到了保证。目前每月有大批量在量产,而且部分客户是国内/国际一流客户。

后续确实需要的是时间,只有时间才能让我们精益求精。也希望楼主和其他朋友继续不吝赐教。

使用特权

评论回复
59
Jim12345| | 2016-6-13 14:43 | 只看该作者
再分析一下楼主编译的代码可以看到:
主程序生成150条指令+115条banksel指令,banksel优化后只有4条,实际为154条指令。
其余的*、/、%都由库生成。
对这个程序来说,编译器的效率还算可以的,只是库的精炼度还需提高。

3.bmp (1.58 MB )

3.bmp

使用特权

评论回复
60
dongshan| | 2016-6-13 15:15 | 只看该作者
laoxu 发表于 2016-6-13 08:54
我的观点和你相反,个人认为,ChipON还是有些实力的。

市场上的芯片一大堆,从海尔到台系,几乎都是抄欧 ...

自主个毛线,就是PIC的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则