IAR C for AVR 2.28

Apr 25, 2005 4 Replies

Hi, All!



ôÕÔ ÏÂÎÁÒÕÖÉÌ, ÞÔÏ IAR C for AVR 2.28 ÐÒÉ ×ÈÏÄÅ × ÐÒÅÒÙ×ÁÎÉÅ ÎÅ ÓÏÈÒÁÎÑÅÔ EEAR, EEDR, ÅÓÌÉ ÉÈ ÐÏÒÔÉÔ. ðÏÓÍÏÔÒÅÌ ÉÓÈÏÄÎÉËÉ __eeput, __eeget - ÔÁÍ ÐÒÉ ÚÁÐÉÓÉ É ÞÔÅÎÉÉ EEPROM ÚÁÐÒÅÝÅÎÉÑ ÐÒÅÒÙ×ÁÎÉÑ ÎÅÔ. ðÏÌÕÞÁÅÔÓÑ, ÞÔÏ × ÐÒÅÒÙ×ÁÎÉÉ ÐÏÌØÚÏ×ÁÔØÓÑ ÐÅÒÅÍÅÎÙÍÉ, ÏÂßÑ×ÌÅÎÎÙÍÉ __eeprom, ÎÅÌØÚÑ, ÎÕ ÉÌÉ ×ÒÕÞÎÕÀ ÉÚ×ÒÁÝÁÔØÓÑ Ó ÓÏÈÒÁÎÅÎÉÅÍ ËÏÎÔÅËÓÔÁ. äÏ×ÏÌØÎÏ ËÏ×ÁÒÎÏ. üÔÏ ÂÁÇ ÉÌÉ ÆÉÞÁ?
ðÒÉÍÉÔÅ Õ×ÅÒÅÎÉÑ × ÓÏ×ÅÒÛÅÎÎÅÊÛÅÍ Ë ÷ÁÍ ÐÏÞÔÅÎÉÉ

Mon Apr 25 2005 17:50, Sergey Zabelin wrote to All:

SZ> ôÕÔ ÏÂÎÁÒÕÖÉÌ, ÞÔÏ IAR C for AVR 2.28 ÐÒÉ ×ÈÏÄÅ × ÐÒÅÒÙ×ÁÎÉÅ SZ> ÎÅ ÓÏÈÒÁÎÑÅÔ EEAR, EEDR, ÅÓÌÉ ÉÈ ÐÏÒÔÉÔ.

ó ÄÏÂÒÙÍ ÕÔÒÏÍ. ôÙ ÞÔÏ, ÈÏÞÅÛØ ÞÔÏÂÙ × ÐÒÅÒÙ×ÁÎÉÉ ×ÓÅ ~100 SFR ÓÏÈÒÁÎÑÌÉÓØ?

SZ> ðÏÓÍÏÔÒÅÌ SZ> ÉÓÈÏÄÎÉËÉ __eeput, __eeget - ÔÁÍ ÐÒÉ ÚÁÐÉÓÉ É ÞÔÅÎÉÉ EEPROM SZ> ÚÁÐÒÅÝÅÎÉÑ ÐÒÅÒÙ×ÁÎÉÑ ÎÅÔ.

á ÎÅÌØÚÑ ÐÏÌØÚÏ×ÁÔØÓÑ _eeput É _eeget. éÍÅÎÎÏ ÐÏÔÏÍÕ, ÞÔÏ × ÎÉÈ ÎÅÔ ÚÁÐÒÅÔÁ ÐÒÅÒÙ×ÁÎÉÊ, ËÏÔÏÒÙÊ ÁÂÓÏÌÀÔÎÏ ÎÕÖÅÎ ÐÒÉ ÚÁÐÉÓÉ × EEPROM É ÖÅÌÁÔÅÌÅÎ ÐÒÉ ÞÔÅÎÉÉ. HÁÐÉÛÉ Ó×ÏÉ ÆÕÎËÃÉÉ.

SZ> ðÏÌÕÞÁÅÔÓÑ, ÞÔÏ × ÐÒÅÒÙ×ÁÎÉÉ SZ> ÐÏÌØÚÏ×ÁÔØÓÑ ÐÅÒÅÍÅÎÙÍÉ, ÏÂßÑ×ÌÅÎÎÙÍÉ __eeprom, ÎÅÌØÚÑ, ÎÕ SZ> ÉÌÉ ×ÒÕÞÎÕÀ ÉÚ×ÒÁÝÁÔØÓÑ Ó ÓÏÈÒÁÎÅÎÉÅÍ ËÏÎÔÅËÓÔÁ. SZ> äÏ×ÏÌØÎÏ ËÏ×ÁÒÎÏ. üÔÏ ÂÁÇ ÉÌÉ ÆÉÞÁ?

