Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Ответ
Опции темы

Массивы в PICC_V8.05PL1

Непрочитано 23.09.2006, 13:13   #11
vovan_zh
Прописка
 
Регистрация: 29.08.2005
Сообщений: 139
Сказал спасибо: 7
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
vovan_zh на пути к лучшему
По умолчанию

Сообщение от NemoCut32
2) vovan_zh просьба написать, что получилось с моими советами по поводу *s[], в ответ: в разных компиляторах по разному, но изначально: static - объявление переменных и констант расположенных в памяти ПОСТОЯННО, const - объявление НЕИЗМЕНЯЕМЫХ переменных. Далее у разных процессоров и архитектур есть разные методы расположения этих данных, например если Вы напишете const в AVR IAR, то он просто выделит в ОЗУ место гад, далее из флэшь при старте проинициализирует эту память (займёт место и там и там) но с этими данными будет работать как с памятью (str, ldr).
Ваш вариант вообще отказывается компилить, даже сообщений никаких не выдает(все строки по 14 символов), попробую позже на других вериях PICC(проверьте все ли вы там правильно написали, там не указатель). Зато работает мой вариант при замене static на const.
А что дает: static const unsigned char?
Цитата:
а если Вы объявите данные как flash, то он их разместит только во флэшке и будет работать с ними через lpm.
что такое работать с ними через lpm.
Реклама:
vovan_zh вне форума   Ответить с цитированием
Непрочитано 24.09.2006, 11:33   #12
NemoCut32
Гражданин KAZUS.RUN
 
Регистрация: 16.12.2004
Сообщений: 586
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
NemoCut32 на пути к лучшему
По умолчанию

lpm это для AVR, а не для PIC - это команда загрузки данных из памяти программ по адресу Z(r30:r31) в регистр r0. Это пример. У AVR команды доступа к ОЗУ и памяти программ различные, поэтому надо смотреть где компилятор размещает Вашу константу - или в ОЗУ, а на старте её инициализирует из памяти программ, или сразу использует её из памяти программ.
В моём варианте со static я пытаюсь ограничить область видимости только там, где будет объявлена эта константа, поэтому его можно и не ставить.
Посмотрите все ли сообщения при компиляции включены в настройках компилятора(в IAR такая опция есть, а как в PICC я не знаю - тоже должна быть). Если будут все сообщения, то посмотрите не ругается ли компилятор на попытку проинициализировать const не совпадающими по размеру данными. IAR например при инициализации char str[] = "МАМА МЫЛА РАМУ" принципиально в конце 0x00 добавит, или даже 0x0, 0x00 - чтобы выравнять строку на слово и можно было пользоваться например strcpy, поэтому sizeof(str) == 16. "" - это текстовые строки и компилятор затачивает их под работу с текстом, т.е. делает их zeroended - оканчивающиеся 0, он и является признаком конца строки. Поменяйте размер s[][14] на s[][15] или s[][16].
Так что я наверное был не совсем прав. Напишите что получилось.
NemoCut32 вне форума   Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массивы в АВР Limit Микроконтроллеры, АЦП, память и т.д 9 02.05.2006 13:55


Часовой пояс GMT +4, время: 05:38.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.