打印

大家有没有用c语言比用汇编还痛苦的时候啊

[复制链接]
楼主: huangqi412
手机看帖
扫描二维码
随时随地手机跟帖
21
machunshui| | 2009-4-13 08:51 | 只看该作者 回帖奖励 |倒序浏览

同KEIL,IAR比,PICC也没什么不好用的地方

同KEIL,IAR比,PICC也没什么不好用的地方.

差不多

使用特权

评论回复
22
电子尘埃| | 2009-4-13 08:55 | 只看该作者

问楼上PICC为什么会这样

void abc(u8 a,u8 b); 与void abc(u8,u8);为什么不一样?????


void abc(u8 a,u8 b)
{
//.........
}

使用特权

评论回复
23
machunshui| | 2009-4-13 08:59 | 只看该作者

楼上到底什么意思

楼上到底什么意思?

描述清楚一点

使用特权

评论回复
24
电子尘埃| | 2009-4-13 09:02 | 只看该作者

是这个样子的,在函数声明

必须要原文不改的进行声时,就如这样void abc(u8 a,u8 b);
而这样就不行了
void abc(u8 ,u8);

使用特权

评论回复
25
电子尘埃| | 2009-4-13 09:04 | 只看该作者

void abc(u8 c,u8 d);这样也不行

使用特权

评论回复
26
电子尘埃| | 2009-4-13 09:13 | 只看该作者

同KEIL,IAR比,PICC也没什么不好用的地方

同KEIL,IAR比,PICC也没什么不好用的地方

同KEIL,IAR比,PICC也没什么不好用的地方.

差不多



差远了,
翻页就是最可恶的,一个函数不小心写长了,怎么死的都找不着,用C写别的系列的单片机,他的汇编我一点不懂也没有关系,照样能做个小东东。如果用PICC的话,PIC的汇编不学还不行。
当然我说的这些如果像machunshui这样的高手就可以避免了,脑子里要时刻常想着我现在用的是PICC,

使用特权

评论回复
27
machunshui| | 2009-4-13 09:15 | 只看该作者

没什么问题啊

刚试验一下,没什么问题啊.

在一个源文件lcd.c中,定义

void abc(unsigned char a,unsigned char b)
{
    unsigned char x;
    
    x = a+b;
}    

在其头文件lcd.h中,声明:
void abc(unsigned char,unsigned char);

在main.c中,包含lcd.h,使用
abc(1,2);



没用任何问题

使用特权

评论回复
28
machunshui| | 2009-4-13 09:20 | 只看该作者

翻页也算不得什么问题

对PICC,函数限制不能大于2K字.

对于PIC16这样的程序存储器没有多少单片机,

整个程序,就那么点大,

写大于2k字的函数,就要好好考虑一下自己的程序结构了.

张明峰的<<PIC 单片机的C 语言编程>>对这个讲的非常清楚.



同KEIL,IAR比,PICC也没什么不好用的地方.

差不多

使用特权

评论回复
29
电子尘埃| | 2009-4-13 09:28 | 只看该作者

试了一下没有问题是吧?

我尽快把我说的那个不行的,发上来给你看看。源代码在我家里。我晚上或者是后天早上之前,发给你看看吧。

当然了,避免是可以的,只要按着张明峰大侠说的那样做。所以没个做PIC的C人,要时刻想着现在是用PIC做产品。不是AVR,也不是51,跟C99关系不大。还要学学PIC的汇编。有人问了,学汇编干嘛呀,我对程序效率不是很讲究呀。 哈哈,学汇编是为了排除翻页错误呀。编译器可不会提醒你。

使用特权

评论回复
30
machunshui| | 2009-4-13 10:10 | 只看该作者

电子尘埃,我发个没问题的给你,期待你的错误代码

电子尘埃,我发个没问题的给你,期待你的错误代码
相关链接:https://bbs.21ic.com/upfiles/img/20094/20094131087864.zip

使用特权

评论回复
31
etual| | 2009-4-13 10:27 | 只看该作者

OTL,怎么变成编译器,特别是PIC的.

使用特权

评论回复
32
李冬发| | 2009-4-13 10:28 | 只看该作者