üÔÏ Ô×ÏÅ ÔÏÒÍÏÖÅÎÉÅ. ÷Ï-ÐÅÒ×ÙÈ, ÇÌÕÐÏ × ÐÒÅÒÙ×ÁÎÉÉ ÏÂÒÁÝÁÔØÓÑ Ë EEPROM, ÔÁË ËÁË ÜÔÏ ÏÞÅÎØ ÍÅÄÌÅÎÎÏ. äÅÒÖÉ ÁÌÉÁÓÙ EEPROM ÐÅÒÅÍÅÎÎÙÈ × RAM. ÷Ï-×ÔÏÒÙÈ, ÓÏÈÒÁÎÅÎÉÅ ÈÁÒÄ×ÅÒÎÏÇÏ ËÏÎÔÅËÓÔÁ - Ô×ÏÅ ÄÅÌÏ, Á ÎÅ ÚÁÄÁÞÁ ËÏÍÐÉÌÌÑÔÏÒÁ. ÷-ÔÒÅÔØÉÈ, ÞÔÅÎÉÅ/ÚÁÐÉÓØ EERPOM ÎÅ ÁÔÏÍÍÁÒÎÏ, É ÐÒÅÒÙ×ÁÔØ ÅÇÏ ÎÅÌØÚÑ. VLV

"âÙÔØ ÞÅÓÔÎÙÍ - ÌÕÞÛÉÊ ÓÐÏÓÏ ÏÓÔÁ×ÁÔØÓÑ ÂÅÄÎÙÍ" (c) HÁÐÏÌÅÏÎ âÏÎÁÐÁÒÔ

Mon Apr 25 2005 21:03, Sergey Zabelin wrote to Vladimir Vassilevsky:

SZ> HÅ ×ÓÅ:-) HÏ ÔÅ, ËÏÔÏÒÙÅ × ÐÒÅÒÙ×ÁÎÉÉ ÐÏÒÔÑÔÓÑ ÎÅÑ×ÎÏ, ÂÙÌÏ SZ> ÂÙ ÎÅÐÌÏÈÏ É ÓÏÈÒÁÎÑÔØ.

HÕ ÚÄÒÁÓØÔÅ ÐÏÖÁÌÕÊÓÔÁ. ëÏÍÐÉÌÅÒ ÓÏÈÒÁÎÑÅÔ ÔÏ, ÞÅÍ ÐÏÌØÚÕÅÔÓÑ ÏÎ ÓÁÍ. ðÒÏ ÔÏ, ÞÅÍ ÐÏÌØÚÕÅÛØÓÑ ÔÙ, ÏÎ ÎÉÞÅÇÏ ÎÅ ÚÎÁÅÔ É ÚÎÁÔØ ÎÅ ÄÏÌÖÅÎ.

u8 ReadEEPROM(u16 address) { u8 utmp; while(EECR&0x02); _óLI(); EEARH = (u8)(address>>8); EEARL = (u8)address; EECR |= 0x01; utmp = EEDR; _SEI(); return utmp; }

void WriteEEPROM(u16 address, u8 value) { while(EECR&0x02); _CLI(); EEARH = (u8)(address>>8); EEARL = (u8)address; EEDR = value; EECR |= 0x04; EECR |= 0x02; _SEI(); } SZ> ñ ÖÅ ÉÈ Ñ×ÎÏ ÎÅ ×ÙÚÙ×ÁÀ, SZ> Ñ ÐÒÏÓÔÏ ÏÂÒÁÝÁÀÓØ Ë ÐÅÒÅÍÅÎÎÏÊ. HÁÐÒÉÍÅÒ

SZ> __eeprom char Value; SZ> __interrupt void Handler(void) SZ> { SZ> char a=Value*2+1; SZ> } SZ> ðÒÉÞÅÍ, × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÒÁÚÍÅÒÁ ÐÅÒÅÍÅÎÎÏÊ É ÍÏÄÅÌÉ ÐÁÍÑÔÉ SZ> ÔÕÔ ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎ ÏÄÉÎ ÉÚ ×ÏÓØÍÉ(!) ×ÁÒÉÁÎÔÏ× eeget - Ñ ÄÏÌÖÅÎ SZ> ÓÁÍ ÓÏÂÒÁÖÁÔØ, ËÁËÏÊ ÉÍÅÎÎÏ? á ÅÓÌÉ ÓÔÒÕËÔÕÒÁ ËÏÐÉÒÕÅÔÓÑ? SZ> ïÔ×ÙË Ñ ÕÖÅ ÓÔÏÌØËÏ ÄÕÍÁÔØ :-)

