MPLAB C18 EEPROM initialization

Sep 02, 2009 358 Replies

Hi Dmitry!

24 Sep 09 08:54, Dmitry Orlov wrote to Slav Matveev:

NS>>> ÜÔÏ ÎÅÓÔÅËÏ×ÙÅ (ÓÔÁÔÉÞÅÓËÉÅ É ÇÌÏÂÁÌØÎÙÅ) ÐÅÒÅÍÅÎÎÙÅ, NS>>> ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÎÎÙÅ ÎỌ̃Í.

SM>> ÜÔÏ ÄÏÌÖÎÏ ÂÙÔØ × ÓÔÁÒÔÁÐÅ, ËÏÔÏÒÙÊ ÐÏÄËÌÀÞÁÅÔÓÑ ÉÚ SM>> ÂÉÂÌÉÏÔÅËÉ?

DO> HÕ ÄÁ, Á ÇÄÅ ÖÅ ÜÔÏÍÕ ÅÝÅ ÂÙÔØ?

ÄÌÑ ÜÔÏÇÏ ÓÔÁÒÔÁÐ ÄÏÌÖÅÎ ÚÎÁÔØ ÒÁÚÍÅÒ ÓÅËÃÉÉ .bss ËÁË?

Slav.

Hi Nickita!

24 Sep 09 08:27, Nickita A Startcev wrote to Slav Matveev:

SM>> ÜÔÏ ÄÏÌÖÎÏ ÂÙÔØ × ÓÔÁÒÔÁÐÅ, ËÏÔÏÒÙÊ ÐÏÄËÌÀÞÁÅÔÓÑ ÉÚ SM>> ÂÉÂÌÉÏÔÅËÉ?

NS> áÇÁ. ÉÍÑ ÓÅËÃÉÉ Ó BSS ÉÚ×ÅÓÔÎÏ, ÒÁÚÍÅÒÙ - ÓÔÁÎÕÔ ÉÚ×ÅÓÔÎÙ ÐÏÓÌÅ NS> ÌÉÎËÏ×ËÉ.

É ËÁË Ñ ÉÚ main, ÎÁÐÒÉÍÅÒ, ÍÏÇÕÔ ÕÚÎÁÔØ ÒÁÚÍÅÒÙ?

Slav.

Hello, Slav! You wrote to Nickita A Startcev on Thu, 24 Sep 2009 10:34:07 +0400:

SM>>> ÜÔÏ ÄÏÌÖÎÏ ÂÙÔØ × ÓÔÁÒÔÁÐÅ, ËÏÔÏÒÙÊ ÐÏÄËÌÀÞÁÅÔÓÑ ÉÚ SM>>> ÂÉÂÌÉÏÔÅËÉ?

NS>> áÇÁ. ÉÍÑ ÓÅËÃÉÉ Ó BSS ÉÚ×ÅÓÔÎÏ, ÒÁÚÍÅÒÙ - ÓÔÁÎÕÔ ÉÚ×ÅÓÔÎÙ ÐÏÓÌÅ NS>> ÌÉÎËÏ×ËÉ.

SM> É ËÁË Ñ ÉÚ main, ÎÁÐÒÉÍÅÒ, ÍÏÇÕÔ ÕÚÎÁÔØ ÒÁÚÍÅÒÙ?

ìÉÎËÅÒ ÏÂÙÞÎÏ ÜËÓÐÏÒÔÉÒÕÅÔ ÓÏÏÔ×ÅÓÔ×ÕÀÝÉÅ ËÏÎÓÔÁÎÔÙ-ÐÅÒÅÍÅÎÎÙÅ, Á ÎÁ ÜÔÁÐÅ ËÏÍÐÉÌÑÃÉÉ ÓÔÁÒÔÁÐÁ ÏÎÉ ÎÅÉÚ×ÅÓÔÎÙ.

WBR, AVB

Hello, Slav Matveev! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 24 Sep

2009 10:16:19 +0400:

