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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Прибавить константу к регистру!
777777
сообщение Mar 6 2008, 08:11
Сообщение #1


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Есль команды subi, sbci, где же addi, adci?
Go to the top of the page
 
+Quote Post
starter48
сообщение Mar 6 2008, 08:26
Сообщение #2


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

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(777777 @ Mar 6 2008, 14:11) *
Есль команды subi, sbci, где же addi, adci?

Отнять константу с минусом.
Т.е. если хочешь прибавить 1, то отними -1 ($FF):
subi r16,$FF ;прибавить 1 к r16
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 6 2008, 08:38
Сообщение #3


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(starter48 @ Mar 6 2008, 11:26) *
Отнять константу с минусом.


Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот. Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 6 2008, 08:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(777777 @ Mar 6 2008, 12:38) *
Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот. Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее.

А какая разница напишешь ли ты так:
Код
adi  r2,low(1234)
adci r2,high(1234)

или так
Код
subi  r2,low(-1234)
sbci  r2,high(-1234)

Есть кстати adiw - сразу константу к регистровой паре прибавляет. Можно посмотреть (если константа небольшая)

А что значит "условные пропуски какие то странные"?
По моему наличие всех необходимых бит признаков и установка их при любой операции - самый большой прорыв, по сравнению с х51. Именно это дало такой прирост производительности при работе с арифметикой. Там сравнение - это просто пляски с бубном.
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 6 2008, 09:05
Сообщение #5


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(777777 @ Mar 6 2008, 11:38) *
Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот.

А вы знаете 8 разрядный контроллер с более удобной системой команд и архитектурой?

Цитата(777777 @ Mar 6 2008, 11:38) *
Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее.

Это дело вкуса, вы можете написать макросы addi и adci
к тому же в тех кусках которые приходится писать на асме у меня почему то чаще используется вычитание константы и проверка флагов так получается удобнее. а обе команды не влезают в пространство 16 бит, и именно вычитание оставили не просто так.
Go to the top of the page
 
+Quote Post
starter48
сообщение Mar 6 2008, 09:07
Сообщение #6


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

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(777777 @ Mar 6 2008, 14:38) *
Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот. Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее.

Этот процессор задумывался для работы с компиляторами языков высого уровня.
Когда пишешь на Си, о таких мелочах и не задумываешься smile.gif
На асме в наше время пишут только критичные участки кода.
Go to the top of the page
 
+Quote Post
vet
сообщение Mar 6 2008, 09:08
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(SasaVitebsk @ Mar 6 2008, 11:50) *
По моему наличие всех необходимых бит признаков и установка их при любой операции - самый большой прорыв, по сравнению с х51. Именно это дало такой прирост производительности при работе с арифметикой. Там сравнение - это просто пляски с бубном.

а мне вот в AVR бита четности не хватает... в 51 он временами сильно упрощал битовые манипуляции 05.gif
впрочем, по сравнению с развитыми арифметикой и адресацией это неважно smile.gif


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 6 2008, 10:19
Сообщение #8


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(SasaVitebsk @ Mar 6 2008, 11:50) *
А что значит "условные пропуски какие то странные"?


Условные переходы сделаны в виде "переход если условие выполнено". Однако для портов и регистров предусмотрели команды "пропуск если бит установлен/сброшен". Почему бы это не сделать для битов регистра состояния? Например, получение абсолютного значения можно было бы сделать так:
tst r0
skip if pl
neg r0
; здесь в r0 его абсолютное значение

Ага, но ведь регистр состояния - тоже порт! Однако фиг - команда sbrs SREG, SREG_Z не прокатывает - SREG не попадает в диапазон адресов, допустимых в этой команде.


Цитата(KRS @ Mar 6 2008, 12:05) *
А вы знаете 8 разрядный контроллер с более удобной системой команд и архитектурой?


Да пожалуй что нет... sad.gif

Цитата(starter48 @ Mar 6 2008, 12:07) *
Этот процессор задумывался для работы с компиляторами языков высого уровня.
Когда пишешь на Си, о таких мелочах и не задумываешься smile.gif


Кстати, у меня почему-то не работает WinAvr на Висте - пишет "avr-gcc: installation problem, cannot exec `cc1': No such file or directory"

На ХР все нормально, хотя ставил абсолютно одинаковым образом.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 6 2008, 10:26
Сообщение #9


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
tst r0
skip if pl
neg r0


А какая разница с переходом???
Код
tst r0
brpl $+4
neg r0


Даже по тактам тоже самое...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 6 2008, 11:11
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(777777 @ Mar 6 2008, 12:19) *
Ага, но ведь регистр состояния - тоже порт! Однако фиг - команда sbrs SREG, SREG_Z не прокатывает

А зачем она нужна если для SREG можно более цивильно использовать
BREQ / BRNE
BRTS / BRTC
BRCS / BRCC
BRHS / BRHC
BRMI / BRPL
BRVS / BRVC
BRBS / BRBC

IMHO skip'ы SBRS /SBRC, SBIC / SBIS - Pic'овый непотреб, хотя иногда (но редко) бывает полезным.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 6 2008, 11:46
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(defunct @ Mar 6 2008, 14:11) *
А зачем она нужна если для SREG можно более цивильно использовать
BREQ / BRNE
BRTS / BRTC
BRCS / BRCC
BRHS / BRHC
BRMI / BRPL
BRVS / BRVC
BRBS / BRBC


IMHO, в результате исходник загромождается метками, либо надо использовать форму $+n (что потенциально источник проблем, типа когда rjmp не хватит, и заменишь ее на jmp). Если бы были хоть локальные метки - увы, компилятора, который умеет использовать локальные метки как в spasm/cvasm для PIC, для AVR мне не попадалось...
Цитата
IMHO skip'ы SBRS /SBRC, SBIC / SBIS - Pic'овый непотреб, хотя иногда (но редко) бывает полезным.

Бывает, факт. И я бы не сказал, что редко... Ладно, хорошо хоть по растактовке обход одной команды типично одинаков. Вот на MSP430 условный переход всегда два цикла - ОЧЕНЬ неудобно...
Go to the top of the page
 
+Quote Post
ae_
сообщение Mar 6 2008, 15:37
Сообщение #12


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(rx3apf @ Mar 6 2008, 20:46) *
IMHO, в результате исходник загромождается метками, либо надо использовать форму $+n (что потенциально источник проблем, типа когда rjmp не хватит, и заменишь ее на jmp). Если бы были хоть локальные метки - увы, компилятора, который умеет использовать локальные метки как в spasm/cvasm для PIC, для AVR мне не попадалось...

tavrasm умеет локальные метки, но не обновляется с 2005.
Go to the top of the page
 
+Quote Post
Brutaller
сообщение Mar 6 2008, 18:41
Сообщение #13





Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779



Цитата(ae_ @ Mar 6 2008, 18:37) *
tavrasm умеет локальные метки, но не обновляется с 2005.

Да да, tavrasm с локальными метками дружит. Если никаких багов не найдено, то зачем ему обновляться? Знаю людей, которые очень долго его юзают и нареканий не имеют. Так что проверенный временем асм.

Теперь плюсы/минусы/особенности оного:
  • Поддержка локальных меток (локальная метка должна начинаться со знака подчекивания, например _label )
  • Не поддерживается условное ассемблирование, типа IFDEF и т.п.
  • Работает с обычными макросами, но не поддерживает условия в макросах
  • Не генерит OBJ и MAP, только LST (зато красивее чем у других smile.gif )
  • В некоторых инклудах придется закомментировать OR и т.п. чтоб не было конфликтов с мнемониками
  • И еще некоторые нюансы, например вместо adiw ZH:ZL надо писать просто adiw Z
В общем на вкус и цвет...

Сообщение отредактировал Brutaller - Mar 6 2008, 18:47
Go to the top of the page
 
+Quote Post
Lepeksiy
сообщение Mar 6 2008, 19:31
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 25-04-07
Пользователь №: 27 294



GNU assembler (в том числе "as.exe" из комплекта WinAVR) поддерживает локальные метки.
Go to the top of the page
 
+Quote Post
Brutaller
сообщение Mar 6 2008, 19:43
Сообщение #15





Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779



Цитата(Lepeksiy @ Mar 6 2008, 22:31) *
GNU assembler (в том числе "as.exe" из комплекта WinAVR) поддерживает локальные метки.

А что у него с вышеперечисленными мной пунктами по поводу tavrasm ?

