eldarkg / emdr1986x-std-per-lib

Milandr MCU 1986x Standard Peripherals Library. Mirror:
https://code.launchpad.net/~eldar/emdr1986x-std-per-lib/+git/emdr1986x-std-per-lib
47 stars 28 forks source link

EEPROM_ReadWord возвращает 0 при сборке MDR32F9Qx_eeprom.c с -O2 #25

Closed legath closed 7 years ago

legath commented 7 years ago

EEPROM_ReadWord всегда возвращает 0 , даже если данные есть. Настройки задержек верные т.к. с оптимизацией 0 все работает.

eldarkg commented 7 years ago

@legath Могли бы вы приложить скомпилированный объектный файл с отладочными символами (флаг -ggdb3)?

legath commented 7 years ago

gcc version 5.4.1 20160919 eeprom.zip

eldarkg commented 7 years ago

@legath Извините, хотелось бы увидеть скомпилированный объектный файл с отладочными символами самой программы (т.е. после линковки).

eldarkg commented 7 years ago

@legath Судя по версии GCC: (15:5.4.1+svn241155-1) 5.4.1 20160919 (взято из объектного файла), вы используете среду компилятора из дебиановского (убунтовского) репозитория. Я бы вам по рекомендовал использовать компилятор от сюда. Это официальная сборка, поддерживаемая ARM. Насколько я помню у меня были когда-то проблемы с запуском программы скомпилированной компилятором из стандартного (убунту) репо.

eldarkg commented 7 years ago

@legath И для уточнения, вы используете последнюю версию данной библиотеки?

legath commented 7 years ago

@eldarkg да, я делал pull к себе. Для уточнения, я нашел что на новом контроллере перед работой с EEPROM необходимо вызывать EEPROM_ErasePage, тогда при последующей работе все читается и пишется не зависимо о количества циклов подачи питания.

Компилятор у меня не из репозитория , а с лаунчпад, но сути это не меняет. Воспользуюсь Вашим советом и протестирую на рекомендованном. Спасибо.

eldarkg commented 7 years ago

@legath По сути в принципе надо перед тем чем что-то записать в ЕЕПРОМ необходимо делать очистку страницы (для сведения: очистка - заполнение памяти единицами; запись - только сброс битов в 0. Т.е. если бит, который вы хотите установить в единицу уже нулевой, его можно взвести только полным стиранием страницы, с последующей записью необходимых данных). Я не стал бы надеяться на производителя, что он стерет эту память.

eldarkg commented 7 years ago

@legath Можно закрывать вопрос?

legath commented 7 years ago

Думаю что можно закрывать. Хотя момент с чтением 0 все равно не совсем понятен, особенно после Вашего комментария.

eldarkg commented 7 years ago

@legath Т.е. я имею ввиду, что если в памяти уже нули, то после записи туда каких-либо данных, там так и будут нули.