NS>>>> это нестековые (статические и глобальные) переменные, NS>>>> инициализированные нулём.

SM>>> это должно быть в стартапе, который подключается из SM>>> библиотеки?

DO>> Hу да, а где же этому еще быть?

SM> для этого стартап должен знать размер секции .bss как?

А какие проблемы ему об этом знать?

dima

formatting link

ðÒÉ×ÅÔ, Slav Matveev!

24.09.2009 11:16 ÷Ù ÐÉÓÁÌÉ:

ïÎ ÍÏÖÅÔ ÅÇÏ ×ÙÞÉÓÌÉÔØ, ×ÙÞÔÑ ÉÚ ÁÄÒÅÓÁ ËÏÎÃÁ ÁÄÒÅÓ ÎÁÞÁÌÁ. (ÐÒÅÄ×ÉÄÑ ÓÌÅÄÕÀÝÉÊ ×ÏÐÒÏÓ - ÁÄÒÅÓÁ ÜÔÉ ÄÁÓÔ ÌÉÎËÅÒ.)
ðÒÉ×ÅÔ, Slav !

24 Sep 09 , 11:34 Slav Matveev ÐÉÓÁÌ Ë Nickita A Startcev:

SM>>> ÜÔÏ ÄÏÌÖÎÏ ÂÙÔØ × ÓÔÁÒÔÁÐÅ, ËÏÔÏÒÙÊ ÐÏÄËÌÀÞÁÅÔÓÑ ÉÚ SM>>> ÂÉÂÌÉÏÔÅËÉ?

NS>> áÇÁ. ÉÍÑ ÓÅËÃÉÉ Ó BSS ÉÚ×ÅÓÔÎÏ, ÒÁÚÍÅÒÙ - ÓÔÁÎÕÔ ÉÚ×ÅÓÔÎÙ ÐÏÓÌÅ NS>> ÌÉÎËÏ×ËÉ.

SM> É ËÁË Ñ ÉÚ main, ÎÁÐÒÉÍÅÒ, ÍÏÇÕÔ ÕÚÎÁÔØ ÒÁÚÍÅÒÙ?

ËÏÎÓÔÁÎÔÁ ÒÁÓÓÞÉÔÙ×ÁÅÔÓÑ ÎÁ ÜÔÁÐÅ ËÏÍÐÉÌÑÃÉÉ. ôÏÞÎÅÅ, × ÐÒÏÃÅÓÓÅ ÌÉÎËÏ×ËÉ. HÁÄÏ ÓÍÏÔÒÅÔØ, ËÁËÉÅ ÉÍÅÎÎÏ ÓÅÇÍÅÎÔÙ ÅÓÔØ Õ ÄÁÎÎÏÇÏ ËÏÍÐÉÌÑÔÏÒÁ É ÇÄÅ ÚÁÄÁÅÔÓÑ ÉÈ ÐÏÒÑÄÏË ÓÌÅÄÏ×ÁÎÉÑ. äÌÑ ÏÐÅÎ×ÁÔËÏÍÁ ÎÁ È86-ÄÏÓ-ÔÉÎÉ ÜÔÏ ÂÕÄÅÔ ÐÒÉÍÅÒÎÏ ÔÁË:

======entry.asm==== DGROUP group _TEXT,_DATA,_BSS

_DATA segment word public 'DATA' _DATA ends

_BSS segment word public 'BSS' _BSS ends

_TEXT segment word public 'CODE' assume cs:_TEXT,ds:DGROUP

extrn main_ : near extrn _edata : byte ; end of DATA (start of BSS) extrn _end : byte ; end of BSS (start of STACK)

org 100h

public start

start: ;xor sp,sp push cs pop ax mov ds,ax mov es,ax mov bp,sp ;?? mov cx,offset DGROUP:_end ; End of _BSS mov di,offset DGROUP:_edata ; Start of _BSS sub cx,di shr cx,1 xor ax,ax rep stosw call main_ retf

_TEXT ends

