|
|
 |
Ответов
|
Dec 22 2008, 11:46
|

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

|
AVRStudio - оболочка/симулятор. В комплекте с ней идет ассемблер AVRasm (AVRasm2). Упоминание компиляции наталкивает на мысль, что в качестве компилятора вы используете avr-gcc (WinAVR). Цитата(LoLo @ Dec 22 2008, 13:26)  Хотя в книгах пишут, что если объявлено как const, то должны храниться в памяти программ. Выкинуть такие книги. const означает, что компилятор не позволит изменить это, т.е. данные с атрибутом const являются read-only. Куда размещать такие данные - отдано на усмотрение компилятору. Цитата(LoLo @ Dec 22 2008, 13:26)  Что делать? Как всегда - читать документацию. Начать с Winavr/doc/avr-libc/faq.html. Читать от начала до конца, обратить внимание на атрибут PROGMEM.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 22 2008, 12:01
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Сергей Борщ @ Dec 22 2008, 14:46)  Выкинуть такие книги. Ну, это уж слишком. Правильно там написано, и хороший компилятор мог бы догодаться, что const нужно помещать в памяти программ. Но gcc - универсальный компилятор, т.е. предназначем для работы на платформах, где нет программной памяти, поэтому приходится пользоваться не только такими извращениями как PROGMEM, но и pgm_read_word_near и т.п., вместо того чтобы просто разыменовывать указатель, а компилятор по его типу догадывался бы, в какую память обращаться.
|
|
|
|
|
Dec 22 2008, 13:40
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(777777 @ Dec 22 2008, 15:01)  Ну, это уж слишком. Правильно там написано, и хороший компилятор мог бы догодаться, что const нужно помещать в памяти программ. Но gcc - универсальный компилятор, т.е. предназначем для работы на платформах, где нет программной памяти, поэтому приходится пользоваться не только такими извращениями как PROGMEM, но и pgm_read_word_near и т.п., вместо того чтобы просто разыменовывать указатель, а компилятор по его типу догадывался бы, в какую память обращаться. Любой стандартный компилятор C создаёт код из предположения что у нас одно адресное пространство (Архитектура фон Неймана), ну а если это не так (у AVR гарвардская архитектура + ещё eeprom) приходится так или иначе указывать в какой памяти располагать те или иные данные. И это не извращения, а необходимость. А платформ где нет программной памяти не существует, т.к. программа есть всегда и она гдето располагается пусть даже в виде отверстий в перфокарте
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
LoLo Помогите разобраться Dec 22 2008, 11:26  defunct Цитата(777777 @ Dec 22 2008, 14:01) Ну, э... Dec 22 2008, 13:30 LoLo Цитата(Сергей Борщ @ Dec 22 2008, 14:46) ... Dec 22 2008, 12:24  Daskar Цитата(LoLo @ Dec 22 2008, 16:24) Спасибо... Dec 22 2008, 13:04 mempfis_ Цитата(LoLo @ Dec 22 2008, 15:26) Доброго... Dec 22 2008, 11:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|