打印
[国产单片机]

为了发广告,透露一个义隆C编译器的bug

[复制链接]
5472|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jackzbb|  楼主 | 2009-12-28 17:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jackzbb 于 2010-3-27 16:32 编辑

俺有两万多片8脚DIP封装的153。一个客户说要4万,结果只提走1万的货,至今还有两万多片,被他害惨了,听说最近台湾IC在闹缺货,看看有没有人要。QQ409264583. 请版主保留一个月,算帮我一个忙。为了响应版主发广告要带点技术含量的号召,俺说一个义隆C编译器的BUG。就是当使用二维数组时,编译出来的代码有问题,但编译器不会报错,这个隐形的问题搞了我几天,咨询过义隆,它也承认有问题。

相关帖子

沙发
谈的元| | 2009-12-28 20:57 | 只看该作者
请给出具体问题例子来证明这个问题。

使用特权

评论回复
板凳
yewuyi| | 2009-12-30 11:38 | 只看该作者
承认有P用,主要是什么时候改!

使用特权

评论回复
地板
谈的元| | 2009-12-30 19:33 | 只看该作者
真有问题,EMC改动很积极的,

以前用汇编,有些问题,EMC改动最快的一次就半天时间,然后给我补丁了。

不是问题的话,估计改起来就慢了

我还等楼主举例呢!

使用特权

评论回复
5
jackzbb|  楼主 | 2010-1-4 19:20 | 只看该作者
代码太长了,发不了。

使用特权

评论回复
6
David_ming| | 2010-1-15 09:29 | 只看该作者
态度好也是一种美德

使用特权

评论回复
7
jxb163| | 2010-2-5 12:34 | 只看该作者
把问题解决才是正道

使用特权

评论回复
8
司徒老鹰| | 2010-2-16 14:11 | 只看该作者
看来是没戏了

使用特权

评论回复
9
五谷道场| | 2010-2-16 15:27 | 只看该作者
代码太长了,发不了。
jackzbb 发表于 2010-1-4 19:20
???

使用特权

评论回复
10
David_ming| | 2010-3-10 12:20 | 只看该作者
端口变化中断的bug到底接不解决啊,义隆

使用特权

评论回复
11
shuiyidao| | 2010-3-17 09:20 | 只看该作者
义隆的c编译器我是不敢再用了,搞的我一个项目用汇编重写了一次,年都没过好,nnd

使用特权

评论回复
12
wuqingliang1| | 2010-3-19 15:26 | 只看该作者
楼主用过这个单片机C编程呀,和楼上这位一样,义隆的c编译器我是不敢再用了,老是出问题,现在是所有变量自己固定给它分配地址,我做的一个LED灯饰的项目,用义隆EM78P153S单片机,C语言,用两条灯板(各1个EM78P153S单片机,50HZ 220V交流同步)测试,发现如果上电启动瞬间同步的话后面运行很长时间同步都没问题(说明主循环程序同步没问题),而上电瞬间不同步的话就不同步了,不知道是不是初始化看门狗复位功能设置不对还是怎么回事,请高手不吝赐教!谢谢!!!

初始化代码如下:
/*************

功能说明:系统初始化
***************/
void SysInit(void)
{  
     DISI();   //关中断
     WDTCR = 0x80; //使能看门狗定时器,P60为普通IO口
     _asm
    {
          MOV A,@0x4b
          CONTW
    }    //预分频给WDT,分频比设为1:8,WDT定时时间为18*8=144ms
    WDTC();   //预分频器从WDT转换到TCC须清零
    WDTCR = 0x00; //关闭看门狗
    P5CR   = 0x00; //设置P5口为LED控制输出
     P6CR   = 0x0a; //设置P61为交流信号输入端口,P63只能为输入,其余为LED控制输出
     // PDCR   = 0XFF; //下拉禁止
    // ODCR   = 0X00; //漏极开路禁止
    // PHCR   = 0X04; //P62禁止上拉,P6其它口上拉允许
    Close_All(); //初始化LED全灭
    P61 = P61;  //读P61口状态
    ENI();
     MR |= 0x02; //使能P6口输入电平变化中断
}

使用特权

评论回复
13
jackzbb|  楼主 | 2010-3-27 17:00 | 只看该作者
最近又发现一个DUG,如下:
#define                ZEROMID                170
#define                FIRSTMID                  229
#define                SECONDMID        253
#define                THIRDMID                        285
#define                FOURTHMID        377


#define     FIRSTDW                  (ZEROMID*2+(FIRSTMID-ZEROMID))
#define        SECONDDW              (FIRSTMID*2+(SECONDMID-FIRSTMID))

#define        THIRDDW         (SECONDMID*2+(THIRDMID-SECONDMID))
#define        FOURTHDW         (THIRDMID*2+(FOURTHMID-THIRDMID))

程序中要用到FIRSTDW 等,结果运行不对,搞了半天发现是宏定义的问题,编译是不会报错的,
最后把FIRSTDW 算出来#define一下就好了,可是参数一变又要重新算了,想偷一下懒没偷成。
对EMC汇编不熟的,建议不要用它的C.

使用特权

评论回复
14
谈的元| | 2010-3-28 07:31 | 只看该作者
用的eUIDE吗?哪个版本?

使用特权

评论回复
15
jackzbb|  楼主 | 2010-3-29 16:03 | 只看该作者
eUIDE版本1.01.01

使用特权

评论回复
16
pengbo| | 2010-3-30 14:57 | 只看该作者
EMC还有一个问题,EM78P468,在同时使用外部中断与定时器中断时,会有一个很搞笑的现象,两种中断同时产生后,先进入高优先级的中断,退出高优先级中断,再进入低优先级中断,再退出时就出问题啦,会跳过原程序的一条指令,例在原程序上有三条指令,在指令1时触发了外部中断和定时器中断,指令1完成后会进入中断,两个中断程序都退出后本应返回到指令2,但这时却是返回到指令3,导致程序出错。EMC原厂也承认了,但不可能再改MCU版本(都是老片子了),提供解决方法是在上电时关掉IO口唤醒功能,需要用时再打开,解释说EMC其它片子也有这个问题,只是其它片子上电时默认唤醒功能是关闭的(468默认开启),所以这问题一直没发现,因为原厂拖了好久才来的答复,厂里又急着要解决问题,就自己想方法改程序搞好了,EMC说的方法则没空试过,不知有哪位仁兄试过?

使用特权

评论回复
17
ayb_ice| | 2010-5-5 14:54 | 只看该作者
问题这么多还敢用
真是NB

使用特权

评论回复
18
aaron96031| | 2013-4-14 14:55 | 只看该作者
jackzbb 发表于 2010-3-27 17:00
最近又发现一个DUG,如下:
#define                ZEROMID                170
#define                FIRSTMID                  229


这个问题,针对这类低端的MCU, 用C去编译都会出现。虽然C编译后不报错,但运行结果报错。这就是这样 只有几十个RAM的 MCU 来这样运算可要当心了哦。所以是什么样的MCU用什么样的方法来对待。   

使用特权

评论回复
19
McuPlayer| | 2013-4-15 08:33 | 只看该作者
应该是EMC的define不支持表达式吧,严格说这不是C编译器的问题,而是预编译器的问题

使用特权

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

本版积分规则

28

主题

74

帖子

0

粉丝