打印
[AVR单片机]

好垃圾的ICC编程软件自带写EEPROM子程序!

[复制链接]
4807|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
haikang|  楼主 | 2008-1-26 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
给ICC   C编程软件自带函数库搞晕!好垃圾的写EEPROM子程序!
写EEPROM子程序
自带函数库:
int EEPROMwrite( int location, unsigned char byte)
{
    unsigned char oldSREG;

    EEAR = location;

    EEDR = byte;

    oldSREG = SREG;
    SREG &= ~0x80;        // disable interrupt,  这里看出在整个写过程中中断都是禁止的,EEPROM的编程时间是8448个周期。在这么长时间内禁止中断,什么中断实时处理都废了。
    EECR |= 0x04;                       // Set MASTER WRITE enable
    EECR |= 0x02;                       // Set WRITE strobe
    while (EECR & 0x02);                // Wait until write is done

    SREG = oldSREG;
    return 0;                           // return Success.
                                        // Could be expanded so that
                                        // the routine checks that the address
                                        // is within the range of the chip.
}    

修改后的程序:
 int EEPROMwrite( int location, unsigned char byte)
{

    EEAR = location;
    EEDR = byte;

    CLI();
    EECR |= (1<<EEMWE);                       // Set MASTER WRITE enable
    EECR |= (1<<EEWE);                       // Set MASTER WRITE enable
    SEI();
    while (EECR & (1<<EEWE));                // Wait until write is done

    return 0;                           // return Success.
                                        // Could be expanded so that
                                        // the routine checks that the address
                                        // is within the range of the chip.
}        

相关帖子

沙发
hotpower| | 2008-1-26 20:48 | 只看该作者

哈哈~~~不满意就自己做放心~~~

使用特权

评论回复
板凳
haikang|  楼主 | 2008-1-26 20:54 | 只看该作者

现在对自带的函数越来越不放心了。即大又废!

使用特权

评论回复
地板
后学| | 2008-1-26 21:02 | 只看该作者

能用就可以,

毕竟很多人在用,很多问题都发现并解决了,
自己写的东西,能保证没有bug吗?

完美的代码是不存在的。。。

使用特权

评论回复
5
hotpower| | 2008-1-26 21:05 | 只看该作者

哈哈~~~个人认为还是GCC最好~~~(俺玩IAR又回头了~~~)

使用特权

评论回复
6
蓝水天下| | 2008-1-26 22:00 | 只看该作者

我以前也用icc

我以前也用icc 发现效果不是很好 
呵呵 现在也用GCC了 AVRstudio+gcc组合 编译完了就下载 爽

使用特权

评论回复
7
音乐乐乐| | 2008-1-26 23:06 | 只看该作者

各有优缺点而已,怎么能说自带的那个是垃圾?

 整个写过程关中断可以保证数据写入的正确性。
 
 lz自己写的那个中断保护程序本身就是错误的。

使用特权

评论回复
8
avr| | 2008-1-27 10:43 | 只看该作者

看来楼主对EEPROM的写入时序没有充分了解

看来楼主对EEPROM的写入时序没有充分了解,首先自己应该"自我检讨"一下.
禁止中断只是为了保证EEPROM可靠地写入,写入过程不被中断打扰.当然你也可以自己在中断服务中处理EEPROM的写入,就不怕打扰了,而且不要等待.

使用特权

评论回复
9
平常人| | 2008-1-27 10:59 | 只看该作者

问题好像不像楼主说的那么简单,LZ最好看看手册

很有可能写EEPROM的过程不允许其它中断插入,否则有可能造成写EEPROM的过程被中止或产生误动作。

持怀疑的态度是对的,但再下结论之前必须搞清楚为什么原始的设计人员要这样做,也许他们有不可辩驳的理由。正好刚才看到“技术交流”版的另一个帖(EEPROM长时间放置后,里面的数据会部分丢失),有人用自制的EEPROM编程器烧写EEPROM,但几个月后里面的部分内容消失,不知是否也是LZ这种状况,在没有搞清原理的情况下修改了写入过程。

使用特权

评论回复
10
yewuyi| | 2008-1-28 11:55 | 只看该作者

8楼的再讲讲?

俺一直就理解为8MS内禁止一切中断发生~~


发送写EE的命令很快,但EE写的物理时间可快不了,这个8MS只要还是写的物理时间,俺一直都理解为8MS的物理时间内,禁止发生中断。

所以:请问在中断处理什么可不要考虑中断产生的影响?

使用特权

评论回复
11
haikang|  楼主 | 2008-1-28 13:56 | 只看该作者

我的程序已正常使用。


1、设置EEMWE后4个时间周期内设置EEWE位,写入才有效。这期间不能有中断占用时间;
2、写过程中,中断处理程序不能出现EEPROM和FLASH读写操作;

原自带程序中禁止中断的目的也是为了达到这两条要求。所以“一棍打死”,什么中断都不允许了!

所以在实际应用中,如果中断处理中没有出现EEPROM和FLASH读写操作是不必禁止中断的。

使用特权

评论回复
12
NE5532| | 2008-1-28 20:28 | 只看该作者

不好意思,从来不用。

使用特权

评论回复
13
avr| | 2008-1-29 10:24 | 只看该作者

禁止中断只是为了保证写入时序

禁止中断只是为了保证写入时序要求,等待写完成可以不禁止中断。如果以中断处理方式写入,在上次写结束后会产生一个中断,因此不必等待,另外由于AVR本身是不允许中断嵌套的,因此也不需要担心其它中断改变写入的时序。

使用特权

评论回复
14
yewuyi| | 2008-1-29 10:39 | 只看该作者

~~

谢LS,看来我以前理解错了。


:只要保证在代码执行的写时序内不发生中断打断写时序过程,其后的物理写时间发生中断是没关系的。

所以:如此这般,使用AVR时在定时中断中发送EE的写时序就是更简偏的方式了,只要在每次发生定时中断后先查询一下上次的写EE是否完成,完成了就发送下一个写时序,否则就退出

使用特权

评论回复
15
xwj| | 2008-1-29 11:50 | 只看该作者

LZ所说的“好垃圾的ICC”的代码却是可以保证100%写入可靠性

因为那个“好垃圾的ICC”并不可能知道应用者的水平,
也不可能保证每个应用者都会去仔细读DataSheet并知道写EEPROM的注意点

所以呢,当然只能写人人都会用并绝对不会用得有问题的程序啦


PS:
LZ自己的代码也有问题哦,只能用于你的特殊场合

使用特权

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

本版积分规则

8

主题

23

帖子

4

粉丝