| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Массивы в PICC_V8.05PL1
23.09.2006, 13:13
|
#11
|
|
Прописка
Регистрация: 29.08.2005
Сообщений: 139
Сказал спасибо: 7
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
|
Сообщение от NemoCut32
|
|
2) vovan_zh просьба написать, что получилось с моими советами по поводу *s[], в ответ: в разных компиляторах по разному, но изначально: static - объявление переменных и констант расположенных в памяти ПОСТОЯННО, const - объявление НЕИЗМЕНЯЕМЫХ переменных. Далее у разных процессоров и архитектур есть разные методы расположения этих данных, например если Вы напишете const в AVR IAR, то он просто выделит в ОЗУ место гад, далее из флэшь при старте проинициализирует эту память (займёт место и там и там) но с этими данными будет работать как с памятью (str, ldr).
|
Ваш вариант вообще отказывается компилить, даже сообщений никаких не выдает(все строки по 14 символов), попробую позже на других вериях PICC(проверьте все ли вы там правильно написали, там не указатель). Зато работает мой вариант при замене static на const.
А что дает: static const unsigned char?
|
Цитата:
|
|
а если Вы объявите данные как flash, то он их разместит только во флэшке и будет работать с ними через lpm.
|
что такое работать с ними через lpm.
|
|
|
|
24.09.2006, 11:33
|
#12
|
|
Гражданин KAZUS.RUN
Регистрация: 16.12.2004
Сообщений: 586
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
|
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].
Так что я наверное был не совсем прав. Напишите что получилось.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
массивы в АВР
|
Limit |
Микроконтроллеры, АЦП, память и т.д |
9 |
02.05.2006 13:55 |
Часовой пояс GMT +4, время: 05:38.
|
|