WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

Во-первых, в функциях записи-чтения вы работаете без указателей, уберите адрес
EEPROM_WriteByte((unsigned short)EEPROM_Map.isParamsSet, 0xFA);
Во-вторых, вы не даете времени записаться - эти 10 мс или сколько там по шиту, закончите функцию записи так же, как и начали
while(EECR & (1<<EEPE));//////
EEAR = Addr;
EEDR = Data;
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
while(EECR & (1<<EEPE));//////
Реклама
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: WinAvr в вопросах и ответах

Сообщение a_skr »

ну, это не полный проект. возможно, дело в структуре EEPROM_Map. вот, с явным указанием адреса все работает:
Изображение
Вложения
mega88_test.zip
(19.68 КБ) 225 скачиваний
Реклама
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: WinAvr в вопросах и ответах

Сообщение a_skr »

urry писал(а):Во-первых, в функциях записи-чтения вы работаете без указателей, уберите адрес
EEPROM_WriteByte((unsigned short)EEPROM_Map.isParamsSet, 0xFA);
если этот элемент - EEPROM_Map.isParamsSet - содержит адрес в EE, то да; а если EEPROM_Map имеет атрибут EEMEM и резервирует пространство в EE под структуру, то все правильно - берется адрес элемента структуры и приводится к short.
urry писал(а):Во-вторых, вы не даете времени записаться - эти 10 мс или сколько там по шиту
зачем? следующая запись не начнется, пока предыдущая не закончится.

PS. и чтение тоже не начнется - там тоже есть ожидание окончания записи.
Последний раз редактировалось a_skr Ср июл 17, 2013 12:42:23, всего редактировалось 1 раз.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

Да, я не заметил, что битик окончания записи анализируется при чтении, можно не дублировать.
Реклама
Эиком - электронные компоненты и радиодетали
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: WinAvr в вопросах и ответах

Сообщение alex1126 »

a_skr писал(а):ну, это не полный проект. возможно, дело в структуре EEPROM_Map. вот, с явным указанием адреса все работает:
Изображение
cорри, сильно извиняюсь, структуру то я и не приложил. Но дело не в этом. Добавил в ваш проект свою структуру и все заработало. Будем думать. Магия какая-то.....
Реклама
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: WinAvr в вопросах и ответах

Сообщение a_skr »

в программировании магии не бывает. выложите полностью неработающий проект ;)
Реклама
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: WinAvr в вопросах и ответах

Сообщение alex1126 »