end start

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... HÅ ÓÏÔ×ÏÒÉ ÓÅÂÅ menuconfig

Hi Alex!

24 Sep 09 19:08, Alex Mogilnikov wrote to Slav Matveev:

AM> ïÎ ÍÏÖÅÔ ÅÇÏ ×ÙÞÉÓÌÉÔØ, ×ÙÞÔÑ ÉÚ ÁÄÒÅÓÁ ËÏÎÃÁ ÁÄÒÅÓ ÎÁÞÁÌÁ. AM> (ÐÒÅÄ×ÉÄÑ ÓÌÅÄÕÀÝÉÊ ×ÏÐÒÏÓ - ÁÄÒÅÓÁ ÜÔÉ ÄÁÓÔ ÌÉÎËÅÒ.)

ÍÅÓÔÏ ×ÙÄÅÌÑÅÔÓÑ ÄÉÎÁÍÉÞÅÓËÉ?

Slav.

Hi Nickita!

24 Sep 09 19:48, Nickita A Startcev wrote to Slav Matveev:

NS> ÌÉÎËÏ×ËÉ. HÁÄÏ ÓÍÏÔÒÅÔØ, ËÁËÉÅ ÉÍÅÎÎÏ ÓÅÇÍÅÎÔÙ ÅÓÔØ Õ ÄÁÎÎÏÇÏ NS> ËÏÍÐÉÌÑÔÏÒÁ É ÇÄÅ ÚÁÄÁÅÔÓÑ ÉÈ ÐÏÒÑÄÏË ÓÌÅÄÏ×ÁÎÉÑ.

NS> äÌÑ ÏÐÅÎ×ÁÔËÏÍÁ ÎÁ È86-ÄÏÓ-ÔÉÎÉ ÜÔÏ ÂÕÄÅÔ ÐÒÉÍÅÒÎÏ ÔÁË:

ÎÅ ÎÁÄÏ x86, ÏÎÏ Õ ÍÅÎÑ ÔÏÛÎÏÔÕ ×ÙÚÙ×ÁÅÔ. :)

NS> extrn _edata : byte ; end of DATA (start of BSS) NS> extrn _end : byte ; end of BSS (start of STACK)

ÐÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ ÞÔÏ ÜÔÏ ÏÐÒÅÄÅÌÉÔ ÌÉÎËÅÒ?

Slav.

Hi Alexey!

24 Sep 09 13:01, Alexey V Bugrov wrote to Slav Matveev:

SM>> É ËÁË Ñ ÉÚ main, ÎÁÐÒÉÍÅÒ, ÍÏÇÕÔ ÕÚÎÁÔØ ÒÁÚÍÅÒÙ?

AB> ìÉÎËÅÒ ÏÂÙÞÎÏ ÜËÓÐÏÒÔÉÒÕÅÔ ÓÏÏÔ×ÅÓÔ×ÕÀÝÉÅ ËÏÎÓÔÁÎÔÙ-ÐÅÒÅÍÅÎÎÙÅ, Á ÎÁ AB> ÜÔÁÐÅ ËÏÍÐÉÌÑÃÉÉ ÓÔÁÒÔÁÐÁ ÏÎÉ ÎÅÉÚ×ÅÓÔÎÙ.

Ñ, ×ÏÏÂÝÅÍ, ÔÁË É ÐÏÄÕÍÁÌ. ÎÏ × ÍÏÅÍ ÓÌÕÞÁÅ ÔÒÅÂÕÀÝÉÈ ÐÒÉÎÕÄÉÔÅÌØÎÏÊ ÏÞÉÓÔËÉ ÐÅÒÅÍÅÎÎÙÈ ÎÅ ÂÙÌÏ, ÞÔÏ ÎÁÄÏ ÂÙÌÏ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ, ×ÓÅ ÒÁ×ÎÏ × .data É ÚÁÐÏÌÎÑÀÔÓÑ ÐÒÉ ÌÉÎËÏ×ËÅ.