Сообщение отредактировал Brutaller - Mar 6 2008, 19:44
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Mar 6 2008, 19:50
Сообщение #16


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(Brutaller @ Mar 6 2008, 21:41) *
Да да, tavrasm с локальными метками дружит. Если никаких багов не найдено, то зачем ему обновляться? Знаю людей, которые очень долго его юзают и нареканий не имеют. Так что проверенный временем асм.

Теперь плюсы/минусы/особенности оного:
    ...........
  • В некоторых инклудах придется закомментировать OR и т.п. чтоб не было конфликтов с мнемониками ...

Прилагаемый к AVR Studio ассемблер AVRASM2 тоже ругается на OR. Приходится комментировать.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
Brutaller
сообщение Mar 6 2008, 19:59
Сообщение #17





Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779



Цитата(Nanobyte @ Mar 6 2008, 22:50) *
Прилагаемый к AVR Studio ассемблер AVRASM2 тоже ругается на OR. Приходится комментировать.

Да это всё такие мелочи, что не стоит даже внимание обращать smile.gif
Go to the top of the page
 
+Quote Post
Lepeksiy
сообщение Mar 6 2008, 20:21
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 25-04-07
Пользователь №: 27 294



Цитата(Brutaller @ Mar 6 2008, 21:43) *
А что у него с вышеперечисленными мной пунктами по поводу tavrasm ?

Нет смысла рассматривать as.exe отдельно от всего набора. За условное ассемблирование отвечает тот же avr-cpp.exe, как и при условной компиляции си. Соответственно и возможности те же.
Насчет остального - не обращал внимания, т.к. на асме пишу только в крайнем случае.

А вообще это офтоп для этой темы.

Сообщение отредактировал Lepeksiy - Mar 6 2008, 20:21
Go to the top of the page
 
+Quote Post
zhevak
сообщение Mar 6 2008, 20:52
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(starter48 @ Mar 6 2008, 14:07) *
Этот процессор задумывался для работы с компиляторами языков высого уровня.
Когда пишешь на Си, о таких мелочах и не задумываешься smile.gif
На асме в наше время пишут только критичные участки кода.


Абсолютно верно!

Иногда все-таки нет-нет, да появляются люди, которым приходится объяснять с самого начала, от Адама и Евы. Ну что ж, терпите.

Ядро AVR уникальное. Разрабатывалось оно не в одиночку "железячниками", а в тесном контакте с программистами, которые пишут компиляторы. И не просто компиляторы, а Си-компиляторы. Это было сделано преднамеренно. ATMEL (и не только она одна) проанализировала стоимость конечного изделий, и пришла к выводу, что подавляюще большую долю при создании девайса занимает стоимость разработки программного обеспечениия. Итенденция эта год от года только увеличивается.

Если б АТМЕЛ заботилась только о своих проблемах, она бы родила что-то другое. Но АТМЕЛ играет в многоходовые игры, и она озаботилась уменьшением себестоимости изделий своих клиентов в целом. А поскольку наибольшая стоимость в разработке изделий падает на ПО, то было бы не плохо это как-то уменьшить. Как?

Еще один анализ, теперь уже касающийся разработки ПО. Программисты сейчас пишут ПО в основном на Си. Почему? -- Да, опять же исходя из экономических сооображений! Программа написанная на Си будет стоить дешевле, проги написанной на ассемблере. (Я сейчас не хочу вдваться в дискуссию по поводу отвязанных от типа ядра программистов Си-шников, и жестко привязанных к типу ядра программистов-ассеблеристов, и количества их на рынке труда.) Важно понять то, что если удастся сделять ядро такое, что при написании программ на Си будет генерироваться объем кода незначительно худший, чем при написании программ на ассемблере, то это будет весьма востребованное на рынке ядро. АТМЕЛу удалось сделать такое ядро.

Резюме будет следущее.

Господа-товарищи, АВР -- уникальное ядро. Оно "заточено" под Си-шное программирование. А то обстоятельство, что для АВР можно писать на ассемблере, так это факультативно, хотите -- пишите!

Если "полистать" и-нет, то можно заметить, что для АВР программы в основном люди пишут на Си. Как сказал starter48, только критические участки кода пишутся на асме. И такой подход выбран это не ради религиозных войн программистов, а ради снижения себестоимости изделия. Но жизнь -- богатая штука, и порой встречаются люди (кустари, волки-одиночки), которые неповязаны на экономический фактор, не озабочены вопросами прибыли и себестоимости. В основном это люди -- любители или студенты, т.е. люди не связанные с производством. Конечно, им сложно понять специфику АВР-ядра.


// Извините, если это было очень долго и нудно.

Что касается высказывания "условные пропуски оказались какими-то странными", то опять-таки надо смотреть несколько глубже.

Вместо подробного описания здесь, я очень рекомендую прочитать серию статей И.Каршенбойма http://www.compitech.ru/html.cgi/rubrikator/micros.htm

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

Итак, хотя читать эту серию статей сложно, и специфика там не совсем наша, но автор четко расписываеет почему именно в таком направлении идет развитие ядер. Чем хороши файловые регистровы, почему сейчас использубтся два стека (отдельный стек для адресов возвратов и отдельный стек для аргументов функций), чем выгодны "странные условные пропуски", почему Гарвардская архитектура работает быстрее Фон-Неймановской, и т.д.

Читайте, и не смотрите на то, что многое покажется вам не понятным. Со временем вы поймете.

Удачи!

Сообщение отредактировал zhevak - Mar 6 2008, 20:52


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 6 2008, 21:00
Сообщение #20


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(zhevak @ Mar 6 2008, 23:30) *
...
Разрабатывалось оно не в одиночку "железячниками", а в тесном контакте с программистами, которые пишут компиляторы. И не просто компиляторы, а Си-компиляторы. Это было сделано преднамеренно. ATMEL (и не только она одна) проанализировала стоимость конечного изделий, и пришла к выводу, что подавляюще большую долю при создании девайса занимает стоимость разработки программного обеспечениия. Итенденция эта год от года только увеличивается.
...
Господа-товарищи, АВР -- уникальное ядро. Оно "заточено" под Си-шное программирование.
...


Это Вы начитались творений маркетологов фирмы Atmel!!!! AVR ядро - студенческий прект!!!!

Как минимум 3 свойства ядра создающие трудности для генерации эффективного кода С компилятором.

1. Неравноправность регистров, для половины регистров нельзя выполнять дейсвия с константами.

2. Отсутствие атомарной записи в регистр стека. Приходиться отключать прерывания при записи в него (GCC), или использовать два стека (IAR).

3. Некоторые команды работают с фиксироваными регистрами (r0, r1) MUL*, LPM.

И это все мелочи - стандарт языка С предпологает единое адресное пространство - ни один процесор с Гарвадской архитектурой не имеет право называться С ориентированым.

Анатолий.

Сообщение отредактировал aesok - Mar 6 2008, 21:38
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 6 2008, 22:03
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(777777 @ Mar 6 2008, 14:19) *
Условные переходы сделаны в виде "переход если условие выполнено". Однако для портов и регистров предусмотрели команды "пропуск если бит установлен/сброшен". Почему бы это не сделать для битов регистра состояния? Например, получение абсолютного значения можно было бы сделать так:


Как это не сделан???
BRBC s,k Перейти если флаг в SREG очищен if(SREG(s)==0) PC = PC + k + 1 None 1/2
BRBS s,k Перейти если флаг в SREG установлен if(SREG(s)==1) PC = PC + k + 1 None 1/2


Цитата(aesok @ Mar 7 2008, 01:00) *
Это Вы начитались творений маркетологов фирмы Atmel!!!! AVR ядро - студенческий прект!!!!

Как минимум 3 свойства ядра создающие трудности для генерации эффективного кода С компилятором.

1. Неравноправность регистров, для половины регистров нельзя выполнять дейсвия с константами.

2. Отсутствие атомарной записи в регистр стека. Приходиться отключать прерывания при записи в него (GCC), или использовать два стека (IAR).

3. Некоторые команды работают с фиксироваными регистрами (r0, r1) MUL*, LPM.

И это все мелочи - стандарт языка С предпологает единое адресное пространство - ни один процесор с Гарвадской архитектурой не имеет право называться С ориентированым.

Анатолий.