当然用了全力去确认了!

其实确认一个代码是不是自己的错,很简单,写一个最简单的代码,只包括怀疑功能的代码,不包括其它干扰的代码,查看汇编就很清楚了。

BC3.1的出误,当时从库函数中找到了出错点的。非要用浮点很简单,替换掉那个初始化代码。后来想想没必要,就用长整型。

整个宝兰的C的库(早期)中还有一个不太常用的函数exec()的帮助是错的。按照帮助一直用不起来(别说用百度,那个年代一台PC都要2W)!还是从库里分出目标代码,看汇编,哈哈,原来是帮助有出。

使用特权

评论回复
33
machunshui| | 2009-4-13 10:39 | 只看该作者

BC3.1只代表自己,不能代表keil,IAR,也不能代表PICC

BC3.1只代表自己,不能代表keil,IAR,也不能代表PICC

使用特权

评论回复
34
李冬发| | 2009-4-13 10:51 | 只看该作者

所用过的编译器中最稳定的是PLM了

PLM就从来没有发现其中不对的地方。当然人家代码量很小是个重要原因了。

使用特权

评论回复
35
machunshui| | 2009-4-13 10:58 | 只看该作者

期待李冬发的PICC switch错误代码

期待李冬发的PICC switch错误代码

使用特权

评论回复
36
xwj| | 2009-4-13 11:18 | 只看该作者

建议先把优化级别降低些。

使用特权

评论回复
37
icecut| | 2009-4-13 11:27 | 只看该作者

这么说

昨天我用avrgcc,搞死我.他也不分别mega16和mega8
我中断号都错了,它竟然编译过去....
最后还是程序小,我耐心一下.

其实这么说,不熟都是问题.熟了就好了.

其次是:汇编改c真的会累死人的.有些c实现起来太难了.呵呵.我虽然不用汇编写程序,但是还是改不了的.有些比如c>>4,我想获得丢掉点拿4位就要先and 0f

建议画出流程图来,然后重写.

不过我觉得51比avr没有任何优势

使用特权

评论回复
38
工控秀才| | 2009-4-13 13:53 | 只看该作者

肯定有呀

我也是几年没有用C了,呵呵.最近用C写一个算法,需要用到分别操作16位或者32位数据中的每8位或者更少的位,弄来弄去的.就感觉C远不如汇编方便了,比如,我将一个字节中的低5位移入一个 unsigned int数据中,然后又要把这个unsigned int数据拆成高低8位来配合其他字节进行操作,一拆一组多次. 用汇编多简单呀,反正知道自己的字节存在什么位置就好了.

使用特权

评论回复
39
yewuyi| | 2009-4-13 15:38 | 只看该作者

呵呵,冬发君基于PIC16C5X用PICC啊。。。

那真是不痛苦也怪了啊。。。


PIC16C5X这样的东西尽量还是用ASM把。。。


至于你说的SWITCH问题,我真从来没遇到过啊,可能你用的PICC版本比较早,那俺就说不上了,我用的最早的版本就是PICC8.05版本,之前的版本是不是有这个问题就不得而知了。。。

PICC本身还是很简单的,但如果你用PICC写PIC16C5X,那确实会有点痛苦,这主要是16C5X资源确实很少,其实上到PIC16F88X、91X等用PICC和别的C基本都一样,关于BANK的问题,只需要定义时申明就可以了啊,使用中不需要关心。

PICC唯一不足的地方就在于函数指针的使用,这主要是PIC16结构决定的,和PICC没关系,呵呵,类如俺这样的笨人,本来就不喜欢用函数指针的话,也就无所谓了啊。。。

使用特权

评论回复
40
电子尘埃| | 2009-4-13 17:04 | 只看该作者

晕了

中午特地回家把代码考过来了,原来已经改好了,现在想恢复出错现场还没恢复出来。:-)
不过别急,我最近几天肯定会找出一个错误出来,用的是PICC8.50的,所有设置按默认的来。

特别指出没有跟PIC做对的意思,现在还是在用PIC16系列的,不过总觉得没有用51与AVR的痛快。

使用特权

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

本版积分规则