a_skr писал(а):в программировании магии не бывает. выложите полностью неработающий проект ;)
если оптимизацию изменить на 1, то не пишете :( Я не силен в ассемлере что бы разобраться в чем разница, даже несмотря на то что там кода с гулькин фих.

Проект выкладывать?
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: WinAvr в вопросах и ответах

Сообщение a_skr »

Мой пример работает (в протеусе) при любой оптимизации. Выкладывайте, конечно. Даже интересно.
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: WinAvr в вопросах и ответах

Сообщение alex1126 »

a_skr писал(а):Мой пример работает (в протеусе) при любой оптимизации.
т.е. значения записываемые меняли (т.к. после одной удачной записи он запоминает данное состояние даже при перезапуске симуляции) и делали принудительную пересборку (make clean и make all)?
Выкладывайте, конечно. Даже интересно.
извиняюсь за долгое молчание. Проект на работе а с интернетом там проблематично :(
Вложения
tes.rar
(18.53 КБ) 190 скачиваний
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: WinAvr в вопросах и ответах

Сообщение a_skr »

alex1126 писал(а):т.е. значения записываемые меняли (т.к. после одной удачной записи он запоминает данное состояние даже при перезапуске симуляции) и делали принудительную пересборку (make clean и make all)?
да, действительно, на оптимизации 0 - протеус ругается по поводу 4-х тактов, на оптимизации 1 - не ругается, но тоже не работает.
Спойлер

Код: Выделить всё

o=0:
		EECR |= (1<<EEMPE);
  d6:	af e3       	ldi	r26, 0x3F	; 63
  d8:	b0 e0       	ldi	r27, 0x00	; 0
  da:	ef e3       	ldi	r30, 0x3F	; 63
  dc:	f0 e0       	ldi	r31, 0x00	; 0
  de:	80 81       	ld	r24, Z
  e0:	84 60       	ori	r24, 0x04	; 4
  e2:	8c 93       	st	X, r24
		EECR |= (1<<EEPE);
  e4:	af e3       	ldi	r26, 0x3F	; 63
  e6:	b0 e0       	ldi	r27, 0x00	; 0
  e8:	ef e3       	ldi	r30, 0x3F	; 63
  ea:	f0 e0       	ldi	r31, 0x00	; 0
  ec:	80 81       	ld	r24, Z
  ee:	82 60       	ori	r24, 0x02	; 2
  f0:	8c 93       	st	X, r24

o=1:
		EECR |= (1<<EEMPE);
  84:	ef e3       	ldi	r30, 0x3F	; 63
  86:	f0 e0       	ldi	r31, 0x00	; 0
  88:	80 81       	ld	r24, Z
  8a:	84 60       	ori	r24, 0x04	; 4
  8c:	80 83       	st	Z, r24
		EECR |= (1<<EEPE);
  8e:	80 81       	ld	r24, Z
  90:	82 60       	ori	r24, 0x02	; 2
  92:	80 83       	st	Z, r24
Проект, неработающий при оптимизации 2,3,s есть у Вас?
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: WinAvr в вопросах и ответах

Сообщение alex1126 »

a_skr писал(а):действительно, на оптимизации 0 - протеус ругается по поводу 4-х тактов, на оптимизации 1 - не ругается, но тоже не работает.

Проект, неработающий при оптимизации 2,3,s есть у Вас?
нет. При 2 все работает. Но мой проект компилируется только при оптимизации равной 1. Я не ради причуды так издеваюсь. Я ранее писал какие ошибки при этом получаются, ответов не было. Могу повторить, но, на мой взгляд, проще разобраться почему в еепром не пишет при о=1. Можно как-нить для локального куска кода изменить оптимизацию? Или ассемблеровскую вставку делать? Я так понимаю что при оптимизации между командами, где должно быть не более 4 таквот, получается больше?
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: WinAvr в вопросах и ответах

Сообщение a_skr »

любой, корректно написанный, проект компилируется и работает при любом уровне оптимизации (если влезет при o=0 или o=1).
При 2 все работает. Но мой проект компилируется только при оптимизации равной 1. Я не ради причуды так издеваюсь. Я ранее писал какие ошибки при этом получаются, ответов не было. Могу повторить, но, на мой взгляд, проще разобраться почему в еепром не пишет при о=1
проще - использовать библиотечные функции, описанные в avr/eeprom.h, например, void eeprom_update_byte (uint8_t *__p, uint8_t __value). НО, это не избавит Вас от ошибок в Вашем коде, который, почему-то не работает при включении оптимизации, которая, на мой взгляд, просто необходима в проектах для AVR.
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: WinAvr в вопросах и ответах

Сообщение alex1126 »

a_skr писал(а):проще - использовать библиотечные функции, описанные в avr/eeprom.h, например, void eeprom_update_byte (uint8_t *__p, uint8_t __value). НО, это не избавит Вас от ошибок в Вашем коде, который, почему-то не работает при включении оптимизации, которая, на мой взгляд, просто необходима в проектах для AVR.
код работает. Просто не компилируется, как я понял что то куда то не помещается.

Вообщем то вопрос был, в конце-концов, сформулирован довольно точно. Вместо непосредственного ответа пошли советы "не использовать этот код", "поменять уровень оптимизации", "переписать проект". Ну а че не посоветовали вместо авр пик взять? Меня интересует как заставить работать кусок кода из даташита при оптимизации равной единицы.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: WinAvr в вопросах и ответах

Сообщение a_skr »

alex1126 писал(а):код работает. Просто не компилируется, как я понял что то куда то не помещается.
что-то куда-то... :facepalm: код в студию!
alex1126 писал(а): Меня интересует как заставить работать кусок кода из даташита при оптимизации равной единицы.

Код: Выделить всё

asm volatile("sbi %0, %1" :: "I" (_SFR_IO_ADDR(EECR)),"M" (EEMPE));
asm volatile("sbi %0, %1" :: "I" (_SFR_IO_ADDR(EECR)),"M" (EEPE));
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: WinAvr в вопросах и ответах

Сообщение alex1126 »

a_skr писал(а):что-то куда-то... :facepalm: код в студию!
Там сто килобайт кода, прошивка почти под завязку. Ошибка при линковке. Я писал ранее:

Если при компиляции поставить уровень оптимизации 1, то компилируется нормально. Если же увеличивать (2,3,s), то начинается ругань при линковке:

Код: Выделить всё

Linking: main.elf
avr-gcc -mmcu=atmega88pa -I. -gdwarf-2 -DF_CPU=7372800UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 -MMD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref     -lm
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: main.elf section .text will not fit in region text
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: region text overflowed by 838 bytes
make.exe: *** [main.elf] Error 1
причем чем выше уровень оптимизации тем размер оверфловеда больше. Вообщем что это такое и как лечить? Это не тоже самое когда код больше 8 килобайт, он нормально компилится и в 8,5кб и пишет при этом что размер 102%, это помоему какая внутренняя херня с линковкой.


Если код уменьшить. То нормально соберется. Но опять мы уехали не в ту степь. Я спрашивал про другое.

a_skr писал(а):

Код: Выделить всё

asm volatile("sbi %0, %1" :: "I" (_SFR_IO_ADDR(EECR)),"M" (EEMPE));
asm volatile("sbi %0, %1" :: "I" (_SFR_IO_ADDR(EECR)),"M" (EEPE));
это куда вставлять?
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: WinAvr в вопросах и ответах

Сообщение a_skr »

вместо этого:
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

Там сто килобайт кода, прошивка почти под завязку. Ошибка при линковке. Я писал ранее:
Блин уже три страницы говорится об ошибке, которую мы должны исправить в коде, которого не видели.
Сударь, вы случайно не тролль?
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: WinAvr в вопросах и ответах

Сообщение alex1126 »

vitalik_1984 писал(а):Блин уже три страницы говорится об ошибке, которую мы должны исправить в коде, которого не видели.
Сударь, вы случайно не тролль?
нету никакой ошибке в коде. Он работает. Вопрос был про другое.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

Видать это какая то секретная разработка, раз все время только кусочек выкладывается, который отношение к некомпилируемому коду имеет посредственное отношение.
Нам непонятно возможно проблема кроется совсем не в этом участке кода, который вы выкладываете, просто последствия тех неправильных строк видны именно в записи чтении.
Тот участок кода что вы привели отлично компилируется на всех уровнях оптимизации.
alex1126 писал(а):a_skr писал(а):
действительно, на оптимизации 0 - протеус ругается по поводу 4-х тактов, на оптимизации 1 - не ругается, но тоже не работает.

Проект, неработающий при оптимизации 2,3,s есть у Вас?

нет. При 2 все работает. Но мой проект компилируется только при оптимизации равной 1.

Непонятно как у вас при оптимизации 2 все работает, если компилируется только на уровне оптимизации 1?
Что то вы не договариваете. Это как починить сломанный телефон по телефону, который сломан.

Попробуйте полностью заново создать проект будто его только что сочинили. Только код программы оставьте тот, что есть. Может все и решится.
И покажите наконец код. Уже не раз говорилось об этом. Может кто соберет этот проект исправив уже замыленную для вашего глаза ошибку.
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: WinAvr в вопросах и ответах

Сообщение alex1126 »

vitalik_1984 писал(а):Видать это какая то секретная разработка, раз все время только кусочек выкладывается, который отношение к некомпилируемому коду имеет посредственное отношение.
все отлично компилируется. Но не работает. Ранее был уже выложен проект который не работает при о=1
Тот участок кода что вы привели отлично компилируется на всех уровнях оптимизации.
a_skr писал(а):
действительно, на оптимизации 0 - протеус ругается по поводу 4-х тактов, на оптимизации 1 - не ругается, но тоже не работает.
мнения разделились
Непонятно как у вас при оптимизации 2 все работает, если компилируется только на уровне оптимизации 1?
разговор уже про другой проект
Ответить

Вернуться в «AVR»