AVR EEPROM Ñ×ÌÑÅÔÓÑ ÎÅ ÐÁÍÑÔØÀ, Á ÆÁÊÌÏÍ. ðÒÏÂÌÅÍÙ ÏÔ ÔÏÇÏ, ÞÔÏ ÔÙ ÐÙÔÁÅÛØÓÑ ÉÓÐÏÌØÚÏ×ÁÔØ ÆÁÊÌ ËÁË ÐÁÍÑÔØ.

SZ> åÒÕÎÄÁ. öÅÌÁÔÅÌÅÎ - ÄÁ. HÏ ÎÅÏÂÈÏÄÉÍ, ÄÁ ÅÝÅ É "ÁÂÓÏÌÀÔÎÏ" - SZ> - Atmel ÐÒÏ ÜÔÏ ÕÍÁÌÞÉ×ÁÅÔ.

CÐÅÃÉÁÌØÎÏ ÄÌÑ ÔÅÂÑ × ÍÁÎÕÁÌÅ âïìøûéíé þåòHùíé âõë÷áíé ÎÁ ÞÉÓÔÏÍ ÒÕÓÓËÏÍ ÑÚÙËÅ ÎÁÐÉÓÁÎÏ:

" Caution: An interrupt between step 5 and step 6 will make the write cycle fail, since the EEPROM Master Write Enable will time-out. If an interrupt routine accessing the EEPROM is interrupting another EEPROM access, the EEAR or EEDR Register will be modified, causing the interrupted EEPROM access to fail. It is recommended to have the global interrupt flag cleared during the four last steps to avoid these problems."

SZ> äÁ É ×ÏÏÂÝÅ × ÍÉÒÅ, Á ÔÅÍ ÂÏÌÅÅ × ÏÂÌÁÓÔÉ SZ> embedded, ÍÁÌÏ ÒÅÛÅÎÉÊ, ËÏÔÏÒÙÅ ÂÙÌÉ ÂÙ ×ÅÒÎÙÍÉ "ÁÂÓÏÌÀÔÎÏ".

HÅ ÏÇÏÒÞÁÊÓÑ. HÅ ÏÄÉÎ ÔÙ ÔÁËÏÊ ÎÁ Ó×ÅÔÅ.

VLV

"âÙÔØ ÞÅÓÔÎÙÍ - ÌÕÞÛÉÊ ÓÐÏÓÏ ÏÓÔÁ×ÁÔØÓÑ ÂÅÄÎÙÍ" (c) HÁÐÏÌÅÏÎ âÏÎÁÐÁÒÔ

Hi!

"Vladimir Vassilevsky" ÓÏÏÂÝÉÌ × ÎÏ×ÏÓÔÑÈ ÓÌÅÄÕÀÝÅÅ:

îÅ ×ÓÅ:-) îÏ ÔÅ, ËÏÔÏÒÙÅ × ÐÒÅÒÙ×ÁÎÉÉ ÐÏÒÔÑÔÓÑ ÎÅÑ×ÎÏ, ÂÙÌÏ ÂÙ ÎÅÐÌÏÈÏ É ÓÏÈÒÁÎÑÔØ. íÏÖÎÏ ÂÙÌÏ ×ÅÄØ pragma ÄÌÑ ÔÁËÏÇÏ ÄÅÌÁ ÚÁ×ÅÓÔÉ, ÅÓÌÉ ËÏÍÕ-ÔÏ ÎÅ ÎÁÄÏ. ÷ÅÄØ SREG ÏÎÏ ÓÏÈÒÁÎÑÅÔ, ÈÏÔÑ ÔÏÖÅ ÍÏÇÌÏ ÂÙ ÎÁËÌÁÓÔØ - ÐÕÓÔØ ÐÒÏÇÒÁÍÍÉÓÔ ÚÁÂÏÔÉÔÓÑ.
äÁ ÍÏÖÅÔ ÐÒÅÄÌÏÖÉÛØ ×ÏÏÂÝÅ ÎÁ ÁÓÍÅ ÐÉÓÁÔØ? üÔÏ Ñ É ÓÁÍ ÍÏÇ ÂÙ ÄÏÇÁÄÁÔØÓÑ - Ó×ÏÉ ÆÕÎËÃÉÉ ÎÁÐÉÓÁÔØ :-) ñ ÖÅ ÉÈ Ñ×ÎÏ ÎÅ ×ÙÚÙ×ÁÀ, Ñ ÐÒÏÓÔÏ ÏÂÒÁÝÁÀÓØ Ë ÐÅÒÅÍÅÎÎÏÊ. îÁÐÒÉÍÅÒ

