реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Обращение к РОН в CodeVisionAVR, Как?
Motion
сообщение Jan 7 2008, 14:21
Сообщение #1


Местный
***

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



Как обращаться к регистрам общего назначения в программе CodeVisionAVR?

В начале программы я прописал #include <mega16.h>

Посмотрев содержимое файла, я не обнаружил описание этих регистров. То есть соответствие регистра и его адреса. И что за команда sfrb?




И второй вопрос - как записать в переменную содержимое ячейки памяти(на язике C)?

Например, я хочу записать в R0 содержимое ячейки памяти по адресу $00.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 7 2008, 14:38
Сообщение #2


Гуру
******

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



Цитата(Владимир_КПИ @ Jan 7 2008, 16:21) *
Как обращаться к регистрам общего назначения в программе CodeVisionAVR?
При написании программ на языке высокого уровня (С, Паскаль, и т.д.) с использованием любого компилятора нет возможности обращаться к регистрам ядра. Ибо это и не нужно - все действия, записанныве на языке высокого уровня компилятор сам преобразует в нужные обращения к нужным регистрам. Прочитайте книжку про С.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Motion
сообщение Jan 7 2008, 14:45
Сообщение #3


Местный
***

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



Цитата
При написании программ на языке высокого уровня (С, Паскаль, и т.д.) с использованием любого компилятора нет возможности обращаться к регистрам ядра. Ибо это и не нужно - все действия, записанныве на языке высокого уровня компилятор сам преобразует в нужные обращения к нужным регистрам. Прочитайте книжку про С.


То есть использовать переменные...


А как обращаться к ячейкам памяти? То есть присвоить как-то переменной значение ячейки памяти по адресу $00, напрямер
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 7 2008, 16:25
Сообщение #4


Гуру
******

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



Цитата(Владимир_КПИ @ Jan 7 2008, 16:45) *
То есть использовать переменные...
А как обращаться к ячейкам памяти? То есть присвоить как-то переменной значение ячейки памяти по адресу $00, напрямер
Зачем?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Motion
сообщение Jan 7 2008, 16:57
Сообщение #5


Местный
***

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



Хранить всё в переменных?


Цитата
нет возможности обращаться к регистрам ядра

но ведь к регистрам ввода/вывода есть такая возможность.

Сообщение отредактировал Владимир_КПИ - Jan 7 2008, 16:59
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 7 2008, 17:40
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 7 2008, 18:05
Сообщение #7


дятел
*****

Группа: Свой
Сообщений: 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");
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 7 2008, 18:11
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 7 2008, 18:32
Сообщение #9


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата
Это понятно, можно и через указатели. Можно и переменную в РОН расположить (не знаю, можно ли это в CV), но вопрос у автора был не об этом:
Цитата
Например, я хочу записать в R0 содержимое ячейки памяти по адресу $00.

Действительно, точно непонятно что нужно автору, но если он хотел записать в RX содержимое ячейки
по адресу YY, то тогда нужно написать так:

register unsigned char myvar asm("rx");

....
myvar=*((unsigned char *)YY);
....

только, конечно, с этим нужно поосторожнее...
на значения X и YY есть некоторые ограничения...
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jan 8 2008, 07:57
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th August 2025 - 14:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01455 секунд с 7
ELECTRONIX ©2004-2016