Slav.

Hi Dmitry!

25 Sep 09 00:06, Dmitry Orlov wrote to Slav Matveev:

SM>> ÍÅÓÔÏ ×ÙÄÅÌÑÅÔÓÑ ÄÉÎÁÍÉÞÅÓËÉ?

DO> óÔÁÔÉÞÅÓËÉ ËÏÎÅÞÎÏ.

ÔÏÇÄÁ ÞÔÏ ÂÙ ÅÅ ÌÉÎËÅÒÏÍ É ÎÅ ÐÒÏÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÎÕÖÎÏÊ ËÏÎÓÔÁÎÔÏÊ? ÐÏÞÅÍÕ ÏÂÑÚÁÔÅÌØÎÏ × ÒÁÎÔÁÊÍÅ?

Slav.

Hi Dmitry!

25 Sep 09 00:15, Dmitry Orlov wrote to Slav Matveev:

SM>> Ñ, ×ÏÏÂÝÅÍ, ÔÁË É ÐÏÄÕÍÁÌ. ÎÏ × ÍÏÅÍ ÓÌÕÞÁÅ ÔÒÅÂÕÀÝÉÈ SM>> ÐÒÉÎÕÄÉÔÅÌØÎÏÊ ÏÞÉÓÔËÉ ÐÅÒÅÍÅÎÎÙÈ ÎÅ ÂÙÌÏ, ÞÔÏ ÎÁÄÏ ÂÙÌÏ

DO> üÔÏ ÔÒÅÂÏ×ÁÎÉÅ ÓÔÁÎÄÁÒÔÁ. ÐÏÄÏÚÒÅ×ÁÀ ÞÔÏ ÔÏÔ ËÏÍÐÉÌÑÔÏÒ ÂÙÌ ÎÅ × ËÕÒÓÅ ÄÁÖÅ ansi c.

.psect .data. f: .word 0 .even g: .blkb 24 .even .psect .prog. main:

ÉÎÉÃÉÁÌÉÚÁÃÉÑ ÐÅÒÅÍÅÎÎÏÊ int f × ÓÅËÃÉÉ ÄÁÔÁ É ÂÕÄÅÔ ×ÙÐÏÌÎÅÎÁ ÐÒÉ ÌÉÎËÏ×ËÅ. ÎÕ É, ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ, ÐÒÉ ÚÁÇÒÕÚËÅ ×ÙÐÏÌÎÑÅÍÏÇÏ ÆÁÊÌÁ × ÐÁÍÑÔØ.

DO> ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï persistent × ÏÐÉÓÁÎÉÉ ÐÅÒÅÍÅÎÎÏÊ, ÞÔÏ ËÁË ÒÁÚ É DO> ÐÒÅÐÑÔÓÔ×ÕÅÔ ÅÅ ÏÂÎÕÌÅÎÉÀ. þÔÏÂÙ ÐÏÓÌÅ ÒÅÓÅÔÁ, ÎÁÐÒÉÍÅÒ ÐÏ DO> ÓÒÁÂÁÔÙ×ÁÎÉÀ whatchdog'Á, ÚÎÁÞÅÎÉÑ ÐÅÒÅÍÅÎÎÙÈ ÎÅ ÔÅÒÑÌÉÓØ.

ÌÉÞÎÏ Ñ ÐÒÏÔÉ×ÎÉË ÔÁËÉÈ ÐÒÉÎÕÄÉÔÅÌØÎÙÈ ÉÎÉÃÉÁÌÉÚÁÃÉÊ.

Slav.

Hello, Slav Matveev! You wrote in conference fido7.ru.embedded to Alex Mogilnikov on Thu, 24 Sep

2009 20:37:11 +0400:

AM>> Он может его вычислить, вычтя из адреса конца адрес начала. AM>> (предвидя следующий вопрос - адреса эти даст линкер.)

SM> место выделяется динамически?

Статически конечно.

dima

formatting link