__eeprom char Value; __interrupt void Handler(void) { char a=Value*2+1; } ðÒÉÞÅÍ, × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÒÁÚÍÅÒÁ ÐÅÒÅÍÅÎÎÏÊ É ÍÏÄÅÌÉ ÐÁÍÑÔÉ ÔÕÔ ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎ ÏÄÉÎ ÉÚ ×ÏÓØÍÉ(!) ×ÁÒÉÁÎÔÏ× eeget - Ñ ÄÏÌÖÅÎ ÓÁÍ ÓÏÂÒÁÖÁÔØ, ËÁËÏÊ ÉÍÅÎÎÏ? á ÅÓÌÉ ÓÔÒÕËÔÕÒÁ ËÏÐÉÒÕÅÔÓÑ? ïÔ×ÙË Ñ ÕÖÅ ÓÔÏÌØËÏ ÄÕÍÁÔØ :-) óÏÂÓ-ÎÏ, É ÐÅÒÅÐÉÓÙ×ÁÔØ ÉÈ ÎÅÔ ÎÅÏÂÈÏÄÉÍÏÓÔÉ - ÍÏÖÎÏ ×ÒÕÞÎÕÀ ÐÒÅÒÙ×ÁÎÉÑ ÄÉÓÁÂÌÉÔØ ÐÒÉ ÏÂÒÁÝÅÎÉÑÈ, ÎÕ ÉÌÉ ÏÂÅÒÔËÉ ÓÄÅÌÁÔØ, ÎÏ ÏÐÑÔØ ÖÅ - 8 ÛÔÕË ÄÌÑ ÞÔÅÎÉÑ É 8 ÄÌÑ ÚÁÐÉÓÉ.

åÒÕÎÄÁ. öÅÌÁÔÅÌÅÎ - ÄÁ. îÏ ÎÅÏÂÈÏÄÉÍ, ÄÁ ÅÝÅ É "ÁÂÓÏÌÀÔÎÏ" -

- Atmel ÐÒÏ ÜÔÏ ÕÍÁÌÞÉ×ÁÅÔ. äÁ É ×ÏÏÂÝÅ × ÍÉÒÅ, Á ÔÅÍ ÂÏÌÅÅ × ÏÂÌÁÓÔÉ embedded, ÍÁÌÏ ÒÅÛÅÎÉÊ, ËÏÔÏÒÙÅ ÂÙÌÉ ÂÙ ×ÅÒÎÙÍÉ "ÁÂÓÏÌÀÔÎÏ". á × ÄÁÎÏÍ ÓÌÕÞÁÅ Ñ ÕÖÅ ÐÒÏ×ÅÒÉÌ - ÄÏÓÔÁÔÏÞÎÏ ÁËËÕÒÁÔÎÏ ËÏÎÔÅËÓÔ ÓÏÈÒÁÎÉÔØ É ×ÏÓÔÁÎÏ×ÉÔØ.

ñ ÄÒÕÇÉÍ ÐÕÔÅÍ ÐÏÛÅÌ - ÓÏÈÒÁÎÅÎÉÅ/×ÏÓÔÁÎÏ×ÌÅÎÉÅ ËÏÎÔÅËÓÔÁ ÓÄÅÌÁÌ, ÜÔÏ ÐÒÏÝÅ, ÞÅÍ ×ÓÀ ÐÒÏÇÒÁÍÍÕ ÐÅÒÅÌÏÐÁÞÉ×ÁÔØ.
îÕ ÜÔÏ ËÁË ÓËÁÚÁÔØ. íÎÅ, ÎÁÐÒÉÍÅÒ, ËÁÖÅÔÓÑ, ÞÔÏ ÇÌÕÐÏ ÏÔ×ÅÞÁÔØ ÎÁ ×ÏÐÒÏÓ, ËÏÔÏÒÙÊ ÎÅ ÚÁÄÁ×ÁÌÓÑ :-). óÐÁÓÉÂÏ ÚÁ ÃÅÎÙÅ ÓÏ×ÅÔÙ, ÓÁÍ ÂÙ Ñ ÄÏ ÜÔÏÇÏ ÎÉ ÚÁ ÞÔÏ ÎÅ ÄÏÄÕÍÁÌÓÑ :-) îÏ ×ÏÐÒÏÓ ÂÙÌ ÎÅ Ï ÔÏÍ, ËÁË ÎÁÄÏ ÐÉÓÁÔØ ÐÒÏÇÒÁÍÍÙ, Á Ï ËÏÍÐÉÌÑÔÏÒÅ. ÷ÐÒÏÞÅÍ, × ÇÌÁ×ÎÏÍ ÔÙ ÐÒÁ× -

