Перейти к содержанию
    

Как прочитать РОН в WinAVR?

Поиском не нашел, решил задать вопрос..

Как на сях в WinAVR можно прочитать содержимое регистра, например R0?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поиском не нашел, решил задать вопрос..

Как на сях в WinAVR можно прочитать содержимое регистра, например R0?

 

Можно читать содержимое из памяти (регистровый файл)...

 

А можно сделать ассемблерную вставку + привязку, и компилятор "сгенерит" код в котором переменная в С будет

ассоциироватся с нужным Вам регистром.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно читать содержимое из памяти (регистровый файл)...

 

А можно сделать ассемблерную вставку + привязку, и компилятор "сгенерит" код в котором переменная в С будет

ассоциироватся с нужным Вам регистром.

 

 

Мне бы пример, если Вам несложно:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне бы пример, если Вам несложно:)

 

Статическая память микроконтроллеров AVR начинается с регистрового файла. Прямо с $00...

Открываете даташит на Ваш микроконтроллер и смотрите адрес нужного Вам регистра. Например R0=$00, R1=$01,...R31=$1F

Объявляем указатель: volatile char *R2 // название дано для наглядности...

Объявляем переменную: volatile char x // сюда будет загруженно содержимое

Заносим в указатель адрес регистра: R2 = 0x02 // адрес регистра R2

Читаем его : x = *R2 // содержимое регистра R2 - в переменной х

 

 

Можете ещё посмотреть функции для прямого доступа к памяти в WinAVR...

 

Ассемблерную вставку напишу позже, если понадобится... :) Там можно заставить компилятор ассоциировать например

переменную X c регистром общего назначения и соответственно любое обращение к X равноценно выбранному регистру.

Всё это делается исключительно для читабельности исходного файла, потому как машинный код что в первом примере, что

в последнем будет одинаков... :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как на сях в WinAVR можно прочитать содержимое регистра, например R0?
Хотел там мяукнуть, но обленился. Тут спрошу - а зачем?

Не подколки ради, просто чтение регистра из С ведь не самоцель.

Опишите задачу.

Тогда будет понятно, что советовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотел там мяукнуть, но обленился. Тут спрошу - а зачем?

 

Действительно, зачем !? Ради праздного любопытства ? Для отладки ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно, зачем !? Ради праздного любопытства ? Для отладки ?
Особенно учитывая то, что именно R0 - это временый регистр __temp_reg__ компилятора, он же используется в команде mul и его и зарезервировать нельзя, вся работа компилятора обломается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Особенно учитывая то, что именно R0 - это временый регистр __temp_reg__ компилятора, он же используется в команде mul и его и зарезервировать нельзя, вся работа компилятора обломается.

 

Кстати, WinAVR оперирует буквально 4-6 РОН и PUSH-ит их постоянно, остальные РОН пустуют.

У меня несколько раз было, что "борода" стека рушила данные в SRAM...

Я лично, всегда проверяю откомпиленный WinAVR код. Бывает придраться не к чему, а бывает наворочает мама не горюй.

Заметил, что более ранние версии давали более компактный код. На эту тему здесь уже был разговор. Сошлись, на том, что

большой код - высокая производительность, маленький код - низкая производительность... :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заметил, что более ранние версии давали более компактный код. На эту тему здесь уже был разговор.
на новых версиях, играясь с новыми ключами оптимизации, получаю более компактный код чем на версиях 2006-2007гг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на новых версиях, играясь с новыми ключами оптимизации...

А Вы не могли бы привести пример такой игры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы не могли бы привести пример такой игры?
В ветке, посвященной WinAVR20100110 и в соседней. Просто комментирую один ключ, компилирую, смотрю результат. Если код уменьшился - так и оставляю, если увеличился - возвращаю назад. И так пару итераций. "Играюсь" так, когда почти вся программа написана, таким образом удается найти оптимальное сочитание имеенно под конкретную программу, ее стиль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотел там мяукнуть, но обленился. Тут спрошу - а зачем?

Не подколки ради, просто чтение регистра из С ведь не самоцель.

Опишите задачу.

Тогда будет понятно, что советовать.

 

 

Да признаться стыдно..:) Хотел прочитать несколько байт памяти программ - на асме это делал командой LPM, в принципе все понятно было.

Решил попробовать на С, выяснил, что есть макрос pgm_read_byte_near(address_short) __LPM((uint16_t)(address_short)) - ну и решил,

что результат чтения как и на асме тоже сохраняется в регистре R0.

Микроконтроллерный С не так просто в освоении оказался..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что результат чтения как и на асме тоже сохраняется в регистре R0.

Дык... не обязательно же ж ! LPM Rd,Z

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык... не обязательно же ж ! LPM Rd,Z

 

 

А вроде командой LPM без операндов байт всегда читается в регистр R0?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

pgm_read_byte_near(address_short) __LPM((uint16_t)(address_short))

А вроде командой LPM без операндов байт всегда читается в регистр R0?
А кто сказал, что макрос пользуется командой LPM всегда? :-)

Это от процессора зависит.

Там условная компиляция по типу процессора и подставляется оптимальный вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...