Hello, Slav Matveev! You wrote in conference fido7.ru.embedded to Alexey V Bugrov on Thu, 24 Sep

2009 20:42:42 +0400:

SM>>> и как я из main, например, могут узнать размеры?

AB>> Линкер обычно экспортирует соотвествующие константы-переменные, а AB>> на этапе компиляции стартапа они неизвестны.

SM> я, вообщем, так и подумал. но в моем случае требующих SM> принудительной очистки переменных не было, что надо было

Это требование стандарта. Которое тем или иным способом обходится в embedded компиляторах. Кстати, как это делается в subj надо бы разобраться, был бы признателен за совет (небось опять через линкерный скрипт и особый сегмент), а вот в HiTech введено дополнительное ключевое слово persistent в описании переменной, что как раз и препятствует ее обнулению. Чтобы после ресета, например по срабатыванию whatchdog'а, значения переменных не терялись.

SM> инициализировать, все равно в .data и заполняются при линковке.

Как раз это в том embedded, где код прямо из rom выполняется, тоже стартап делает, копируя из rom в ram инициализированные данные.

dima

formatting link

ðÒÉ×ÅÔ, Slav !

24 Sep 09 , 21:39 Slav Matveev ÐÉÓÁÌ Ë Nickita A Startcev:

NS>> ÌÉÎËÏ×ËÉ. HÁÄÏ ÓÍÏÔÒÅÔØ, ËÁËÉÅ ÉÍÅÎÎÏ ÓÅÇÍÅÎÔÙ ÅÓÔØ Õ ÄÁÎÎÏÇÏ NS>> ËÏÍÐÉÌÑÔÏÒÁ É ÇÄÅ ÚÁÄÁÅÔÓÑ ÉÈ ÐÏÒÑÄÏË ÓÌÅÄÏ×ÁÎÉÑ.

NS>> äÌÑ ÏÐÅÎ×ÁÔËÏÍÁ ÎÁ È86-ÄÏÓ-ÔÉÎÉ ÜÔÏ ÂÕÄÅÔ ÐÒÉÍÅÒÎÏ ÔÁË:

SM> ÎÅ ÎÁÄÏ x86, ÏÎÏ Õ ÍÅÎÑ ÔÏÛÎÏÔÕ ×ÙÚÙ×ÁÅÔ. :)

é ÎÅ ÔÏÌØËÏ Õ ÔÅÂÑ. :)

NS>> extrn _edata : byte ; end of DATA (start of BSS) NS>> extrn _end : byte ; end of BSS (start of STACK)

SM> ÐÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ ÞÔÏ ÜÔÏ ÏÐÒÅÄÅÌÉÔ ÌÉÎËÅÒ?

áÇÁ. ôÏÌØËÏ Õ ËÁÖÄÏÇÏ ËÏÍÐÉÌÑÔÏÒÁ ÜÔÉ ÉÍÅÎÁ ÞÕÔÏË ÄÒÕÇÉÅ, ÎÁÄÏ × ÄÏËÕÍÅÎÔÁÃÉÀ ÓÍÏÔÒÅÔØ.

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... ïÈÒÁÎÑÔØ ÚÏÌÏÔÏÊ "ËÏÒÅÎØ" ÏÔ "óÏÓÕÝÉÈ HÏÞÎÙÈ âÁÂÏÞÅË"?!

ðÒÉ×ÅÔ, Slav Matveev!

25.09.2009 00:41 ÷Ù ÐÉÓÁÌÉ:

á ËÁË ÍÏÖÎÏ ÐÒÏÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÏÂÌÁÓÔØ _ïúõ_ ÎÅ × ÒÁÎÔÁÊÍÅ? ðÒÉ ×ËÌÀÞÅÎÉÉ ÐÉÔÁÎÉÑ ïúõ ÓÏÄÅÒÖÉÔ ÍÕÓÏÒ, É ÎÉËÁËÏÊ ÌÉÎËÅÒ ÎÅ × ÓÉÌÁÈ ÉÚÍÅÎÉÔØ ÜÔÏÇÏ ÆÁËÔÁ. :)

