Страница 1 из 1
вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 11:17:34
ata100
Приветствую , просветите что не так делаю компилю в студии 7 под тини2313, оптимизация (-О1):вопрос
1, при старте у меня присваивается значение переменных в епроме ,однако его там не возникает,
2, первый eeprom_update_byte исполняется и меняет значение .но на втором все валится в бесконечный цикл
Код: Выделить всё
--- C:\home\toolsbuild\workspace\avr8-devices-pack\src\avr-libc\libc\misc\eeupd_byte.S
00000032 MOV R18,R22 Copy register
00000033 SBIC 0x1C,1 Skip if bit in I/O register cleared
00000034 RJMP PC-0x0001 Relative jump
если я делаю reset то прога делает и первый и второй и снова виснет ,
3. почему в окне eeprom Memory висят значки ?? хотя указан hexadecimal view. и когда я меняю еепром там изменений ненаблюдается,
4, а можно как нибудь исключить выпадание в асм из этих процедур
Код: Выделить всё
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
uint8_t EEMEM Stored_UU = 15;
uint8_t EEMEM Stored_XX = 3;
uint8_t UU;
uint8_t XX;
int main(void)
{
while(1){
UU = 25; XX = 47;
eeprom_update_byte(&Stored_UU, UU);
eeprom_update_byte(&Stored_XX, XX);
UU ++;}
}
спасибо!!!!!!!!!!!!!
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 11:56:17
NStorm
1. Макрос EEMEM всего-лишь добавляет аттрибут, что данную переменную нужно положить в отдельную секцию. В AVR EEPROM - отдельный сегмент специальный. Компилятору еще нужно сказать сгенерить этот сегмент в отдельный файл .eep, который прошивается потом отдельно. Насколько я знаю, симулятор студии это не поддерживает и не умеет.
2. Нельзя присваивать значения переменным из секции EEMEM напрямую, как делаете вы UU = 25; XX = 47; И UU++ нельзя.
Делайте eeprom_update_byte(&Stored_UU, 25);
И читать афаик потом новое значение автоматом оно не будет. Надо будет делать eeprom_read_byte во переменную в памяти. Точно не помню, но почти наверняка так.
3. См. посл. предложение п.1 - симулятор не умеет.
4. Нельзя, если попросту. Потому что функции работы с EEPROM лежат в libc, который уже в собранном бинарном виде. Просто на входите внутрь этой функции, прошагивайте её через Step over, а не Step into.
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 14:19:46
ARV
NStorm писал(а):Нельзя присваивать значения переменным из секции EEMEM напрямую, как делаете вы UU = 25; XX = 47; И UU++ нельзя.
Делайте eeprom_update_byte(&Stored_UU, 25);
abuy. сморозили: присваивает он нормальную переменную, а потом и делает обновление EEPROM-овской переменной именно значением нормальной.
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 14:36:17
NStorm
Да, не заметил что это разные переменные.
Ну тогда всё ок. Остается выкинуть симулятор студии, который не умеет в EEPROM. И взять или реальное железо или Proteus, который прекрасно симулирует EEPROM и даже сохраняет его состояние в проекте, если принудительно не очистить.
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 14:50:48
BOB51
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 14:51:38
NStorm
BOB51, и зачем это тут?
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 14:58:21
Demiurg
Строки означают, что создается отдельный файл с расширением *.eep, которым прошивают EEPROM МК.
Код: Выделить всё
uint8_t EEMEM Stored_UU = 15;
uint8_t EEMEM Stored_XX = 3;
Код: Выделить всё
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <util/delay.h>
uint8_t EEMEM Stored_UU = 15;
uint8_t EEMEM Stored_XX = 3;
uint8_t UU;
uint8_t XX;
int main(void)
{
eeprom_write_byte (&Stored_UU, 15);
eeprom_write_byte (&Stored_XX, 3);
// _delay_ms (100);
UU = 25; XX = 47;
while (1)
{
eeprom_write_byte (&Stored_UU, UU);
eeprom_write_byte (&Stored_XX, XX);
UU++;
XX++;
}
}
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 15:58:57
NStorm
Demiurg, у вас AVR Studio 4, а у ТС Atmel Studio 6/7.
Добавлено after 24 minutes 32 seconds:
Ах да, я вспомнил. Где-то ж я писал об этом недавно. Это бага студии 6-7ой. EEPROM криво показывается. Но если скроллить в окошке данных туда-сюда, данные могут появиться. Причем как по правильному, так и по левому адресу:

Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 18:30:02
Demiurg
Я в основном работаю в XP. Иногда в 7. И там и там я спокойно работаю в IAR и в AVR-Studio 4.19 + AVR Toolchain. 6-7 не нужны. Опять же, я не работал с самыми последними моделями AVR, производства Microchip. И не думаю, что участники форума в ближайшее время на них замахнутся...
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 19:43:55
NStorm
Demiurg, и снова вы о своём. Рад за вас, что вы работаете на старой студии. А человек скрин из новой показал. И спросил почему там не работает. А не как у вас лично это работает в другом ПО.
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 20:08:45
Demiurg
Я отлаживаю все свои проекты любой сложности, с развитыми меню. Десятки пунктов, подпунктов. И все что на них завязано, отработка действий, вызовы функций.
Все это в студии 4.19.
Пусть значит в дизасм смотрит, что не так. Может что выкинуло. Может срыв стека.
Кстати, бывают проблемы с симуляторами 1 и 2. Возможно в этом причина.
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 21:06:13
ata100
NStorm обнаружил свой косяк - следовало писать не EEMEM Stored_XX = 3 а Stored_XX EEMEM= 3; в остальном -собственно шел по следам Писанца ,у него работает передача значения через переменную
https://www.youtube.com/watch?v=FY0O2K9sGc8&t=1s ,попробовал по вашему совету сделал запись значения напрямую
Код: Выделить всё
eeprom_update_byte(&Stored_UU, UU);
eeprom_update_byte(&Stored_XX, 16);
первая строка работает а со второй опять бесконечный цикл, и как никрути окно eeprom : до адреса 0xFBCF сплошные ??????
Добавлено after 6 minutes 51 second:
кстати у Писанца в этом видео не происходит выпадания в асм
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 21:07:19
ARV
ata100 писал(а):следовало писать не EEMEM Stored_XX = 3 а Stored_XX EEMEM= 3;
насколько я могу судить по собственному многолетнему опыту, никакой разницы в записях нет, то есть не должно быть.
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 21:17:19
ata100
[uquote="ARV",url="/forum/viewtopic.php?p=3872419#p3872419"]
ata100 писал(а):следовало писать не EEMEM Stored_XX = 3 а Stored_XX EEMEM= 3;
насколько я могу судить по собственному многолетнему опыту, никакой разницы в записях нет, то есть не должно быть.[/uquote]
однако стало работать
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 21:19:05
ARV
ata100 писал(а):однако стало работать
я очень, очень, очень сильно сомневаюсь, что стало работать именно по этой причине.
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 22:47:28
NStorm
ata100, всё вы делаете правильно. Это симулятор глючит с отображением EEPROM. Где тут или на другом форуме только недавно об этом тоже писал, обнаружив. Вы окно EEPROM не вниз листайте, а попробуйте вверх подняться через FFFF, и там вверх-вниз надо крутить, не знаю, методом тыка так вот листая крутя вверх вниз по 3-4 страницы листинга у меня в итоге "находятся" данные по левому адресу. Если потом вернуться на 0 адрес, там уже могут правильно данные показываться. Только переключить окно на FLASH и обратно - и опять вопросы. Короче глючит оно нещадно. Забейте, в симуляторе этом не покажет нормально, его глюк.
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 22:59:33
ata100
NStormпочему у Писанца не глючит и в асм не выпадает?
Re: вопрос по работе с EEPROM
Добавлено: Вт июл 28, 2020 23:30:49
NStorm
ata100, потому что у него студия 6.0, atmega16 и звезды на небе в другом положении были. У меня в последней 7ой студии и для tiny2313 глючит, я скрин выше показал. И уже не первый раз с этим глюком симулятор 7ой студии сталкиваюсь. Почему у кого-то глючит симулятор, а у кого нет - странно спрашивать. Когда он глючит не у вас одного. Спросите разработчиков студии, что они там употребляют у себя.