Простите, но это бред. Таких претензий к ЛЮБОМУ процессору включая х86 наберётся в 10 раз больше.
1) Достаточно пары регистров. Для х86 неравноправность регистров просто вопиющая.
2) Есть возможность создавать два стека. И это само по себе уже решает проблему. Насколько я понимаю, проблема не в атомарности, а в обращении к стеку с нужным смещением. Для передачи параметров в п/п. И эта задача легко решена. Более того наличие трёх индексных регистровых пар - это более чем скажем в том же х86, я уже просто не говорю о др. МК.
3) С чем сравниваем? Тоже наблюдаем в x51, PIC, MSP!!! Понятно что умножение и деление - не совсем ядро, а довесок. А как это по другому реализовать? В х86 те же проблемы. Если не сопроцессор, то вообще результат в аккумуляторе, если сопроцессор, то в стеке, а отнюдь не в произвольном регистре.

Так с какой такой архитектурой вы ровняли?
Go to the top of the page
 
+Quote Post
zhevak
сообщение Mar 6 2008, 22:08
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(aesok @ Mar 7 2008, 02:00) *
Это Вы начитались творений маркетологов фирмы Atmel!!!! AVR ядро - студенческий прект!!!!

Как минимум 3 свойства ядра создающие трудность для генерации эффективного кода С компилятором.

1. Неравноправность регистров, для половины регистров нельзя выполнять дейсвия с константами.

2. Отсутствие атомарной записи в регистр стека. Приходиться отключать прерывания при записи в него (GCC), или использовать два стека (IAR).

3. Некоторые команды работают с фиксироваными регистрами (r0, r1) MUL*, LPM.

И это все мелочи - стандарт языка С предпологает единое адресное пространство - ни один процесор с Гарвадской архитектурой не имеет право называться С ориентированым.

Анатолий.


Уважаемый Анатолий,

Это очень хорошо, что Вы очень осведомленный человек. Очень не хочу с вами вступать в бессмысленную полемику. Но поскольку Ваш пост -- это почти персональный вызов, позволю себе отметить только три момента.

1. "Это Вы начитались творений маркетологов фирмы Atmel!!!! AVR ядро - студенческий прект!!!!"
Этот выпад я просто проигнорирую. Но порошу Вас указать конкретные источники, которые бы мне следовало "почитать", дабы не вступать с Вами в столь яростное противоречие. Я -- парень неленивый, и даже где-то упорный. Пожалуйста, перечислите здесь, что Вы читали. Я думаю, что приведенный Вами список будет полезен всем, а не только мне.

2. Где было сказано, что АВР -- идельное ядро? Такого я не говорил. Другими словами, ядро АВР --нормальное рабочее ядро. Но как и в любой вещи в нем тоже есть недостатки. Некоторые из них Вы перечислили. Конечно, не все удалось сделать "на отлично" АТМЕЛ-овским разработчикам. Если б ядро было идеальное, т.е. не содержало недостатков, то наверное бы другие 8-разрядные ядра занимали бы еще меньшую долю на рынке.

3. "ни один процесор с Гарвадской архитектурой не имеет право называться С ориентированым."
Ну это уже придирки! Вы же не можете утверждать, что ПО "для Фон-Неймана" пишется на чистом Си, а ПО "для Гарварда" -- на чем-то другом, но точно -- не на Си. Синтаксисы языка и для той, и для другой архитектур сильно совпадают, поэтому, какая разница -- чистый-ли это Си, или это Си, расширенный для работы с "Гарвардом". Суть от этого не меняется. Си он и в Африке Си, разве что только черный!


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 6 2008, 22:44
Сообщение #23


дятел
*****

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



Цитата(zhevak @ Mar 7 2008, 01:08) *
1. "Это Вы начитались творений маркетологов фирмы Atmel!!!! AVR ядро - студенческий прект!!!!"
Этот выпад я просто проигнорирую. Но порошу Вас указать конкретные источники, которые бы мне следовало "почитать", дабы не вступать с Вами в столь яростное противоречие.
http://www.avrtv.com/2007/09/09/avrtv-special-005/
Цитата
2.
3.
http://savannah.nongnu.org/project/memberl...?group=avr-libc
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 6 2008, 22:56
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(SasaVitebsk @ Mar 7 2008, 01:03) *
1) Достаточно пары регистров. Для х86 неравноправность регистров просто вопиющая.

Савнивать их не корректно, x86 это CISC просессор, AVR- это RISC.

Цитата
2) Есть возможность создавать два стека. И это само по себе уже решает проблему. Насколько я понимаю, проблема не в атомарности, а в обращении к стеку с нужным смещением. Для передачи параметров в п/п. И эта задача легко решена. Более того наличие трёх индексных регистровых пар - это более чем скажем в том же х86, я уже просто не говорю о др. МК.


Место под локальные переменные выделяеться в стеке. Общая пратика С компиляторов использовать один общий стек и для хранения адресов возврата и для хранения локальных переменных. Для выделеления памяти под локальные переменые необходимо изменить значение регистра указателя стека, и эта опрерация (по крайней мере операция записи в SP) должна быть атамарной. Нельзя допускать вызова обработчика прерывания между операциями записи в регистры SPL и SPH. В GCC для изменения SP приходиться применяеть такой код:

Код
in r28,__SP_L__ ;  49 *movhi_sp/2 [length = 2]
in r29,__SP_H__

sbiw r28,8 ;  50 *addhi3/3 [length = 1]

in __tmp_reg__,__SREG__ ;  51 *movhi_sp/1 [length = 5]
cli
out __SP_H__,r29
out __SREG__,__tmp_reg__
out __SP_L__,r28


IAR для оптимизации кода использует 2 стека, в результате на разработчика ложиться задача определения максимальной глубины вложеных вызовов и выделения памяти для стеков, и возникает потеря памяти при задании размеров стека с запасом.

Цитата
3) С чем сравниваем? Тоже наблюдаем в x51, PIC, MSP!!! Понятно что умножение и деление - не совсем ядро, а довесок. А как это по другому реализовать? В х86 те же проблемы. Если не сопроцессор, то вообще результат в аккумуляторе, если сопроцессор, то в стеке, а отнюдь не в произвольном регистре.

Так с какой такой архитектурой вы ровняли?


В идеальной RISK все регистры равноправны, и уж темболее нет никакого акумулятора. Акумулятор - это преригатива CISC архитектур.

У меня нет ни каких комплексов когото с кемто сравнивать, я пишу о тех проблемах которые вставали перед разработчиками avr порта в GCC. И для которых рекламные флаеры фирмы Atmel просто бумажки... Я излазил его вдоль и поперек (не весь GCC smile.gif , всего лиш) avr backend.

Анатолий.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Mar 6 2008, 23:17
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата
Я думаю, что приведенный Вами список будет полезен всем, а не только мне.


Цитата(singlskv @ Mar 7 2008, 03:44) *


Воздержусь от комментариев. Пусть другие участники форума оценят полезность "списка".

Считаю, что продолжение дискуссии -- это пустая трата времени, она никому не принесет пользы, каждый из нас останется при своем мнении, а наблюдатели не почерпнут для себя ничего умного. Мне остается только поблагодарить вас за участие. Спасибо и удачи Вам! smile.gif


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 6 2008, 23:55
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(aesok @ Mar 7 2008, 02:56) *
В идеальной RISK все регистры равноправны, и уж темболее нет никакого акумулятора. Акумулятор - это преригатива CISC архитектур.


Я читал статьи на заре возникновения RISC архитектуры. Можно поискать, но думаю вы заблуждаетесь. Изначально основные особенности данной архитектуры определялись следующими особенностями.
1) Выполнение команд за 1 такт.
2) Высокая тактовая частота.
3) Большое количество регистров.
4) Аккумулятор w для операций в обе стороны.
5) Малое количество команд (обосновывалось тем, что 20 процентов команд используются при написании 80 процентов кода)

Основные - п.1 и 2. Типичным представителем является PIC.

Но собственно, я не собираюсь обсуждать теоретику.
Ответьте просто. Какой МК, по-вашему идеально подходит для Си компилятора?

Высказывания разработчиков кристаллов не в счёт. 99% кристаллов общего назначения, по словам разработчиков, заточены под Си. Встречал ещё Ява ориентированные и Форт ориентированные. Но это единицы.

Дал поиском сейчас запрос. Получил след ссылки
http://www.intuit.ru/department/hardware/csorg/10/
http://www.computer-museum.ru/technlgy/risc.htm
http://www.terralab.ru/system/235190/

В третьем, к примеру, можно прочитать такую фразу:
Цитата
Второе важное усовершенствование RISC-процессоров, целиком вытекающее из Load/Store-архитектуры, - увеличение числа GPR (регистров общего назначения). Варианты, у которых меньше шестнадцати GPR, - большая редкость, причем почти все эти регистры полностью равноправны, что позволяет компилятору свободно распоряжаться ими, сохраняя большую часть промежуточных данных именно там, а не в стеке или оперативной памяти.

Ну и так далее.

Короче, я думаю, если вы сейчас не упрётесь рогом, а переосмыслите и сравните, то вы поймёте, что были не точны. Для меня совершенно очевидно, что создание компилятора для AVR было как минимум не сложнее, чем к любому другому МК данного класса.
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 7 2008, 00:27
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(zhevak @ Mar 7 2008, 02:17) *
Считаю, что продолжение дискуссии -- это пустая трата времени, она никому не принесет пользы, каждый из нас останется при своем мнении, а наблюдатели не почерпнут для себя ничего умного. Мне остается только поблагодарить вас за участие. Спасибо и удачи Вам! smile.gif


Я не применяю эпитеты хороший или полохой применительно к контролерам, это не инженерные понятия, оставим их для фанатов.

Да Вы правы, эта дискусия выходит за рамки этого форума. Здесь обсуждают применение AVR-ок а не проблемы написания для него компиляторов.

Я своим постом хотел выразить несогласие с рекламными заявлениями фирмы Atmel, и озвученые Вами, что AVR ядро являются какими-то специально разработаным для компилятора С, и привел несколько свойств ядра которые мешают генерировать максимально эффекивный код компилятором. При этом для AVR существуют несколько разных компиляторов С и эффиктивность их применения доказана практически.

Анатолий.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 7 2008, 00:29
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



PS: Ещё одно дополнение.
Вот выдержка из последнего источника:
Цитата
"В чистом виде" идею "легкого" RISC-процессора можно встретить у компании ARM с ее невероятно простыми и тем не менее весьма эффективными 32-разрядными CPU.

В то же время выдержка из Главы "Набор команд ARM7" раздела "Команды обработки данных" (стр.25) книги Т.Мартина "Микроконтроллеры ARM7.Семейство LPC2000 компании Philips.".
Цитата
Эти особенности предоставляют нам богатый набор команд обработки данных,который, с одной стороны, позволяет создавать очень эффективные программы, а с другой - является источником ночных кошмаров для разработчиков компиляторов.


Иными словами, сложность создания компилятора, и эффективность генерации этим компилятором кода - отнюдь не жёстко взаимосвязанные вещи.
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 7 2008, 00:55
Сообщение #29


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата
Ответьте просто. Какой МК, по-вашему идеально подходит для Си компилятора?


Все архитектуры я не изучал.

Когда я смотрел набор инструкций AVR32 (после AVR) у меня было ощущение что он просто идеально ложиться в кодогенератор GCC. Но я не смотрел AVR32 backend и не знаю настолько ли все хороно на самом деле и нет ли каких то подводных камней.

Цитата(SasaVitebsk @ Mar 7 2008, 03:29) *
Иными словами, сложность создания компилятора, и эффективность генерации этим компилятором кода - отнюдь не жёстко взаимосвязанные вещи.


Разработчика не волнует сложноть компилятора, его волнует эффективноть кода. Но когда запизь в регистр стека требует не 2 инструкции а 5, а эта операция выполняеться дважды для любой функции которая имеет локальные переменые - пользователь вправе сказать - код не эффективный. И это особенность архитектуры "заточеной" под Си-шное программирование.

Но опять же это есть только несколько проблем при всех пложительных свойствах AVR ядра для програмирования на С.

Анатолий.

Сообщение отредактировал aesok - Mar 7 2008, 01:11
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 7 2008, 07:30
Сообщение #30


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(777777 @ Mar 6 2008, 11:11) *
Есль команды subi, sbci, где же addi, adci?

А кто тебе мешает написать макросы adi и adci ?
Я так и делаю, когда мне "не хватает" некоторых команд


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
vet
сообщение Mar 7 2008, 08:22
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(aesok @ Mar 7 2008, 03:55) *
Разработчика не волнует сложноть компилятора, его волнует эффективноть кода. Но когда запизь в регистр стека требует не 2 инструкции а 5, а эта операция выполняеться дважды для любой функции которая имеет локальные переменые - пользователь вправе сказать - код не эффективный. И это особенность архитектуры "заточеной" под Си-шное программирование.

Архитектура AVR подталкивает к ведению раздельных стеков для данных и для вызовов п/п, как совершенно правильно поступает IAR. Описанная проблема при этом просто неактуальна, обращение к 8-бит переменной на стеке данных - 1 инструкция.
Разработчики AVR-GCC решили обойтись одним стеком, видимо, чтобы сэкономить усилия по адаптации кодогенератора, как результат - медленные прологи/эпилоги.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 8 2008, 18:12
Сообщение #32


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(SasaVitebsk @ Mar 7 2008, 02:55) *
Какой МК, по-вашему идеально подходит для Си компилятора?


Думаю что для С-компилятора идеально подходит архитектура PDP-11. Правда, скорее всего дело обстоит наоборот - так как С разрабатывался на этой архитеркуре, то он получился таким, чтобы максимально ей соответствовать.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 9 2008, 15:22
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(777777 @ Mar 8 2008, 22:12) *
Думаю что для С-компилятора идеально подходит архитектура PDP-11. Правда, скорее всего дело обстоит наоборот - так как С разрабатывался на этой архитеркуре, то он получился таким, чтобы максимально ей соответствовать.


Основные преимущества, от которых тащились программисты PDP-11, это ортогональная система комманд, которая позволяла обходится без ассемблера. То есть код большинства комманд и способов адресации легко запоминался в восьмеричной системе счисления. Тем не менее ограничения там были, на сколько я помню. То есть стопроцентной ортогональности не было.

При создании полного компилятора, при котором сначала создаётся ассемблерный текст, эти преимущества не слишком велики, на мой взгляд.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 9 2008, 16:47
Сообщение #34


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(SasaVitebsk @ Mar 9 2008, 15:22) *
Основные преимущества, от которых тащились программисты PDP-11, это ортогональная система комманд, которая позволяла обходится без ассемблера. То есть код большинства команд и способов адресации легко запоминался в восьмеричной системе счисления. Тем не менее ограничения там были, на сколько я помню. То есть стопроцентной ортогональности не было

Добавлю, в PDP-11 почти всё было передовым и оригинальным. Проц был 16-разрядным, но работать с байтами было очень комфортно. Двенадцать (!) режимов адресации с почти любым регистром(!), их и сейчас не во всех микроконтроллерах и микропроцессорах можно найти. Было всего 8 РОНов, в число которых входили PC и SP на общих правах. Адреса области ввода-вывода были частью адресов памяти и т.д., всего не перескажешь. Это был шедевр, который интеловские уроды зарыли.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 9 2008, 17:23
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(=GM= @ Mar 9 2008, 20:47) *
Это был шедевр, который интеловские уроды зарыли.

smile.gif

А по-моему, у всего своя причина должна быть. То что зарыли - естественное следствие его же собственных ограничений.

1) Ортогональность, при 16 битах не позволяла работать с ОЗУ превышавшем 64К. Требовалось либо вводить регистры страниц, либо переходить на 32 бита.
2) Общее адресное пространство для устр-в ввода вывода, решение удобное для МК, но никак не для компов.
3) Асинхронная шина, на мой взгляд, тоже очень неудачное решение.

При развитых средствах разработки, по типу Си, сама ортогональность, наличие и колличество способов адресации и т.п. плюсы - скрыты для программиста, а вот граница адресного пространства - серьёзный недостаток.

К =GM= А с ВМ3 работали? smile.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 9 2008, 19:45
Сообщение #36


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А по-моему, у всего своя причина должна быть. То что зарыли - естественное следствие его же собственных ограничений.


Ну тут видимо Вы не сталкивались с продолжением идеи PDP11 - VAX. Советская цельнотянутая копия - CM1700.

16 ортогональных 32-хбитных регистров, около 20 методов адресации - даже больше, чем в PDP-11, система комманд устроена была весьма хитро - байт кода операции и дополнительные байты режимов адресации, т.е. нефиксированная длинна (как в 80x86, однако, намного более аккуратная и последовательная, а не нагромождение расширений, как у Intel). Хотя, конечно, нефиксированная длинна черевата усложнением разбирателя, но и это можно побороть (борет же тот же Intel). Ну и конечно это CISC в чистом виде - чего стоят расчеты полиномов одной коммандой проца smile.gif

