Например TDA7294

Форум РадиоКот • Просмотр темы - flash массив в AvrStudio
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 01:13:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: flash массив в AvrStudio
СообщениеДобавлено: Вс апр 23, 2017 17:08:08 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Вс мар 09, 2014 09:13:00
Сообщений: 136
Рейтинг сообщения: 0
Необходимо сохранить рассчитываемые данные во флэш, в виде массива используя AVRStudio. Для этого определил место под пятьсот значений переменных типа char во флэш так:
unsigned char mass[500]PROGMEM={};

Далее пытаюсь записать значения в этот массив:
mass[i]PROGMEM=data - но такая форма записи недопустима(компилятор ругается).
Подскажите как можно организовать алгоритм записи переменных в i-й адрес массива зарезервированный во флешь ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Вс апр 23, 2017 17:39:44 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 0
AVR106: C functions for reading and writing to Flash memory
AVR109: Self Programming

Если выбранный чип поддерживает работу с загрузчиком.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Вс апр 23, 2017 18:04:03 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2694
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Атрибуты для GCC имеют несколько более длинную запись для указания сегмента памяти. Для короткой записи PROGMEM есть дефайн.
Нужно #include <avr/pgmspace.h>

Кроме того, данные во флеш не могут быть переменными, только константа.
const unsigned char mass [2] PROGMEM =
{0,0};

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Вс апр 23, 2017 20:35:37 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
настоятельно рекомендую перейти на свежие версии AVR-GCC, в которых полноценно реализована поддержка пространства памяти __flash: больше никаких pgm_read_byte!

Добавлено after 2 minutes 33 seconds:
Z_h_e писал(а):
Кроме того, данные во флеш не могут быть переменными, только константа.
const unsigned char mass [2] PROGMEM =
{0,0};
нет, в WinAVR const не является необходимым (лично я PROGMEM всегда пишу на первом месте PROGMEM char mass[] = "str";). а вот в свежих версиях, как я выше советовал, для __flash необходимо и const указывать.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Пн апр 24, 2017 07:30:03 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
Ну, для старых WinAVR'ов оно так, но более современные avr-gcc уже требуют обязательного const.
Можете привести пример обойтись __flash'ом без ручного дерганья регистров? Мне казалось, что использование специальных функций это не только лень разработчиков, но и сигнал пользователю что эта операция не так проста. В частности я не знаю что произойдет при перезаписи страницы, с которой программа исполняется в данный момент.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Пн апр 24, 2017 07:38:04 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
COKPOWEHEU писал(а):
Можете привести пример обойтись __flash'ом без ручного дерганья регистров? Мне казалось, что использование специальных функций это не только лень разработчиков, но и сигнал пользователю что эта операция не так проста. В частности я не знаю что произойдет при перезаписи страницы, с которой программа исполняется в данный момент
я не совсем понял, о какой ситуации вы говорите? я пока что в своей практике ни разу ничего не дёргал при работе с FLASH... все время полагаюсь на компилятор и библиотеку... опыт у меня, разумеется, не слишком обширный... и с микроконтроллерами, у которых FLASH больше 64К работал совсем немножко... и тем более не писал бутлоадеров, которые что-то там в страницах FLASH переписывают...

так что или уточните, или извините :)))

ну а по поводу примера - вам ли он требуется?! :shock: я лично приятно удивлен тем, как свежак GCC раскручивает "указатель, находящийся в ОЗУ, указывающий на указатель во FLASH, который указывает на указатель во FLASH, который указывает на функцию". написал что-то вроде
ptr1->ptr2->ptr3->func(); и все проблемы, и какой там указатель const, а какой __flash, компилятор сам разбирается.

удобно.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Пн апр 24, 2017 16:34:42 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
Если упростили чтение из EEPROM, сумев обойтись без pgm_read_* - отлично. Впрочем, как и ожидалось, это не так. Следующие записи эквивалентны и попрежнему требуют pgm_read_*
Код:
PROGMEM const char var;
__flash const char var;
Проверил на последней доступной версии gcc-4.9.2
Цитата:
я не совсем понял, о какой ситуации вы говорите?
ТС-у надо не только читать из flash, но и писать туда. Отсюда и вопрос что будет с программой, меняющей собственную прошивку.
Цитата:
ну а по поводу примера - вам ли он требуется?! :shock:
Не сталкивался с таким, поэтому и интересно


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Пн апр 24, 2017 16:37:27 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2694
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я думаю ТСу не надо писать в массив, а имел он ввиду инициализацию массива. Видимо проблема решена и он молча устранился из своей же темы.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Пн апр 24, 2017 20:17:22 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
COKPOWEHEU писал(а):
Если упростили чтение из EEPROM, сумев обойтись без pgm_read_* - отлично. Впрочем, как и ожидалось, это не так.
вы меня подозреваете в дезинформировании уважаемого сообщества?!
Код:
const __flash char bytes[] = {1,2,3,4,5};

for(uint8_t i=0; i<5; i++)
   PORTB = bytes[i];
и никаких pgm_read_xxx

кстати, я не самый тщательный выискиватель, но у меня в ходу avr-gcc 6.3.0, в которой есть LTO-оптимизация, выжимающая последние байты экономии :)))

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Вт апр 25, 2017 00:03:27 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
Беглый поиск не дал результатов по gcc-avr выше 4.9, в репах (даже unstable) тоже самое. Собирать руками смысла не вижу. Обычный gcc уже давно обновился до 6 версии. Так что для типичного компилятора все верно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Вт апр 25, 2017 05:35:51 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
http://blog.zakkemble.co.uk/avr-gcc-6-1-0/
в файле "gcc.info":
Цитата:
Per default, any data including read-only data is located in RAM (the
generic address space) so that non-generic address spaces are needed to
locate read-only data in flash memory _and_ to generate the right
instructions to access this data without using (inline) assembler code.

'__flash'
The '__flash' qualifier locates data in the '.progmem.data'
section. Data is read using the 'LPM' instruction. Pointers to
this address space are 16 bits wide.

'__flash1'
'__flash2'
'__flash3'
'__flash4'
'__flash5'
These are 16-bit address spaces locating data in section
'.progmemN.data' where N refers to address space '__flashN'. The
compiler sets the 'RAMPZ' segment register appropriately before
reading data by means of the 'ELPM' instruction.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: flash массив в AvrStudio
СообщениеДобавлено: Вт апр 25, 2017 06:41:39 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
COKPOWEHEU писал(а):
Беглый поиск не дал результатов по gcc-avr выше 4.9, в репах (даже unstable) тоже самое. Собирать руками смысла не вижу.
я тоже не вижу смысла собирать руками, тем более что у меня они не заточены под такую тонкую работу :)))
поэтому я наискал себе уже собранные версии: 4.9.2, 5.2.1, 6.1.1 и 6.3.0

и не жужу :)))

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y