__eeprom & 90S8515

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
                           Здравствуй, All!

Подскажите почему в IAR 2.28 при попытке описать переменную (язы С), которая
находится в eeprom микроконтроллера это описание никак не отражается на map
файле проекта? Хотя проект компилится без подозрительных надписей.
Имеем __eeprom __no_init float discard;
Как я понимаю map файл на это в самом конце должен ответить чтото примерно
  4 bytes of XDATA memory
однако такой надписи не наблюдается. Терзают меня смутные сомнения что я что то
не так описываю :( Или эта переменная не туда падает?
Пробовал убирать __no_init не помогает.
P.S. В железе я еще не проверял но все равно несколько неприятно :(

                  С уважением, Олег.

... В чем заключается мультизадачнось WINDOWS? Работает и глючит одновременно!

__eeprom & 90S8515
       Доброго здоровья, Oleg!

30 Oct 03 11:36, Oleg Dolgov написал для All:

 OD> Подскажите почему в IAR 2.28 при попытке описать переменную (язы С),
 OD> которая
 OD> находится в eeprom микроконтроллера это описание никак не отражается на
 OD> map
 OD> файле проекта? Хотя проект компилится без подозрительных надписей. Имеем
 OD> __eeprom __no_init float discard; Как я понимаю map файл на это в самом
 OD> конце
 OD> должен ответить чтото примерно 4 bytes of XDATA memory однако такой
 OD> надписи не
 OD> наблюдается. Терзают меня смутные сомнения что я что то не так описываю :(
 OD> Или
 OD> эта переменная не туда падает? Пробовал убирать __no_init не помогает.
 OD> P.S. В
 OD> железе я еще не проверял но все равно несколько неприятно :(

из даташита

--eeprom_size Specifies the EEPROM size.
SYNTAX
--eeprom_size=N
DESCRIPTION
Use this option to enable the __eeprom extended keyword by specifying
the size of the inbuilt EEPROM. The value N can be 0-65536.
Note: To use the __eeprom extended keyword, the language extensions
must be enabled. For additional information, see -e, page 95, and
Language, page 138.

  ты средой компиляешь или комстрокой?
  в среде я глянул, галка Utilize EEPROM включена и закрыта. и у меня все
компиляется нормально, как положено.

    WBR, Сергей.                                     ICQ: 101347299


Re: __eeprom & 90S8515
                           Здравствуй, Sergei!

 OD>> подозрительных надписей. Имеем __eeprom __no_init float discard; Как
 OD>> я понимаю map файл на это в самом конце должен ответить чтото
 OD>> примерно 4 bytes of XDATA memory однако такой надписи не
 OD>> наблюдается. Терзают меня
 ST>   ты средой компиляешь или комстрокой?

средой

Глюк я отловил чисто случайно. :)) Облажался как обычно. Описал в eeprom
переменные и бросился смотеть в какие физические адреса они попадают.
Естественно в мап файле про них ничего нет. Тут я заволновался письмо
предыдущее отгрохал. Оказалось что если их описываешь но не используешь то они
ессно компилятором пропускаются. :)) аписал a=b+c и все появилось :))

Еще хочу задать вопрос про начальную инициализацию коэффициентов в eeprom.
Когда я первый раз написал прошивку которая из еепром берет параметры для
расчетов то прога просто или повисла или там ресет постоянный был она вобщем не
работала т.к. в еепром пусто было. Хотелось бы как нибудь сгенерить прошивку и
для eeprom с предварительными значениями коэффициентов. А то если выбираешь
выходной формат intel-standart то код генериться но eeprom ессно отсутствует.
Хотелось бы как нибудь отдельным файлом и eeprom c предварительными значениями
получить а затем с клавиатурки подправить их под конкретную ситуацию.
Я описываю к примеру 3 коэффициента
__eeprom _no_init float a,b,c; но они в дальнейшем должны принимать участие в
расчетах и правится с клавиатуры. Возникает вопрос как сгенерить прошивку для
eeprom с некоторыми предварительными значениями которые потом можно с
клавиатуры подправить. Когда прорамма должна будет стартовать при включении то
она должна подцепить хотя бы примерные значения этих коэффициентов. Затем я их
с клавиатурки подправлю прямо в eeprom.
Хотелось бы к примеру при старте сразу иметь a=0.045 b=0.89 c=0.342
Руками меня пока ломает во внутреннее представление перековыривать эти числа и
прошивку ручками набивать в HEX редакторе. :)) наверное есть какой то
предусмотренный средой способ. :))) ???

                  С уважением, Олег.