С другой стороны - IBM360/370 и MC680x0 - 8 регистров данных и 8 адресных регистров. Фиксированные длины комманд (почти). Правда, в более поздних версиях 680x0 (начиная с 030) были более уравнены в правах регистры данных и регистры адреса, но GCC на то время делал отличный код для 68000, не хуже асма.

Ныне из всего этого жив и здоров 680x0 в виде своей реинкарнации - ColdFire.

На ниве RISC-процессоров IBM и Motorola родили в результате PowerPC - на данный момент видимо самые быстрые камни такого класса, давно шагнувшие за ГГц.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 9 2008, 23:56
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Да. Вот ведь прикол. Неоднократно удивлялся.
Хорошая идея и отличная реализация, а в результате - пшик. Недостаточно этого для рынка.

Возьмём тот же х86. Система команд, адресация памяти и прочее - найдерьмовейшее. Многое, очевидно, притянуто за уши. Возьмём саму PC XT. На определённом этапе - серьёзные проблемы с расширением и развитием. Нет вообще никакого подхода к переферии. Даже реализация шины, не была продумана. Возьмём винду, - очевидные ошибки в самом подходе.

И что - все эти продукты борются со своими же недостатками и продолжают иметь рынок! Многократные попытки предложить что-то другое - разбиваются в дребезги.
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 10 2008, 00:11
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(SasaVitebsk @ Mar 10 2008, 04:56) *
И что - все эти продукты борются со своими же недостатками и продолжают иметь рынок! Многократные попытки предложить что-то другое - разбиваются в дребезги.
Только причина этого не в аппаратуре и не в софте. wink.gif
Go to the top of the page
 
+Quote Post
Andrew O. Shadou...
сообщение Mar 10 2008, 04:07
Сообщение #39


Участник
*

Группа: Свой
Сообщений: 37
Регистрация: 13-05-07
Из: Minsk, Belarus
Пользователь №: 27 694



Цитата(rx3apf @ Mar 6 2008, 13:46) *
Если бы были хоть локальные метки - увы, компилятора, который умеет использовать локальные метки как в spasm/cvasm для PIC, для AVR мне не попадалось...

AVR GAS?

--
WBR, Andrew
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 10 2008, 11:50
Сообщение #40


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(SasaVitebsk @ Mar 9 2008, 17:23) *
К =GM= А с ВМ3 работали? smile.gif

Было у нас несколько ДВК-3 с ВМ-3, но особенной разницы на своих задачах я не замечал. Если вы говорите о диспетчере памяти, там было по-моему 256 КБ памяти, то я его не использовал. Позже и недолго была у меня ещё Электроника-85, там по-моему тоже ВМ-3 стоял, я её брату подарил. Надо будет как-нибудь поспрашивать его о судьбе микрокомпьютера.
Цитата(SasaVitebsk @ Mar 9 2008, 17:23) *
А по-моему, у всего своя причина должна быть. То что зарыли - естественное следствие его же собственных ограничений. При развитых средствах разработки, по типу Си, сама ортогональность, наличие и количество способов адресации и т.п. плюсы - скрыты для программиста, а вот граница адресного пространства - серьёзный недостаток.

Если где и были ограничения, то у интела. Расскажу один случай. Вы наверное помните, что тогда у ибм был девиз 3М: 1 мипс, 1МБ и 1Мпиксель. Ну вот, у нас на предприятии были ибмписихт 1 МГц и стояли ваксы, тактовая 10 МГЦ (они превосходили ибм раз в 100 по производительности), и была программа-эмулятор ибмписи на ваксах. Запускалась программа, и вы не могли отличить вакс от ибм, можно было загружать дос, все программы, и т.д. Но скорость была повыше. Кстати, на ибм было много игрушек. Одна из причин, на чём они вылезли.
Цитата(SasaVitebsk @ Mar 9 2008, 17:23) *
1) Ортогональность, при 16 битах не позволяла работать с ОЗУ превышавшем 64К. Требовалось либо вводить регистры страниц, либо переходить на 32 бита.
2) Общее адресное пространство для устр-в ввода вывода, решение удобное для МК, но никак не для компов.
3) Асинхронная шина, на мой взгляд, тоже очень неудачное решение

Ну слушайте, ибмпсхт тоже имела асинхронную шину, тут просто дань тогдашней моде и ничего страшного тут нет, просто озу и другие устройства могли быть медленными по сравнению с цпу...

Размещение устройств ввода-вывода в общем адресном пространстве имеет слабое отношение к удобству или неудобству использования МК/компов. А вот к универсализации обмена - имеет, и самое непосредственное. В pdp-11 для любого обмена использовалась ОДНА команда MOV (плюс модификация movb) и всё! А что мы имеем даже в авр? mov, movw, ld, ldd, lds, st, std, sts, in, out. Да ужас! Я уж не говорю про 8086.

Про отрогональность. Убедитесь, что вы правильно понимаете слово ортогональность, надеюсь, не в смысле ортогонализации Грама-Шмидта(:-). Не могу понять, как она может помешать использовать озу выше 64КБ. Тот же ВМ-3 с той же самой системой команд имел диспетчер памяти и легко работал с 256 КБ памяти.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 10 2008, 12:05
Сообщение #41


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
В pdp-11 для любого обмена использовалась ОДНА команда MOV (плюс модификация movb) и всё! А что мы имеем даже в авр? mov, movw, ld, ldd, lds, st, std, sts, in, out.


А в чем разница принципиальная? Аргумент класса "трудно запомнить" - не аргумент wink.gif

Если внимательно посмотреть на написание комманд, никто не мешает исполнить название mov на все случаи жизни, например так
Код
mov - mov r,r
movw - mov r:r,r:r
ld - mov r,rp
ldd - mov r,rp+d
lds - mov r,a
ldi - mov r,imm
st - mov rp,r
std - mov rp+d,r
sts - mov a,r


Что поменялось то?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 10 2008, 12:20
Сообщение #42


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Rst7 @ Mar 10 2008, 15:05) *
никто не мешает исполнить название mov на все случаи жизни
......

Что поменялось то?

Вот я и про тоже.. Люди вопят "у AVR кривая архитектура"... А проблема то решается элементарно..

Или вон один чувак орал, что ему ужас как не хватает команды adci, что мол почему команда sbci есть а adci нету.
Хотя кто ему мешал написать макрос adci на базе команды sbci? Только собственная глупость

а AVR правильно сделал, что не стал увеличивать количество команд ибо во-первых какое же это тогда RISK-ядро получиться если у него команд как и у CISK? А во-вторых, зачем вводить дополнительные код, к примеру, для команды SBR если она является частным случаем команды ANDI?

Сообщение отредактировал Дон Амброзио - Mar 10 2008, 12:30


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 10 2008, 13:28
Сообщение #43


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Rst7 @ Mar 10 2008, 12:05) *
А в чем разница принципиальная? Аргумент класса "трудно запомнить" - не аргумент wink.gif

Не аргумент, ясно и ёжику пьяному(:-). Хотя, если отвлечься от авр и взглянуть на минуту на систему команд TMS320C5402 в части скажем, загрузки: dld, ld (16 модификаций), ldm, ldr, ldu, ltd, выгрузки: dst, st, sth, stl, stlm, stm или пересылки: mvdd, mvdk, mvdm, mvdp, mvkd, mvmd, mvmm, mvpd, portr, portw, reada, readw, где без поллитра не разберёшься и где программистами допускается огромное количество ошибок, то и аргумент появится.

По делу. Принципиальная разница здесь в системе команд, где на одну команду отведён ОДИН код, и которая неким образом переливается в архитектуру. Принципиальная разница в прозрачности кода, когда вам не надо задумываться КАК совершить обмен, а можно сконцентрироваться на том, ЧТО и КУДА посылать.

Отсюда и была красота и совершенство, которая изумляла и компактность кода. Обратите внимание, как красиво переключались сопрограммы. Когда я разбирал, как pdp-11 работает с плавающей точкой, то чуть не выпал в осадок, настолько красиво. Никакого сравнения с ассемблером ибм370 и 8086, где всё было коряво, всё!

Попробуйте написать swab @20(r1) - обмен байтами по адресу, лежащему по адресу r1+20, на аврке или другом каком мк и почувствуйте разницу.


Цитата(Дон Амброзио @ Mar 10 2008, 12:20) *
...зачем вводить дополнительные код, к примеру, для команды SBR если она является частным случаем команды ANDI?

Положим, это частный случай команды ORI, а не команды ANDI. Да и код команды один и тот же.

