Ydaloj 0 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба Интернет говорит, что <где-то> установлен бит совместимости с мегой 103, и поэтому шиш тебе, а не порты Ф и Г я только пишу программу, никакой меги нет и программаторов тоже Чёж авр студио тогда ругается? и как мне убрать этот косяк? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба 1 Как именно ругается? Приведите текст сообщения об ошибке и текст строки программы, на которую студия ругается. 2 На каком языке пишите программу? Если на ассемблере, то, надеюсь Вы в курсе, что команды IN/OUT для доступа к этим регистрам не применимы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ydaloj 0 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба Если на ассемблере, то, надеюсь Вы в курсе, что команды IN/OUT для доступа к этим регистрам не применимыЭто только к ассемблеру относится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба Это только к ассемблеру относится? Да, относится только к ассемблеру. Транслятор Си сам применит другие команды к регистрам портов F и G. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба Интернет говорит, что <где-то> установлен бит совместимости с мегой 103, и поэтому шиш тебе, а не порты Ф и Г Бит совместимости с Мегой103 снимается в фузах (Bit 1 in Extended Fuse Byte), по умолчанию он установлен. Студия тут ни при чем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ydaloj 0 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба Upd: проект на Mega128 с компилятором AVR GCC тоже не позволяет работать с портами F и G командами I/O с портами А...Е такой фигни нет - сразу определены адреса и доступ есть Xenia, я до фузов не дошёл ещё - у меня пустой лист, даже без программы. А доступа уже нет. При попытке настроить порты, А...Е настраиваются, а про F и G компилятор ругается \\_PROGRAM\AVRStudio\MAIN.asm(71): error: Operand 1 out of range: 0x61 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба Инженеры Atmel'а при проектировании микроконтроллеров AVR когда-то совершили стратегическую ошибку - отвели под область ввода-вывода слишком маленькое пространство адресов. Очень скоро количество регистров ввода-вывода в отдельных AVR стало превышать адресное пространство области ввода-вывода. Некоторые регистры ввода-вывода стали размещаться за пределами области ввода-вывода - команды IN/OUT для таких регистров применять нельзя. Если Вы посмотрите в документацию в раздел "Register Summary", то увидите, что регистры портов А,B,С и D находятся в области ввода-вывода, а регистры портов F и G лежат за пределами области ввода-вывода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ydaloj 0 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба ясно, спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба Инженеры Atmel'а при проектировании микроконтроллеров AVR когда-то совершили стратегическую ошибку - отвели под область ввода-вывода слишком маленькое пространство адресов. Очень скоро количество регистров ввода-вывода в отдельных AVR стало превышать адресное пространство области ввода-вывода. Некоторые регистры ввода-вывода стали размещаться за пределами области ввода-вывода - команды IN/OUT для таких регистров применять нельзя. В командах IN и OUT для адреса/номера регистра ввода-вывода есть всего лишь 6 бит. Именно потому эти команды не могут охватить более 64 регистров. К остальным же приходится обращаться (читать или писать), как к памяти, а не через инструкции IN и OUT. Ругать инженеров Atmel'а за непредусмотрительность глупо, т.к. в одном слове больше места не выкроишь. Ведь там же еще и номер регистра общего назначения находится, в который IN читает, а OUT пишет. Т.е. проблема тут отнюдь не в том, что памяти отвели мало, а в том, что в 16-разрядную инструкцию (тогда еще 32-разрядных не было) длинное число не засунешь. Тогда как для инструкций IN и OUT таких чисел надо сразу два. Делать инструкции IN и OUT двубайтными "инженеры" остереглись, т.к. тогда бы и выполнялась такая инструкция за два такта, а не за один. А это могло стать очень существенной потерей для архитектуры AVR, т.к. свое место под солнцем она отвоевала именно благодаря выполнению большинства инструкций за 1 такт, чем и замогилила :) 51-ю архитектуру. Кстати, раз уж разговор об этом зашел, замечу, что у Х-Мег (у которых разных регистров видимо-невидимо) есть, так называемый, "виртуальный порт". Это что-то вроде окошка, накладываемого на любой из портов, внутри которого действуют команды IN и OUT. Т.е. идея тут такова, что если требуется настолько быстрый ввод-вывод, что становится существенным, за сколько тактов он выполяется, то используемый порт совмещают с виртуальным, а дальше работают на вируальном порте однотактовыми командами IN и OUT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexunder 4 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба :bb-offtopic: Инженеры Atmel'а при проектировании микроконтроллеров AVR когда-то совершили стратегическую ошибку - отвели под область ввода-вывода слишком маленькое пространство адресов. Вот потому, дорогой Ydaloj, я тебе и советовал брать 51, но не послушал ты старого товарища... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RA9YSS 0 28 мая, 2015 Опубликовано 28 мая, 2015 · Жалоба А никто не подскажет мануальчик, как работать с портом G на Си, проблема таже что и у Ydaloj, студия 4.19 :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 28 мая, 2015 Опубликовано 28 мая, 2015 · Жалоба А никто не подскажет мануальчик, как работать с портом G на Си, проблема таже что и у Ydaloj, студия 4.19 :( Он, наверное, как PORTG и называется. Чему тут учиться? :) А если компилятор старый и PORTG не понимает, то доопределите его по образу и подобию других портов. Адресок порта G найдете в даташите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladivolt 0 28 мая, 2015 Опубликовано 28 мая, 2015 · Жалоба А никто не подскажет мануальчик, как работать с портом G на Си, проблема таже что и у Ydaloj, студия 4.19 :( Компилятор знает об отличиях портов, смотрите: #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 } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RA9YSS 0 28 мая, 2015 Опубликовано 28 мая, 2015 · Жалоба И в правду всё норм. Извините, перепаниковал((( Просто я весьма и весьма начинающий. На половину готовый проект, который пробовал на отладке с 32ой мегой собрался переносить на плату и решил взять мегу128 ( и в наличии есть, и памяти впрок) и вот случайно наткнулся на эту тему. Плату то уже развел. Еще раз прошу прощения :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 2 июня, 2015 Опубликовано 2 июня, 2015 · Жалоба Компилятор знает об отличиях портов, смотрите: #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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться