共4条
1/1 1 跳转至页
GCC,ICC,BUG 今天开始看和学GCC,实在收不了ICC的BUG了。。
问
答 1:
是了,GCCAVR有没有语法介绍的资料,感觉有点和标准C不同啊
答 2:
这两天我也在把以前写的代码移到CVAVR上.一个字:爽!
编译效率确实高了,而且自带的库函数非常好用!
ICC 真是...虽然好入门,但是BUG之多,忍无可忍... 答 3: GCC的文档在C:/WinAVR/doc/gnu/gcc下面。
其中的C-Extensions.html给出了GCC扩充的功能。
当然,最基本的是,GCC是ANSI兼容的。
对AVR处理器而言,硬件的特殊之处要看C:\WinAVR\doc\AVR-libc下面的文档。 答 4: 学用gcc在线汇编感觉有点怪怪的…… 答 5: 我强烈推荐你使用cvAVR 答 6: GCC, 绝对的趋势,每半年必有更新。 答 7: 是不是哦~~~ 答 8: 到http://sourceforge.net/projects/winAVR看看吧。如果你实在等不及,自己编译一个GCC出来吧:
http://www.gnu.org/software/gcc/gcc.html 答 9: 试着写了个I2c的gcc,只进行主控读写编译了一下,2,5K多!!!,虽然比以前汇编写的更完善了点,但也大多了,我用的M8才8K……,我想可能是刚学用c写程序,很多地方还不明白,以至于多了不少没用的代码。听说写c程序有不少窍门,可以提高代码的效率,比如用#ifdef之类的替换if,还有头文件的引入等,各位C高手们能不能提示一下啊!
多谢 先了! 答 10: Anitya:代码效率不能这样比在同一种芯片上,完成相同的任务,试着自己写一段汇编,再写一段等价的C程序,用不同的编译器编译后看一下产生的lst文件,看看编译器输出的结果和你手工写出的汇编码有多大区别?我想GCC的输出结果应该会让你满意的。
GCC编译输出的机器码中含初始化和退出代码,单纯看字节数是不公正的。 答 11: 多谢mxh0506的指点我去看了一下c生成的.lss和.lst文件两个文件,但是.lst看不大懂,对我来说可以说是乱七八糟的一堆东西,好不容易找了个汇编命令,可是看过去格式又好象不对,一些奇怪的变量名、符号,汇编中没这样用的。.lss文件还不错,看得比较明白,但发现了个问题:我手头上有一本介绍gcc的书,上面说gcc函数调用规则是函数的参数由左到右分配给R25-R8,但看到.lss中,有的函数有按照这样的规则,不过更多的好象是从R24开始,比如我的一个函数:
int TW_Read_Byte(uint8_t addr,uint8_t len,uint8_t *buf)
调用时
uint8_t count=TW_Read_Byte(0x00,0x20,buf);
编译成
388: ae 01 movw r20, r28
38a: 4f 5f subi r20, 0xFF ; 255
38c: 5f 4f sbci r21, 0xFF ; 255
38e: 60 e2 ldi r22, 0x20 ; 32
390: 80 e0 ldi r24, 0x00 ; 0
而且R23好象也漏了~~,是我理解错误?还是程序会自动选择? 答 12: C语言在进行函数调用/返回以及表达式计算时所有短于int类型宽度的数据类型首先会转化为int,因此空了r23。
关于这条规则,请看我刚贴的《C语言表达式中的int规则》。
答 13: 去看看先
编译效率确实高了,而且自带的库函数非常好用!
ICC 真是...虽然好入门,但是BUG之多,忍无可忍... 答 3: GCC的文档在C:/WinAVR/doc/gnu/gcc下面。
其中的C-Extensions.html给出了GCC扩充的功能。
当然,最基本的是,GCC是ANSI兼容的。
对AVR处理器而言,硬件的特殊之处要看C:\WinAVR\doc\AVR-libc下面的文档。 答 4: 学用gcc在线汇编感觉有点怪怪的…… 答 5: 我强烈推荐你使用cvAVR 答 6: GCC, 绝对的趋势,每半年必有更新。 答 7: 是不是哦~~~ 答 8: 到http://sourceforge.net/projects/winAVR看看吧。如果你实在等不及,自己编译一个GCC出来吧:
http://www.gnu.org/software/gcc/gcc.html 答 9: 试着写了个I2c的gcc,只进行主控读写编译了一下,2,5K多!!!,虽然比以前汇编写的更完善了点,但也大多了,我用的M8才8K……,我想可能是刚学用c写程序,很多地方还不明白,以至于多了不少没用的代码。听说写c程序有不少窍门,可以提高代码的效率,比如用#ifdef之类的替换if,还有头文件的引入等,各位C高手们能不能提示一下啊!
多谢 先了! 答 10: Anitya:代码效率不能这样比在同一种芯片上,完成相同的任务,试着自己写一段汇编,再写一段等价的C程序,用不同的编译器编译后看一下产生的lst文件,看看编译器输出的结果和你手工写出的汇编码有多大区别?我想GCC的输出结果应该会让你满意的。
GCC编译输出的机器码中含初始化和退出代码,单纯看字节数是不公正的。 答 11: 多谢mxh0506的指点我去看了一下c生成的.lss和.lst文件两个文件,但是.lst看不大懂,对我来说可以说是乱七八糟的一堆东西,好不容易找了个汇编命令,可是看过去格式又好象不对,一些奇怪的变量名、符号,汇编中没这样用的。.lss文件还不错,看得比较明白,但发现了个问题:我手头上有一本介绍gcc的书,上面说gcc函数调用规则是函数的参数由左到右分配给R25-R8,但看到.lss中,有的函数有按照这样的规则,不过更多的好象是从R24开始,比如我的一个函数:
int TW_Read_Byte(uint8_t addr,uint8_t len,uint8_t *buf)
调用时
uint8_t count=TW_Read_Byte(0x00,0x20,buf);
编译成
388: ae 01 movw r20, r28
38a: 4f 5f subi r20, 0xFF ; 255
38c: 5f 4f sbci r21, 0xFF ; 255
38e: 60 e2 ldi r22, 0x20 ; 32
390: 80 e0 ldi r24, 0x00 ; 0
而且R23好象也漏了~~,是我理解错误?还是程序会自动选择? 答 12: C语言在进行函数调用/返回以及表达式计算时所有短于int类型宽度的数据类型首先会转化为int,因此空了r23。
关于这条规则,请看我刚贴的《C语言表达式中的int规则》。
答 13: 去看看先
共4条
1/1 1 跳转至页
回复
| 有奖活动 | |
|---|---|
| 这个春节你犒赏自己什么了?分享你的故事,有奖征集 | |
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
我要赚赏金打赏帖 |
|
|---|---|
| 【S32K3XX】SWT 模块使用被打赏¥22元 | |
| 【分享开发笔记,赚取280元手持便携数字示波器】32位linux内核内存映射896的理解被打赏¥14元 | |
| AG32VH407开发板例程体系的构成与使用方法被打赏¥20元 | |
| 【S32K3XX】SEMA42 模块使用被打赏¥26元 | |
| 【S32K3XX】XRDC 功能使用被打赏¥22元 | |
| 【分享开发笔记,赚取280元手持便携数字示波器】8051使用keil编译的程序移动心得被打赏¥21元 | |
| 【S32K3XX】HSE 密钥管理被打赏¥17元 | |
| 【S32K3XX】Standby RAM的初始化流程被打赏¥18元 | |
| Gravity:中英文语音合成模块V2.0及其串口控制被打赏¥24元 | |
| 全彩色度变化图的绘制被打赏¥27元 | |
我要赚赏金