Отвлекусь. Дохтур, как же вы писали свою замечательную ртос с такими приблизительными знаниями системы команд, а? Ответьте здесь.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 10 2008, 13:38
Сообщение #44


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(=GM= @ Mar 10 2008, 16:28) *
Положим, это частный случай команды ORI, а не команды ANDI. Отвлекусь. Дохтур, как же вы писали свою замечательную ртос с такими приблизительными знаниями системы команд, а? Ответьте здесь.

не надо сразу делать такие далекоидущие выводы... добрее надо быть к людям...а аписАться каждый может. ну не SBR там надо было написать, а CBR


Цитата(=GM= @ Mar 10 2008, 16:28) *
свою замечательную ртос...

Кстати.. О RTOS.....Тут посмотри http://electronix.ru/forum/index.php?showt...pid=377119&


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 10 2008, 14:01
Сообщение #45


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Дон Амброзио @ Mar 10 2008, 13:38) *
Не надо сразу делать такие далекоидущие выводы... добрее надо быть к людям...а описаться каждый может. Ну не SBR там надо было написать, а CBR

Извините, дохтур, но команда CBR делает побитное И регистра с инвертированной константой, а команда ANDI делает побитное И регистра с НЕинвертированной константой. Здесь уж скорее случай вшитого макроса.

По поводу доброты. Позвольте присказку от моего друга. Если ему что-то активно не нравится у кого-то, он говорит ему: "я тебя уважаю, как человека,... но бить буду, как последнюю скотину". А я к вам, дохтур, добр (пока что).

Цитата(Дон Амброзио @ Mar 10 2008, 13:38) *
Кстати.. О RTOS.....Тут посмотри http://electronix.ru/forum/index.php?showt...pid=377119&

Любите вы, дохтур, послать туда, не знаю куда, не конкретно то есть. Не на что там смотреть.

И ещё дохтур, оставьте ваше пошлое панибратство, я с вами на брудершафт не пил. Вот в июне организуем очередной съезд имбеддеров в пивном ресторане Ганс, приходите, а там посмотрим.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 10 2008, 18:46
Сообщение #46


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Никакого сравнения с ассемблером ибм370


Вы, видимо, не сталкивались с системой комманд IBM360/370 - там все в порядке, не путайте с I80x86.

Цитата
Попробуйте написать swab @20(r1) - обмен байтами по адресу, лежащему по адресу r1+20, на аврке или другом каком мк и почувствуйте разницу.


А надо ли такое в реальной жизни? Ведь вся идея RISC построенна на уходе от комманд, которые надо выполнять при помощи каких-то микропрограмм.

Цитата
но команда CBR делает побитное И регистра с инвертированной константой, а команда ANDI делает побитное И регистра с НЕинвертированной константой.


Комманда CBR требует в битовом представлении именно инвертированной маски - это ANDI в чистом виде, просто назван по другому.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 10 2008, 19:18
Сообщение #47


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(=GM= @ Mar 10 2008, 17:01) *
Не на что там смотреть.

Т.е. хотите сказать что не почерпнуЛИ для себя ничего нового касаемо реализаций RTOS?

P.S. Если будеТЕ отвечать, то я бы попросил Вас тоже без панибратства и уж тем более хамства (хотя даже если и почерпнуЛИ, но никогда не признаеТЕ этого..Да?)

А то что касаемо команды CBR , то это действительно как бы встроенный макрос, но это не суть важно, важно то, что если с помощью препроцессора и аппарата макросов можно сделать из ограниченного набора команд почти любую команду, то тогда зачем скулить (это я не Вам, а другим) о том, что эта команда не реализована в железе? Разве когда пишите программы это важно, что препроцессор или компилятор преобразует вашу команду в другую эквивалентную ей?

Сообщение отредактировал Дон Амброзио - Mar 10 2008, 19:20


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 10 2008, 20:41
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



2 =GM=

Вот я и говорю, что при использовании компилятора, вся красота теряется от глаз пользователя. Он её не видит! Не видит комманд и не видит режимов адресации. А с наступлением различных кэшей и т.п. вообще не контролирует прохождение проги. smile.gif

Я вон когда на PC пишу, - уже и не помню когда последний раз в окно дизасемблера заглядывал. smile.gif
Другой уровень абстракции. Начинаешь мыслить если не объектами, то уж переменными и процедурами точно.

Вот и выходит на первый план удобство работы и наличие развитого ПО. Этим и взяли. А теперь победить уже практически невозможно.
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 10 2008, 20:43
Сообщение #49


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Дон Амброзио @ Mar 10 2008, 22:18) *
А то что касаемо команды CBR , то это действительно как бы встроенный макрос, но это не суть важно, важно то, что если с помощью препроцессора и аппарата макросов можно сделать из ограниченного набора команд почти любую команду, то тогда зачем скулить (это я не Вам, а другим) о том, что эта команда не реализована в железе? Разве когда пишите программы это важно, что препроцессор или компилятор преобразует вашу команду в другую эквивалентную ей?

Это не всегда эквивалентные команды! Например при написании и использовании макросов addi и adci надо знать что флаги эти команды будут устанавливать не так как при обычном сложении. "Встроеные макросы" тоже имеют особенности например условные переходы (типа беззнакового больше С и Z сброшены такого перехода нет и инструкция реально противоположая та же что и беззноакове меньше С установелен) при которых надо менять операнды в предыдущей команде cmp или sub, IMHO вообще лучше не использовать.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 10 2008, 23:29
Сообщение #50


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Rst7 @ Mar 10 2008, 18:46) *
Вы, видимо, не сталкивались с системой команд IBM360/370 - там все в порядке, не путайте с I80x86

Ну почему, сталкивался. Для IBM-370, вернее IСL (английский вариант IBMки, стоял в министерстве морфлота) писал немного, в частности, подпрограммы вывода на планшетный графопостроитель и стыковал их с фортрановскими. Один оператор BALR *,14 чего стоит. Переход на ассемблер pdp-11 был как глоток свежего воздуха, поверьте.
Цитата(Rst7 @ Mar 10 2008, 18:46) *
А надо ли такое в реальной жизни? Ведь вся идея RISC построена на уходе от команд, которые надо выполнять при помощи каких-то микропрограмм

Не пойму, почему вы говорите о микропрограммах. Так делалось раньше, сейчас можно сделать по-иному, ну и что? Суть состоит не в том, как это было реализовано, а в том, что режимы адресации, применённые в pdp-11, упрощают программирование, делают его прозрачным. Вот, например, команда JMP @20(R1) может быть легко применена в операторе switch, что на си, что на ассемблере. И так во всём. Жаль, что всё ушло безвозвратно. Не хотите работать с командой swab @20(r1), попробуйте реализовать команду JMP @20(R1) на аврке.
Цитата(Rst7 @ Mar 10 2008, 18:46) *
Команда CBR требует в битовом представлении именно инвертированной маски - это ANDI в чистом виде, просто назван по другому

Никто не спорит, что код команды один и тот же. Но константа в одном случае инвертирована, а в другом - нет. Сравните сами.
Код
   cbr   r16,0b00010011
   andi  r16,0b00010011

В первом варианте сбросятся биты 0, 1 и 4, а во втором эти биты останутся. Сделано для удобочитаемости кода и только.

Цитата(Дон Амброзио @ Mar 10 2008, 19:18) *
Т.е. хотите сказать что не почерпнули для себя ничего нового касаемо реализаций RTOS?
P.S. Если будеТЕ отвечать, то я бы попросил Вас тоже без панибратства и уж тем более хамства (хотя даже если и почерпнуЛИ, но никогда не признаеТЕ этого..Да?)

К сожалению, я не специалист по ртос, так что ничего там не почерпнул, увы. Посмотрел я ветку по диагонали, и честно говоря не понял, зачем вы меня туда посылали. Я заметил, что вы так частенько делаете, только цель мне непонятна. Хотите флейма? По-моему, так можно достичь прямо противоположного результата, нормальный оппонент вскоре перестанет с вами общаться. Или вы подрабатываете на форумах, поднимая посещаемость и рейтинг, э?

Кстати, пытался я вызнать у коллег здесь на форуме, зачем нужна ос/ртос в микроконтроллерах, даже ветку такую заводил...но ответы меня не убедили.

И, пожалуйста, не пишите P.S., если нет подписи, это моветон. P.S. буквально означает "после подписи", использовалось ещё в Древнем Риме, когда письмо было написано и подписано, и вдруг понадобилось что-то добавить.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 11 2008, 06:36
Сообщение #51


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Вот, например, команда JMP @20(R1) может быть легко применена в операторе switch, что на си, что на ассемблере.


