|
|
  |
Обращение к РОН в CodeVisionAVR, Как? |
|
|
|
Jan 7 2008, 14:45
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Цитата При написании программ на языке высокого уровня (С, Паскаль, и т.д.) с использованием любого компилятора нет возможности обращаться к регистрам ядра. Ибо это и не нужно - все действия, записанныве на языке высокого уровня компилятор сам преобразует в нужные обращения к нужным регистрам. Прочитайте книжку про С. То есть использовать переменные... А как обращаться к ячейкам памяти? То есть присвоить как-то переменной значение ячейки памяти по адресу $00, напрямер
|
|
|
|
|
Jan 7 2008, 16:57
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Хранить всё в переменных? Цитата нет возможности обращаться к регистрам ядра но ведь к регистрам ввода/вывода есть такая возможность.
Сообщение отредактировал Владимир_КПИ - Jan 7 2008, 16:59
|
|
|
|
|
Jan 7 2008, 17:40
|

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

|
Цитата(Владимир_КПИ @ Jan 7 2008, 18:57)  Хранить всё в переменных? Простите, а переменные, по-вашему хранятся не в памяти, а где-то в астрале? Какой смысл конкретную переменную (конкретные данные, если хотите) размещать в конкретной ячейке памяти? Вам не все равно, в какую ячейку их положит компилятор? Компилятор знает, куда он их положил и когда эти данные понядобятся - он знает откуда их достать. Цитата(Владимир_КПИ @ Jan 7 2008, 18:57)  но ведь к регистрам ввода/вывода есть такая возможность. Снова вопрос - зачем вам что-либо записывать в регистр ядра? Что вы потом будете с этим записанным делать? Ваши вопросы, как я чувствую, от непонимания, что язык С является языком высокого уровня. В отличие от языка Ассемблера. Прочитайте о языках высокого уровня и Ассемблере хотя бы в Wiki.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 7 2008, 18:05
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Сергей Борщ @ Jan 7 2008, 20:40)  Простите, а переменные, по-вашему хранятся не в памяти, а где-то в астрале? Какой смысл конкретную переменную (конкретные данные, если хотите) размещать в конкретной ячейке памяти? Вам не все равно, в какую ячейку их положит компилятор? Не, ну иногда это бывает действительно нужно, например для хранения калибровки RC осцилятора или для общих данных бутлоадера и основной проги...итд Не знаю как это в CW, а в Gcc это делают примерно так: int myvar __attribute__ ((section (".mysect"))); ну и линкеру необходимо указать адрес этой mysect. Цитата Снова вопрос - зачем вам что-либо записывать в регистр ядра? Что вы потом будете с этим записанным делать? Иногда это имеет смысл для хранения некоторых переменных в регистрах на все время выполнения На Gcc это делают так: register unsigned char myvar asm("r2");
|
|
|
|
|
Jan 7 2008, 18:11
|

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

|
Цитата(singlskv @ Jan 7 2008, 20:05)  Это понятно, можно и через указатели. Можно и переменную в РОН расположить (не знаю, можно ли это в CV), но вопрос у автора был не об этом: Цитата Например, я хочу записать в R0 содержимое ячейки памяти по адресу $00.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 7 2008, 18:32
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата Это понятно, можно и через указатели. Можно и переменную в РОН расположить (не знаю, можно ли это в CV), но вопрос у автора был не об этом: Цитата Например, я хочу записать в R0 содержимое ячейки памяти по адресу $00. Действительно, точно непонятно что нужно автору, но если он хотел записать в RX содержимое ячейки по адресу YY, то тогда нужно написать так: register unsigned char myvar asm("rx"); .... myvar=*((unsigned char *)YY); .... только, конечно, с этим нужно поосторожнее... на значения X и YY есть некоторые ограничения...
|
|
|
|
|
Jan 8 2008, 07:57
|

Местный
  
Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704

|
Цитата(Владимир_КПИ @ Jan 7 2008, 18:21)  Как обращаться к регистрам общего назначения в программе CodeVisionAVR? Например, я хочу записать в R0 содержимое ячейки памяти по адресу $00. Поддерживаю предыдущих авторов в вопросе "зачем", но если уж "очень надо", то можно так: Код #asm ldi R26,0x00 ;младший байт адреса ldi R27,0x00 ;старший байт адреса ld R0,X ; запись в R0 значения, находящегося по адресу R27:R26 #endasm
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|