... В чем заключается мультизадачнось WINDOWS? Работает и глючит одновременно!

Re: __eeprom & 90S8515
Thu Oct 30 2003 17:57, Oleg Dolgov wrote to Sergei Tuchinski:


 OD> Еще хочу задать вопрос про начальную инициализацию коэффициентов в
 OD> eeprom.

 По ресету программа проверяет коэффициенты на валидность. Eсли они не
 в допустимом диапазоне, записываются дефолтовые значения.
 Можно еще завести в EEPROM переменную, значение которой должно быть
 0xAA55, если EEPROM инициализирован. Если нет - инициализируем
 все переменные по дефолту.

 VLV

"A народ-то над ним насмеялся: - дурачина ты, простофиля..." (c) Пушкин


__eeprom & 90S8515
       Доброго здоровья, Oleg!

30 Oct 03 17:57, Oleg Dolgov написал для Sergei Tuchinski:

 OD> Еще хочу задать вопрос про начальную инициализацию коэффициентов в eeprom.
 OD> Когда я первый раз написал прошивку которая из еепром берет параметры для
 OD> расчетов то прога просто или повисла или там ресет постоянный был она
 OD> вобщем
 OD> не работала т.к. в еепром пусто было. Хотелось бы как нибудь сгенерить
 OD> прошивку и для eeprom с предварительными значениями коэффициентов. А то
 OD> если
 OD> выбираешь выходной формат intel-standart то код генериться но eeprom ессно
 OD> отсутствует. Хотелось бы как нибудь отдельным файлом и eeprom c
 OD> предварительными значениями получить а затем с клавиатурки подправить их
 OD> под
 OD> конкретную ситуацию. Я описываю к примеру 3 коэффициента __eeprom _no_init
 OD> float a,b,c; но они в дальнейшем должны принимать участие в расчетах и
 OD> правится с клавиатуры. Возникает вопрос как сгенерить прошивку для eeprom
 OD> с
 OD> некоторыми предварительными значениями которые потом можно с клавиатуры
 OD> подправить. Когда прорамма должна будет стартовать при включении то она
 OD> должна
 OD> подцепить хотя бы примерные значения этих коэффициентов. Затем я их с
 OD> клавиатурки подправлю прямо в eeprom. Хотелось бы к примеру при старте
 OD> сразу
 OD> иметь a=0.045 b=0.89 c=0.342 Руками меня пока ломает во внутреннее
 OD> представление перековыривать эти числа и прошивку ручками набивать в HEX
 OD> редакторе. :)) наверное есть какой то предусмотренный средой способ. :)))
 OD> ???

  читайте доки, они рулез (с)
  способ, конечно, есть, но предусмотренный не средой, а компилятором. Для
начала, тебе следует убрать префикс no_init из описания еепром-переменных,
больше того, если ты хочешь инициализировать их какими-то своими значениями,
тебе надо написать нечто типа

__eeprom float a = 0.045, b = 0.89, c = 0.342;

  после того, как ты это сделаешь, ты обнаружишь, что твой проект перестал
компилиться, линкер выбрасывает сообщение о том, что выбран неправильный формат
выходного файла:

Error[e133]: The output format Format cannot handle multiple address spaces.
Use format variants (-y -O) to specify which address space is wanted

Это означает, что в формате intel-standart (впрочем, как и intel-extended) нет
возможности разместить одновременно с DATA и FLASH сегмент XDATA, в котором,
собсно, и были размещены инициализирущие значения твоих переменных. Теперь
смотрим в документацию, а там по этому поводу написано следующее:

  Output formats that do not support more than one memory space-like MOTOROLA
and INTEL-HEX-may require up to one output file per memory space. This causes
no problems if you are only producing output to one memory space (FLASH), but
if you also are placing objects in EEPROM or an external ROM in DATA space, the
output format cannot represent this and the linker issues the following error
message: Error[e133]: The output format Format cannot handle multiple address
spaces. Use format variants (-y -O) to specify which address space is wanted.
To limit the output to FLASH, make a copy of the linker command file (see
Linker command file, page 19) for the derivative and memory model you are using
and put it in the project directory. Add the following line at the end of the
file: -y(CODE)

MEMORY LOCATION CONFIGURATION
To produce output also for the other memory space(s), you must generate one
output file per memory space (since the output format you have chosen does not
support more than one memory space). Use the XLINK option -O for this purpose.
For each additional output file, you have to specify format, XLINK segment
type, and file name. For example:
-Omotorola,(DATA)=external_rom.a90
-Omotorola,(XDATA)=eeprom.a90
Note: As a general rule, an output file is only necessary if you use
non-volatile memory. In other words, output from the data space is only
necessary if the data space contains external ROM.

The IAR Postlink utility
You can also use the IAR Postlink utility, delivered with the AVR IAR C/EC++
Compiler. This application takes as input an object file (of the XLINK simple
format) and extracts one or more of its XLINK segment types into one file (this
file can be in either Intel extended hex format or Motorola S-record format).
For example, it can put all code segments into one file and all EEPROM segments
into another. See the postlink.htm document for more information about IAR
Postlink.


  Если вкратце перевести, здесь описано то, что я изложил выше по-русски, и
предлагается два варианта развития событий. 1-й (насколько я понимаю) годится
для тех, кто компилирует проекты с использованием линк-файлов, в этом случае
там предусмотрен ключ -О для вывода разных сегментов в разные файлы. Второй
вариант более универсальный, он предлагает линковать проект в формат simple,
после чего обрабатывать его утилитой postlink (лежит в каталоге bin). Оная
утилита может разваливать simple на два hex-файла по разным сегментам. Я лично
использую вариант 2 (просто запускаю postlink перед avreal в батнике
прошивальника) примерно так:

postlink.exe -intel-extended -code -data -idata -bit -const -untyped
Debug\Exe\out.raw out.hex
postlink.exe -intel-extended -xdata Debug\Exe\out.raw eeprom.hex
avreal32 -p1 +mega128 -! -ewp
-fM103C=1,CKSEL=c,JTAGEN=1,CKOPT=0,EESV=0,SUT=3,BODEN=1,BLEV=1,OCDEN=1,BLB1=0,BLB0=0,BSIZ=3
out.hex eeprom.hex

    WBR, Сергей.                                     ICQ: 101347299


Re: __eeprom & 90S8515
Hello, Oleg!

[Sorry, skipped]

 OD> Хотелось бы к примеру при старте сразу иметь a=0.045 b=0.89 c=0.342
 OD> Руками меня пока ломает во внутреннее представление перековыривать
 OD> эти числа и прошивку ручками набивать в HEX редакторе. :)) наверное
 OD> есть какой то предусмотренный средой способ. :))) ???

Используй утилиту postlink из комплекта IAR 2.28.
Рядом читай html по ее правильному использованию.

With best regards.


Re: __eeprom & 90S8515
Quoted text here. Click to load it
выбираешь
Quoted text here. Click to load it
отсутствует.
Quoted text here. Click to load it
значениями
Quoted text here. Click to load it
[...]
Quoted text here. Click to load it

Есть. Для начала установить формат выходного файла Simple.
Линкер сгенерит filename.raw. Далее утилитой postlink.exe из него
вытягивается прошивка EEPROM:  postlink.exe -intel-extended -xdata
filename.raw > filename_eeprom.hex
Это все есть описано в доке (postlink.htm).

--
All the best!!!
      Ivan B. Zagan



Site Timeline