Да не спорит никто. Просто идеология RISC подразумевает, что 20 процентов комманд выполняется 80 процентов времени. Посему остальные 20% лучше не реализовывать в аппаратуре, а заменить несколькими коммандами
Код
lds zl,label
lds zh,label+1
add zl,r16
adc zh,r17
ijmp

результирующий выигрыш - больше, как в быстродействии, так и в потреблении, площади кристалла и т.д. И писать для RISC поэтому лучше на ЯВУ, дабы компилятор сам выполнил за вас работу по изготовлению аналогов CISC-комманд.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 11 2008, 13:26
Сообщение #52


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Rst7 @ Mar 11 2008, 06:36) *
Просто идеология RISC подразумевает, что 20 процентов команд выполняется 80 процентов времени. Посему остальные 20% лучше не реализовывать в аппаратуре, а заменить несколькими командами

Не хочу спорить, но при чём здесь риск или циск? Всегда так было и наверное так будет, что для большинства обозримых задач какое-то количество команд занимает львиную долю процессорного времени.

Не знаю точного определения риск или сиск и вообще трудно, а может и невозможно, найти чистый риск-МК, но по-моему задача перед проектировщиком риск-машины должна стоять такая: определить минимальное количество элементарных команд, выполняющихся за единый квант времени, чтобы любые операции можно бы было выполнить, используя комбинации из этого минимального набора. Ну а если у проектировщика остались неиспользованные площади кристалла, то грех не добавить дополнительных команд или функций, памяти, периферии, ещё какой-нибудь фичи... Что мы и наблюдаем в реальном мире.

По аналогии с логическими схемами - любую сколь угодно сложную комбинаторную схему можно построить на комбинации схем 2И-НЕ, а можно на комбинации 2ИЛИ-НЕ. А проектировщики вроде бы реально используют базис 4И-НЕ...
Цитата(Rst7 @ Mar 11 2008, 06:36) *
Код
lds zl,label
lds zh,label+1
add zl,r16
adc zh,r17
ijmp

Немного вы недопоняли, и не так сделали. Здесь вы реализовали команду JMP label(R1), которая прыгает на адрес (label+R1), а надо было реализовать команду JMP @label(R1), которая прыгает по адресу, который лежит по адресу (label+R1). Рассматривайте команду JMP просто как специфическую команду MOV, которая заносит операнд в программный счетчик РС. Хотя можно было бы использовать и MOV @label(R1),РС. Вот это гибкость!

Отвлекусь. Даже простой вопрос о расположении операндов в pdp-11 решён идеально. Портится второй операнд. Почему в аврках и интелах портится первый операнд? Откуда спрашивается арабское письмо возникло?

Или вот, опять о пространстве ввода-вывода. Атмелу этого пространства уже не хватает, поневоле приходится использовать in/out в комбинации с lds/sts. Как ни крути, а для программиста это лишняя головная боль и возможный источник ошибок. Будь пространство ввода-вывода сразу отмаплено на память как в pdp-11, было бы гораздо проще.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 11 2008, 14:19
Сообщение #53


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Немного вы недопоняли, и не так сделали. Здесь вы реализовали команду JMP label(R1), которая прыгает на адрес (label+R1), а надо было реализовать команду JMP @label(R1), которая прыгает по адресу, который лежит по адресу (label+R1).


Да, пардон. Хотя на суть ответа это не влияет.

Цитата
Отвлекусь. Даже простой вопрос о расположении операндов в pdp-11 решён идеально. Портится второй операнд. Почему в аврках и интелах портится первый операнд? Откуда спрашивается арабское письмо возникло?


Вам написание y=f(x) не жмет? Не возникает желание всю математическую нотацию переделать?

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


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 11 2008, 15:24
Сообщение #54


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(=GM= @ Mar 11 2008, 01:29) *
И, пожалуйста, не пишите P.S., если нет подписи, это моветон. P.S. буквально означает "после подписи", использовалось ещё в Древнем Риме, когда письмо было написано и подписано, и вдруг понадобилось что-то добавить.

bb-offtopic.gif забавно: всегда считалось, что post scriptum означает «после написанного». Об этом и академические словари говорят.
Так что p.s. в конце топика без подписи очень даже уместнен. Постскриптум
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 11 2008, 17:22
Сообщение #55


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Rst7 @ Mar 11 2008, 14:19) *
Да, пардон. Хотя на суть ответа это не влияет

Не знаю, какую суть имели в виду вы, но моя суть ответа такая. То, что можно написать на pdp-11 одной командой, уложится в десяток команд аврки. Вот где настоящая красота и компактность кода.
Цитата(Rst7 @ Mar 11 2008, 14:19) *
Вам написание y=f(x) не жмет? Не возникает желание всю математическую нотацию переделать?

Вот ё-маё, ставите с ног на голову! Я читаю правильно слева-направо "игрек равняется эф от икс", а вот в вашем случае надо бы писать f(x)=y. Ещё можно попробовать некоторые слова в предложении писать справа-налево, для разнообразия. Попробуйте "ьтасипан" некоторые слова вот так, понятнее стало? Да, можно привыкнуть, не вопрос, но это ж неправильно. Или всё читаем слева-направо, или всё слева-направо. Зачем микс делать? Если это нужно компилеру, хотя вряд ли, пусть он переворачивает сам аргументы у себя внутри, а человеку надо создать удобство восприятия, как он привык. Слева, так слева. Справа, так справа. Не пойму, что тут упираться, вопрос простой до неприличия.

Не ответили на мысль о пространстве ввода-вывода. Атмелу этого пространства уже не хватает, поневоле приходится использовать in/out в комбинации с lds/sts. Как ни крути, а для программиста это лишняя головная боль и возможный источник ошибок. Будь пространство ввода-вывода сразу отмаплено на память как в pdp-11, было бы гораздо проще.

И вот вы видите, вроде бы всё одно и тоже, и привыкнуть можно, но там чуток не так, там чуток не эдак, и вместо красоты получается безобразный монстр. В одном случае сказочно красивый ассемблер для pdp-11, в другом случае кривой атмеловский ассемблер. И заметьте, это один из самых лучших на сегодняшний день, не будем вспоминать 8051 или пик...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 11 2008, 17:30
Сообщение #56


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Я читаю правильно слева-направо "игрек равняется эф от икс", а вот в вашем случае надо бы писать f(x)=y.


Это читаем мы так. А обозначает это то, что множеству значений x ставится в соответствие множество значений y. Заметьте, из значения x следует значение y, а не наоборот.

Цитата
То, что можно написать на pdp-11 одной командой, уложится в десяток команд аврки.


Сколько лишней аппаратуры потребуется для реализации этой красивой комманды?

Цитата
Не пойму, что тут упираться, вопрос простой до безобразия.


Упираетесь Вы. Я утверждаю, что разницы нет вообще, есть привычка, не более!


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 11 2008, 17:46
Сообщение #57


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Baser @ Mar 11 2008, 15:24) *
bb-offtopic.gif забавно: всегда считалось, что post scriptum означает «после написанного». Об этом и академические словари говорят.
Так что p.s. в конце топика без подписи очень даже уместнен. Постскриптум

Ну а голова у нас на что дадена? Не только же есть в неё? Такое впечатление, что никто обычных писем не пишет и не подписывается. Раньше, до середины 20 века не было компьютеров, а ещё раньше и бумага была дорогая. Ну написали вы письмо, подписались, ещё что-то в голову вступило, ну перепишите на новом листе, ан нет. Ставили П.С., и писали, что хотели добавить. Опять расписывались. Это разумно и практично.

Отвлекусь. Есть такая поговорка: "исключение подтверждает правило", это калька с латинского. Много лет думал, как же исключение может подтвердить правило. Лет 8 назад узнал, что это был неправильный перевод с латинского. Правильно так: "исключением поверяется правило". Т.е. правило работает там и тогда, где и когда не возникает исключения из этого правила.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 11 2008, 18:18
Сообщение #58


дятел
*****

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



