- Vote on answer
- posted
14 years ago
MPLAB C18 EEPROM initialization
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago