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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AVR Studio ругается на порты F и G, mega128
Ydaloj
сообщение May 26 2015, 11:32
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 879
Регистрация: 20-06-11
Из: Карелия, Петрозаводск
Пользователь №: 65 799



Интернет говорит, что <где-то> установлен бит совместимости с мегой 103, и поэтому шиш тебе, а не порты Ф и Г

я только пишу программу, никакой меги нет и программаторов тоже
Чёж авр студио тогда ругается? и как мне убрать этот косяк?


--------------------
путь наименьшего сопротивления проходит по пути наитолстого провода (с)
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 26 2015, 12:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



1 Как именно ругается? Приведите текст сообщения об ошибке и текст строки программы, на которую студия ругается.

2 На каком языке пишите программу? Если на ассемблере, то, надеюсь Вы в курсе, что команды IN/OUT для доступа к этим регистрам не применимы?
Go to the top of the page
 
+Quote Post
Ydaloj
сообщение May 26 2015, 12:58
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 879
Регистрация: 20-06-11
Из: Карелия, Петрозаводск
Пользователь №: 65 799



Цитата
Если на ассемблере, то, надеюсь Вы в курсе, что команды IN/OUT для доступа к этим регистрам не применимы
Это только к ассемблеру относится?


--------------------
путь наименьшего сопротивления проходит по пути наитолстого провода (с)
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 26 2015, 13:02
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Ydaloj @ May 26 2015, 16:58) *
Это только к ассемблеру относится?

Да, относится только к ассемблеру. Транслятор Си сам применит другие команды к регистрам портов F и G.
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 26 2015, 13:05
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Ydaloj @ May 26 2015, 15:32) *
Интернет говорит, что <где-то> установлен бит совместимости с мегой 103, и поэтому шиш тебе, а не порты Ф и Г


Бит совместимости с Мегой103 снимается в фузах (Bit 1 in Extended Fuse Byte), по умолчанию он установлен. Студия тут ни при чем.
Go to the top of the page
 
+Quote Post
Ydaloj
сообщение May 26 2015, 13:10
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 879
Регистрация: 20-06-11
Из: Карелия, Петрозаводск
Пользователь №: 65 799



Upd: проект на Mega128 с компилятором AVR GCC тоже не позволяет работать с портами F и G командами I/O

с портами А...Е такой фигни нет - сразу определены адреса и доступ есть

Xenia, я до фузов не дошёл ещё - у меня пустой лист, даже без программы. А доступа уже нет.

При попытке настроить порты, А...Е настраиваются, а про F и G компилятор ругается
\\_PROGRAM\AVRStudio\MAIN.asm(71): error: Operand 1 out of range: 0x61

Прикрепленные изображения
Прикрепленное изображение
 


--------------------
путь наименьшего сопротивления проходит по пути наитолстого провода (с)
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 26 2015, 13:19
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Инженеры Atmel'а при проектировании микроконтроллеров AVR когда-то совершили стратегическую ошибку - отвели под область ввода-вывода слишком маленькое пространство адресов. Очень скоро количество регистров ввода-вывода в отдельных AVR стало превышать адресное пространство области ввода-вывода. Некоторые регистры ввода-вывода стали размещаться за пределами области ввода-вывода - команды IN/OUT для таких регистров применять нельзя. Если Вы посмотрите в документацию в раздел "Register Summary", то увидите, что регистры портов А,B,С и D находятся в области ввода-вывода, а регистры портов F и G лежат за пределами области ввода-вывода.
Go to the top of the page
 
+Quote Post
Ydaloj
сообщение May 26 2015, 13:24
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 879
Регистрация: 20-06-11
Из: Карелия, Петрозаводск
Пользователь №: 65 799



ясно, спасибо


--------------------
путь наименьшего сопротивления проходит по пути наитолстого провода (с)
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 26 2015, 14:12
Сообщение #9


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Палыч @ May 26 2015, 17:19) *
Инженеры Atmel'а при проектировании микроконтроллеров AVR когда-то совершили стратегическую ошибку - отвели под область ввода-вывода слишком маленькое пространство адресов. Очень скоро количество регистров ввода-вывода в отдельных AVR стало превышать адресное пространство области ввода-вывода. Некоторые регистры ввода-вывода стали размещаться за пределами области ввода-вывода - команды IN/OUT для таких регистров применять нельзя.


В командах IN и OUT для адреса/номера регистра ввода-вывода есть всего лишь 6 бит. Именно потому эти команды не могут охватить более 64 регистров. К остальным же приходится обращаться (читать или писать), как к памяти, а не через инструкции IN и OUT.

Ругать инженеров Atmel'а за непредусмотрительность глупо, т.к. в одном слове больше места не выкроишь. Ведь там же еще и номер регистра общего назначения находится, в который IN читает, а OUT пишет.

Т.е. проблема тут отнюдь не в том, что памяти отвели мало, а в том, что в 16-разрядную инструкцию (тогда еще 32-разрядных не было) длинное число не засунешь. Тогда как для инструкций IN и OUT таких чисел надо сразу два.

Делать инструкции IN и OUT двубайтными "инженеры" остереглись, т.к. тогда бы и выполнялась такая инструкция за два такта, а не за один. А это могло стать очень существенной потерей для архитектуры AVR, т.к. свое место под солнцем она отвоевала именно благодаря выполнению большинства инструкций за 1 такт, чем и замогилила sm.gif 51-ю архитектуру.

Кстати, раз уж разговор об этом зашел, замечу, что у Х-Мег (у которых разных регистров видимо-невидимо) есть, так называемый, "виртуальный порт". Это что-то вроде окошка, накладываемого на любой из портов, внутри которого действуют команды IN и OUT. Т.е. идея тут такова, что если требуется настолько быстрый ввод-вывод, что становится существенным, за сколько тактов он выполяется, то используемый порт совмещают с виртуальным, а дальше работают на вируальном порте однотактовыми командами IN и OUT.
Go to the top of the page
 
+Quote Post
alexunder
сообщение May 26 2015, 15:36
Сообщение #10


unexpected token
****

Группа: Свой
Сообщений: 899
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987



bb-offtopic.gif
Цитата(Палыч @ May 26 2015, 15:19) *
Инженеры Atmel'а при проектировании микроконтроллеров AVR когда-то совершили стратегическую ошибку - отвели под область ввода-вывода слишком маленькое пространство адресов.

Вот потому, дорогой Ydaloj, я тебе и советовал брать 51, но не послушал ты старого товарища...


--------------------
А у тебя SQUID, и значит, мы умрем.
Go to the top of the page
 
+Quote Post
RA9YSS
сообщение May 28 2015, 09:39
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 12-05-12
Из: Барнаул
Пользователь №: 71 809



А никто не подскажет мануальчик, как работать с портом G на Си, проблема таже что и у Ydaloj, студия 4.19 sad.gif
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 28 2015, 09:48
Сообщение #12


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(RA9YSS @ May 28 2015, 12:39) *
А никто не подскажет мануальчик, как работать с портом G на Си, проблема таже что и у Ydaloj, студия 4.19 sad.gif


Он, наверное, как PORTG и называется. Чему тут учиться? sm.gif

А если компилятор старый и PORTG не понимает, то доопределите его по образу и подобию других портов. Адресок порта G найдете в даташите.
Go to the top of the page
 
+Quote Post
Владивольт
сообщение May 28 2015, 09:59
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 14-02-10
Пользователь №: 55 490



Цитата(RA9YSS @ May 28 2015, 13:39) *
А никто не подскажет мануальчик, как работать с портом G на Си, проблема таже что и у Ydaloj, студия 4.19 sad.gif


Компилятор знает об отличиях портов, смотрите:
Код
#include <avr/io.h>

int main ( void )
{
    PORTA |= 0x01;
    PORTG |= 0x01;
}

превращается в
Код
int main ( void )
{
    PORTA |= 0x01;
  be:    d8 9a           sbi    0x1b, 0; 27
    PORTG |= 0x01;
  c0:    e5 e6           ldi    r30, 0x65; 101
  c2:    f0 e0           ldi    r31, 0x00; 0
  c4:    80 81           ld    r24, Z
  c6:    81 60           ori    r24, 0x01; 1
  c8:    80 83           st    Z, r24
}


--------------------
#define TRUE (4==(2*2))
Go to the top of the page
 
+Quote Post
RA9YSS
сообщение May 28 2015, 11:42
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 12-05-12
Из: Барнаул
Пользователь №: 71 809



И в правду всё норм. Извините, перепаниковал(((
Просто я весьма и весьма начинающий. На половину готовый проект, который пробовал на отладке с 32ой мегой собрался переносить на плату и решил взять мегу128 ( и в наличии есть, и памяти впрок) и вот случайно наткнулся на эту тему. Плату то уже развел.
Еще раз прошу прощения sad.gif
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jun 2 2015, 21:21
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Владивольт @ May 28 2015, 12:59) *
Компилятор знает об отличиях портов, смотрите:
Код
#include <avr/io.h>

int main ( void )
{
    PORTA |= 0x01;
    PORTG |= 0x01;
}

превращается в
Код
int main ( void )
{
    PORTA |= 0x01;
  be:    d8 9a           sbi    0x1b, 0; 27
    PORTG |= 0x01;
  c0:    e5 e6           ldi    r30, 0x65; 101
  c2:    f0 e0           ldi    r31, 0x00; 0
  c4:    80 81           ld    r24, Z
  c6:    81 60           ori    r24, 0x01; 1
  c8:    80 83           st    Z, r24
}

Охренеть можно , как Си "пахабит" благороднейший asm
Код
lds R16,PORTG
ori R16,0x01
sts PORTG,R16


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 09:51
Рейтинг@Mail.ru


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