Цитата(=GM= @ Mar 11 2008, 20:22) *
Не ответили на мысль о пространстве ввода-вывода. Атмелу этого пространства уже не хватает, поневоле приходится использовать in/out в комбинации с lds/sts. Как ни крути, а для программиста это лишняя головная боль и возможный источник ошибок. Будь пространство ввода-вывода сразу отмаплено на память как в pdp-11, было бы гораздо проще.
Неправильно расставленны акценты, ИМХО, lds/sts это есть стандартный доступ к памяти и
регистрам в частности, и этот доступ двухтактовый, НО, производитель позаботился о том чтобы
некоторая часть регистров была доступна с однотактовыми in/out, но при этом конечно за нас
решил в каком чипе и к каким регистрам можно доступаться однотактово...
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 11 2008, 21:35
Сообщение #59


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(singlskv @ Mar 11 2008, 18:18) *
Неправильно расставлены акценты, ИМХО, lds/sts это есть стандартный доступ к памяти

Ну, положим, вы их сами смещаете(:-). Стандартный, это как? А ld/st тогда какой? Нестандартный?

Цитата(singlskv @ Mar 11 2008, 18:18) *
... НО, производитель позаботился о том чтобы некоторая часть регистров была доступна с однотактовыми in/out, но при этом конечно за нас
решил в каком чипе и к каким регистрам можно доступаться однотактово...

Ну и в результате получили некоторую кривизну. Вот и приходится часть регистров инициировать с помощью in/out, а часть с помощью lds/sts, хоть они и двухсловные, а что делать?

Ладно, это всё ностальгический флейм, немного пар выпустили... Я на неделю в отпуск собрался, хочу посетить столицу Священной Римской империи, не удивляйтесь, если не буду отвечать.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 12 2008, 08:06
Сообщение #60


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Складывается впечатление, господа, что =GM= и Rst7 взялись создавать платформы и спорят чья лучше cool.gif (никого не хочу обидеть).
А разница то какая? Или кто-то в состояние повлиять на уже существующие вещи?
Имеем то, что имеем и заморачиваться над субьективным качеством, сетовать на неудобства и восхвалять (весьма навязчиво) удобства - это на мой взгляд отвлекаться от реальной работы.
Вы предполагали какое-нибудь резюме этой теме?
Или кто-то обопрётся на эту тему при выборе платформы для разработки?
Скорее всего это пустой флейм, пусть даже и с весьма умной подоплёкой.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 12 2008, 08:37
Сообщение #61


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Да сам вопрос то был

Цитата
где же addi, adci?


Вот плавно обсуждение и перетекло в обсуждение "где система команд красивее".

Лично я бы резюмировал так - из ситуации отсутствия какой либо команды проца можно выйти. Вопрос только в том - сколько такой выход будет стоить - причем в общем - и затраты программера, и стоимость камня и прочее, прочее, прочее...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 19 2008, 06:34
Сообщение #62


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



А где же "исключающее ИЛИ" с константой?!
Как инвертировать один бит в регистре (порту)? Сделали две по сути одинаковые команды - andi и cbr, а eori не стали?

Цитата(Rst7 @ Mar 12 2008, 11:37) *
Лично я бы резюмировал так - из ситуации отсутствия какой либо команды проца можно выйти. Вопрос только в том - сколько такой выход будет стоить


Стоить он будет довольно много: нужно занести константу в другой регистр, перед этим сохранить его в стеке (поскльку это происходит в прерывании), выполнить eor, и восстановить регистр. Или есть более простой способ?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 19 2008, 08:45
Сообщение #63


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(777777 @ Mar 19 2008, 08:34) *
А где же "исключающее ИЛИ" с константой?!

Там же, где и ещё полсотни или больше команд, не вошедших в понятие RISC для 8-битников.
Если команды нет, то от Вашего праведного гнева она не возникнет. Или какой ответ Вы предполагали своим вопросом? Вам помогут её найти?
Цитата(777777 @ Mar 19 2008, 08:34) *
Сделали две по сути одинаковые команды - andi и cbr

Это две мнемоники одного и того же кода, сделанные не более чем для удобства.

Если отсутствие нужных Вам команд или неприемлемость обходных манёвров окажутся для Вас существенными, возьмите другой МК.
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 19 2008, 09:57
Сообщение #64


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(IgorKossak @ Mar 19 2008, 11:45) *
Или какой ответ Вы предполагали своим вопросом? Вам помогут её найти?


Ну, в общем, да. Я надеялся, что в атмеле таки есть быстрый способ инвертировать бит в порту, который я по своей неопытности не доглядел.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 19 2008, 10:13
Сообщение #65


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



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


Именно бит в порту инвертировать - способ есть например для Mega48-88-168 - сделать OUT PINx,Ry, причем Ry должно содержать маску инвертируемых битов - биты в Ry, которые равны 1, будут инвертированы.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 19 2008, 10:19
Сообщение #66


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Rst7 @ Mar 19 2008, 13:13) *
Именно бит в порту инвертировать - способ есть например для Mega48-88-168 - сделать OUT PINx,Ry, причем Ry должно содержать маску инвертируемых битов - биты в Ry, которые равны 1, будут инвертированы.


Не понял. Как можно делать OUT в PINx и почему они должны при этом инвертироваться? Или это фича именно 48/88/168?
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 19 2008, 10:26
Сообщение #67


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(777777 @ Mar 19 2008, 13:19) *
Не понял. Как можно делать OUT в PINx и почему они должны при этом инвертироваться? Или это фича именно 48/88/168?

Я тоже не понял... Я знаю что таким образом сбрасываются некоторые флаги запросов на прерывание в регистрах статуса периферии. И то они инвертируются только в одну сторону. Т.е. инвертнуть с "1" на "0" можно, а обратно - нельзя...А вот то, что таким образом можно инвертнуть биты в регистрах PortX - впервые слышу

Сообщение отредактировал Дон Амброзио - Mar 19 2008, 10:28


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 19 2008, 10:30
Сообщение #68


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А вот то, что таким образом можно инвертнуть биты в регистрах PortX - впервые слышу


Так учите матчасть smile.gif Но, вообще-то, не так давно появилась эта фича.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 19 2008, 10:39
Сообщение #69


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Rst7 @ Mar 19 2008, 13:30) *
Так учите матчасть smile.gif Но, вообще-то, не так давно появилась эта фича.

Начиная с каких моделей?


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 19 2008, 10:47
Сообщение #70


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Rst7 @ Mar 19 2008, 13:30) *
Так учите матчасть smile.gif Но, вообще-то, не так давно появилась эта фича.

Действительно появилась, а я и не знал smile.gif
Главное нигде на это внимание не акцентируется, я так внимательно и не читал даташит на новые контроллеры в этом разделе
Да и фича то давно появилась даже у CAN128 есть.

Сообщение отредактировал KRS - Mar 19 2008, 10:54
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 19 2008, 12:38
Сообщение #71


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Дон Амброзио @ Mar 19 2008, 12:39) *
Начиная с каких моделей?

Цитата(KRS @ Mar 19 2008, 12:47) *
Действительно появилась, а я и не знал smile.gif
Главное нигде на это внимание не акцентируется, я так внимательно и не читал даташит на новые контроллеры в этом разделе
Да и фича то давно появилась даже у CAN128 есть.

Вопрос, когда появилась та или иная фича, скорее всего риторический.
Более интересный вопрос это в каких моделях эта фича вообще есть, но для этого придётся перелопатить документацию на каждый МК.
И ещё, отсутствие явных указаний на принципиальные отличия от ранних моделей в начале документа, а не на 78-й странице, это явное упущение производителя. И в подобных случаях сказывается инерция мышления разработчика, не перечитывать повторно то, что уже было когда-то прочитано. Хотя и это моё мнение тоже из области риторики.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Mar 20 2008, 18:13
Сообщение #72


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Эта фича ещё есть у Tiny2313. Найти модели, в которых она есть, довольно просто. Поищите в DS слово "toggle". В разделах про порты сразу находится (если фича там есть). Ещё на схеме портов есть блок, отвечающий за это.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 20 2008, 21:59
Сообщение #73


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Nanobyte @ Mar 20 2008, 18:13) *
В разделах про порты сразу находится (если фича там есть)

Добавлю ссылку для полноты картины. Обсуждение инверсии ножек было здесь.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 21 2008, 06:46
Сообщение #74


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Nanobyte @ Mar 20 2008, 20:13) *
Эта фича ещё есть у Tiny2313. Найти модели, в которых она есть, довольно просто. Поищите в DS слово "toggle". В разделах про порты сразу находится (если фича там есть). Ещё на схеме портов есть блок, отвечающий за это.

В том то и дело, что перед этим придётся загрузить описания на все МК (если стоит задача выбрать МК с этой фичей), причем не Summary, а полные. Проверил в случае с Mega48/88/168.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 04:34
Рейтинг@Mail.ru


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