реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Проблема с имуляцией AVRStudio 4.16, Не симулируется чтение flash
_VM
сообщение May 6 2009, 19:30
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 23-03-05
Из: Москва
Пользователь №: 3 625



AVR Studio 4.16 build 628
WinAVR-20090313

Код:

__attribute__((__progmem__)) unsigned char _zzz[3] = {1,2,3};
unsigned char abc;

main() {
abc=_zzz[1];
}

При симуляции значение abc не равно _zzz[1] !!!
Пробовал несколько авр'ов от доисторического at90s8535 (который, собственно, и интересует), до atmega128.
Оптимизация выключена.
При просмотре памяти по адресу _zzz данные лежат нормальные.
Кто-нибудь сталкивался?

Сообщение отредактировал _VM - May 6 2009, 19:54
Go to the top of the page
 
+Quote Post
_VM
сообщение May 6 2009, 20:38
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 23-03-05
Из: Москва
Пользователь №: 3 625



Пробдема решилась.
Правильно делать так:
#include <avr/pgmspace.h>

__attribute__((__progmem__)) unsigned char _zzz[3] = {1,2,3};
unsigned char abc;

main() {
abc= pgm_read_byte(&_zzz[1]);
}
Go to the top of the page
 
+Quote Post
Mad-man
сообщение Mar 23 2010, 16:22
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 5-11-06
Пользователь №: 21 995



Цитата(_VM @ May 6 2009, 23:38) *
Пробдема решилась.
Правильно делать так:
#include <avr/pgmspace.h>

__attribute__((__progmem__)) unsigned char _zzz[3] = {1,2,3};
unsigned char abc;

main() {
abc= pgm_read_byte(&_zzz[1]);
}



да все верно а вы нашли функцию записи?
pgm_write_byte
у меня пишет что нету определения этой функции

Сообщение отредактировал Mad-man - Mar 23 2010, 16:22
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 23 2010, 16:48
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Mad-man @ Mar 23 2010, 18:22) *
pgm_write_byte
у меня пишет что нету определения этой функции
Вы слишком многого хотите. Изучайте boot.h, лучше всего внимательным чтением документации на avr-libc.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Mad-man
сообщение Mar 23 2010, 17:20
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 5-11-06
Пользователь №: 21 995



Цитата(Сергей Борщ @ Mar 23 2010, 19:48) *
Вы слишком многого хотите. Изучайте boot.h, лучше всего внимательным чтением документации на avr-libc.


да я уже читаю)

это плохо что нужно переписывать целыми страницами флеш чтобы сохранить пару байт данных
при этом нужно держать буфер на готове размером 128 байт
и гемороиться с выравниманием этих двух байт по границе страницы (я так и не понял как)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 23 2010, 19:16
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Mad-man @ Mar 23 2010, 19:20) *
это плохо что нужно переписывать целыми страницами флеш чтобы сохранить пару байт данных
Вообще-то для подобных целей существует eeprom.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Mad-man
сообщение Mar 23 2010, 21:14
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 5-11-06
Пользователь №: 21 995



Цитата(Сергей Борщ @ Mar 23 2010, 22:16) *
Вообще-то для подобных целей существует eeprom.


ооо точно!!! спасибо за идею!
вижу _EEPUT _EEGET!!!! запись чтение побайтно!

это то что нужно! спасибо!

а сколько раз можно переписывать байт в eeprom?
для флеш я знаю 10.000 перезаписей на страницу....

Сообщение отредактировал Mad-man - Mar 23 2010, 21:15
Go to the top of the page
 
+Quote Post
V_G
сообщение Mar 23 2010, 23:53
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(Mad-man @ Mar 24 2010, 07:14) *
а сколько раз можно переписывать байт в eeprom?
для флеш я знаю 10.000 перезаписей на страницу....

Зависит от модели проца, но как правило, не менее 100000. Пишут в даташитах.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 24 2010, 09:12
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Mad-man @ Mar 23 2010, 23:14) *
а сколько раз можно переписывать байт в eeprom?
для флеш я знаю 10.000 перезаписей на страницу....
Перефразируя ФИДОшное "Чтение документации из интернета вслух - 100 баксов в час": "Цитирование даташита - 100 евро в час (бакс упал)"


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016