Hi Alex!

25 Sep 09 13:12, Alex Mogilnikov wrote to Slav Matveev:

AM> á ËÁË ÍÏÖÎÏ ÐÒÏÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÏÂÌÁÓÔØ _ïúõ_ ÎÅ × ÒÁÎÔÁÊÍÅ? ðÒÉ AM> ×ËÌÀÞÅÎÉÉ ÐÉÔÁÎÉÑ ïúõ ÓÏÄÅÒÖÉÔ ÍÕÓÏÒ, É ÎÉËÁËÏÊ ÌÉÎËÅÒ ÎÅ × ÓÉÌÁÈ AM> ÉÚÍÅÎÉÔØ ÜÔÏÇÏ ÆÁËÔÁ. :)

ÔÏÞÎÏ ÔÁËÖÅ ËÁË ÉÎÉÃÉÁÌÉÚÉÒÕÀÔÓÑ ÓÅËÃÉÉ data/code. :)

Slav.

Hello, Slav Matveev! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 24 Sep

2009 23:41:02 +0400:

SM>>> место выделяется динамически?

DO>> Статически конечно.

SM> тогда что бы ее линкером и не проинициализировать нужной SM> константой? почему обязательно в рантайме?

Для загружаемых в ОЗУ программ, можно и так, хотя заполненный нулями файл выглядит странно. А для embedded, где код из rom выполняется - только в рантайме.

dima

formatting link

Hello, Slav Matveev! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 24 Sep

2009 23:48:03 +0400:

SM>>> я, вообщем, так и подумал. но в моем случае требующих SM>>> принудительной очистки переменных не было, что надо было

DO>> Это требование стандарта. SM> подозреваю что тот компилятор был не в курсе даже ansi c.

А с какого языка компилятор-то был?

SM> инициализация переменной int f в секции дата и будет SM> выполнена при линковке. ну и, соответственно, при загрузке SM> выполняемого файла в память.

В мелком embedded этого не происходит.

DO>> ключевое слово persistent в описании переменной, что как раз и DO>> препятствует ее обнулению. Чтобы после ресета, например по DO>> срабатыванию whatchdog'а, значения переменных не терялись.

SM> лично я противник таких принудительных инициализаций.

В каком-то компиляторе, кажется IAR для HC11, я просто из стартапа выбросил этот код. Hе помню уж был ли там штатный способ это сделать.

dima

formatting link

Hello, Slav Matveev! You wrote in conference fido7.ru.embedded to Alex Mogilnikov on Fri, 25 Sep

2009 13:02:00 +0400:

AM>> А как можно проинициализировать область _ОЗУ_ не в рантайме? При AM>> включении питания ОЗУ содержит мусор, и никакой линкер не в силах AM>> изменить этого факта. :)

SM> точно также как инициализируются секции data/code. :)

А они по-разному инициализируются. Код и конатанты - программатором, а дата - в рантайме стартапом.

dima

formatting link

Hello, Dimmy! You wrote to Alexander Torres on Tue, 15 Sep 2009 15:18:03 +0400:

DT> Hello Alexander.

DT> Tue Sep 15 2009 12:28, Alexander Torres wrote to me:

DT>>> ÷ÉÄÉÍÏ, ÎÁÄÏ ÔÁË:

DT>>> #pragma constseg=INFOA char const Param[4]={"123"};

AT>> èÒÅÎÁ, ÎÅ ÒÁÂÏÔÁÅÔ. :(

DT> ôÁÄÙ ÎÅ ÚÎÁÀ. :) HÅ ÂÙÌÏ ÔÁËÏÊ ÚÁÄÁÞÉ... Á ÒÁÚÍÅÝÅÎÉÅ ËÏÎÓÔÁÎÔ ×Ï DT> ÆÌÅÛËÅ ÚÁÄÁÌ?

ëÁË ?

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required