- ÎÁ×ÅÒÎÏÅ Ñ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÓÌÉÛËÏÍ ÍÎÏÇÏ ÈÏÞÕ ÏÔ ËÏÍÐÉÌÑÔÏÒÁ, ÔÁË ÞÔÏ ×ÏÐÒÏÓ ÓÎÉÍÁÅÔÓÑ.

ðÒÉÍÉÔÅ Õ×ÅÒÅÎÉÑ × ÓÏ×ÅÒÛÅÎÎÅÊÛÅÍ Ë ÷ÁÍ ÐÏÞÔÅÎÉÉ
ðÒÉ×ÅÔ Sergey! ðÏÎ áÐp 25 2005 17:50, Sergey Zabelin -> All:

SZ> ôÕÔ ÏÂÎÁÒÕÖÉÌ, ÞÔÏ IAR C for AVR 2.28 ÐÒÉ ×ÈÏÄÅ × ÐÒÅÒÙ×ÁÎÉÅ SZ> ÎÅ ÓÏÈÒÁÎÑÅÔ EEAR, EEDR, ÅÓÌÉ ÉÈ ÐÏÒÔÉÔ. ðÏÓÍÏÔÒÅÌ SZ> ÉÓÈÏÄÎÉËÉ __eeput, __eeget - ÔÁÍ ÐÒÉ ÚÁÐÉÓÉ É ÞÔÅÎÉÉ EEPROM SZ> ÚÁÐÒÅÝÅÎÉÑ ÐÒÅÒÙ×ÁÎÉÑ ÎÅÔ. ðÏÌÕÞÁÅÔÓÑ, ÞÔÏ × ÐÒÅÒÙ×ÁÎÉÉ SZ> ÐÏÌØÚÏ×ÁÔØÓÑ ÐÅÒÅÍÅÎÙÍÉ, ÏÂßÑ×ÌÅÎÎÙÍÉ __eeprom, ÎÅÌØÚÑ, ÎÕ SZ> ÉÌÉ ×ÒÕÞÎÕÀ ÉÚ×ÒÁÝÁÔØÓÑ Ó ÓÏÈÒÁÎÅÎÉÅÍ ËÏÎÔÅËÓÔÁ. SZ> äÏ×ÏÌØÎÏ ËÏ×ÁÒÎÏ. üÔÏ ÂÁÇ ÉÌÉ ÆÉÞÁ? Protecting the eeprom write mechanism A typical example of when it can be necessary to use the __monitor keyword is when protecting the eeprom write mechanism, which can be used from two threads (for example, main code and interrupts). Servicing an interrupt during an EEPROM write sequence can in many cases corrupt the written data.

é ÐÕÎËÔ "PROTECTING SIMULTANEOUSLY ACCESSED VARIABLES" ÔÏÖÅ ÐÏÞÉÔÁÊ, ÞÔÏ ÎÅ ÏÖÉÄÁÔØ ÌÉÛÎÅÇÏ ÏÔ ËÏÍÐÉÌÑÔÏpÁ. ëÓÔÁÔÉ, ÓÏÈpÁÎÅÎÉÅ ËÏÎÔÅËÓÔÁ ÎÅ ÐÏÍÏÖÅÔ, ÐpÅpÙ×ÁÎÉÑ ÎÁ ×pÅÍÑ ÄÏÓÔÕÐÁ Ë ÅÅÐpÏÍÕ ÚÁÐpÅÝÁÊ.

HÁ ÜÔÏÍ ×ÓÅ, ÐÏËÁ. Anton Abrosimov. ... [Abort] [Retry] [Ignore]

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required