|
PC +/- … |
|
|
|
Apr 11 2011, 17:44
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
..Борюсь с атмегами.. о, как они мне не нравятся.. ну всё, буквально, претит.. ..Вопрос такой. У PIC-ов есть возможность написать: гоу ту доллар +/-, скажем, 7. И программа перейдет по указанному адресу. У атмег, аналогичный вариант выглядит, как, PC +/- 7. Как бы, это работает. Но, недавно, что-то не пошло, пришлось по фрагментам в студии рассматривать. И обнаружил, что не прыгает оно на семь указанных строчек, а прыгает на шесть. А в других случаях прыгало.. Если указать восемь, будет прыгать на семь. ..Это глюк такой или есть нюансы, которых не знаю? ..С PIC-ами таких проблем не было. P.S. Настоятельная просьба ко всем, решившим сюда ответить: ни слова о Си. О его достоинствах, преимуществах и т. д. Ни слова! Или сразу закрою тему.
--------------------
It's me
|
|
|
|
12 страниц
1 2 3 > »
|
 |
Ответов
(1 - 99)
|
Apr 11 2011, 18:02
|

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

|
Цитата(Wise @ Apr 11 2011, 20:44)  Или сразу закрою тему. А про LabelXX: сказать можно? По теме, длину команды учитываете? rjmp - одно слово, jmp - два. Соответственно rjmp PC + 7 jmp PC + 7 дадут разный результат, jmp прыгнет как раз на 6.
|
|
|
|
|
Apr 11 2011, 18:10
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(defunct @ Apr 12 2011, 01:02)  По теме, длину команды учитываете? rjmp - одно слово, jmp - два. Соответственно rjmp PC + 7 jmp PC + 7 дадут разный результат, jmp прыгнет как раз на 6. Нет, не учитываю. В той атмеге, с которой сражаюсь, только команда rjmp. А еще использовал команды типа brne, breq, brsh, brlo. Вы не могли бы мне растолковать, что я должен учитывать? ..В описании команд не нашел понятие "число слов", там есть "машинные циклы". Я-то считал, что, просто, должно отсчитать семь указанных строчек.. ..Потому что, если смотреть все строчки, через которые оно должно перепрыгнуть, вариантов много может быть, за сколько тактов они исполняются. И тогда, проще уже поставить метку. Но, с PIC-ами у меня ни разу такой хни не возникало. И там я никогда не подсчитывал никакие слова..  ..Можно ли сформулировать общее правило для подсчета, куда скакнет программа, поскольку, такая непредсказуемость обескураживает, а повсеместно ставить метки.. конечно, придется, но это только углубит "симпатии" к AVR. ..И еще, вопрос про АЦП. Есть программа, у которой два кольца. То есть, она может ходить по одному кругу, либо, по другому, в зависимости от ситуации. В обоих кругах, в числе прочего, оцифровывается одно и то же напряжение аккумуляторной батареи. ..Так вот! Результаты оцифровки разные, в каждом кругу, отличаются на 0,5--0,7 вольта! Хренею от атмеги..  Не могу предположить, что здесь не так написано - совершенно одинаковые фрагменты программы в обоих случаях. ..Пока что, прагматично на это плюнул, еще не столь важно, но, в принципе, как же так..
--------------------
It's me
|
|
|
|
|
Apr 11 2011, 23:56
|
Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032

|
http://electronix.ru/forum/index.php?showt...st&p=896052Цитата(Wise @ Apr 11 2011, 22:10)  В описании команд не нашел понятие "число слов", там есть "машинные циклы". LDS – Load Direct from Data Space... Words: 2 (4 bytes)Цитата отсчитать семь указанных строчек.. Адресов в памяти. Микросхема не умеет читать текст с экрана. Цитата если смотреть все... проще уже поставить метку. Проще. И надёжнее. И читаемее. Зато именованную метку нельзя в макросе. Который более чем один раз используется. Зато для короткого перехода посчитать строчки адреса быстрее, чем напечатать MoePonyatnoeIUnikalnoeImyaMetki_nomer117. Цитата с PIC-ами у меня ни разу Любая инструкция занимала в памяти ровно одно слово. Цитата общее правило для подсчета Atmel AVR Instruction Set. При внимательном рассмотрении понимается, что количество слов в каждой инструкции необходимо и достаточно для практического применения. И что это всё зубрить наизусть не обязательно, когда логика (что может поместиться в 16 бит opcode и что не может). Цитата И еще, вопрос про АЦП http://electronix.ru/forum/index.php?showt...st&p=899169http://electronix.ru/forum/index.php?showt...st&p=913607
Сообщение отредактировал нечитатель - Apr 12 2011, 00:32
|
|
|
|
|
Apr 12 2011, 05:58
|
Местный
  
Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940

|
Цитата Зато именованную метку нельзя в макросе. Который более чем один раз используется. Да ну?!?! Код .macro read_eeprom ee_r: sbic eecr,eewe rjmp ee_r out eearl,@1l out eearh,@1h sbi eecr,eere ee_r1: sbic eecr,eewe rjmp ee_r1 in @0,eedr .endmacro ;Example -> read_eeprom DAT_reg ,z или ee_r1 и ee_r это не метки?
|
|
|
|
|
Apr 12 2011, 09:45
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(zombi @ Apr 12 2011, 13:05)  Не могу понять о какой команде речь. Можно пример? Уже был: Цитата(defunct @ Apr 11 2011, 22:02)  rjmp PC + 7 jmp PC + 7 ИМХО писать программу с таким способом перехода - моветон (за очень и очень редким исключением). Метки помогут отцу русской демократии. Код ldi r16,5 loop: .... dec r16 brne loop И никаких запар с изменением размера тела цикла...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Apr 12 2011, 10:04
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(demiurg_spb @ Apr 12 2011, 16:45)  ИМХО писать программу с таким способом перехода - моветон (за очень и очень редким исключением). Метки помогут отцу русской демократии. ..Метки отцу помогают.. Он ставит их в значимых местах программы.. и так, кое-где.. ..А вот "пи си плюс-минус" - очень удобно для тактических коротких переходов на обозримых кусках текста, моветон это или нет.. Потому что не наметишься.. если около сотни или больше всяких передвижений.. ..А вообще, атмега - редкое фуфло.. Я как-нибудь соберу в кучу все свои претензии пользователя, да и выложу.. Пусть им (атмеговцам) будет стыдно..
--------------------
It's me
|
|
|
|
|
Apr 12 2011, 10:35
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(zombi @ Apr 12 2011, 13:22)  Этож нафига такое нужно!? Всю жизнь метки использую, и никаких проблем, прыгает всегда куда нужно  Ага, в макросах  - особенно! Много же там локальных меток можно наставить! Атмеловские макросредства - это чудо структурно-прикладной лингвистики  Цитата(Wise @ Apr 12 2011, 13:04)  ..А вообще, атмега - редкое фуфло.. и именно поэтому они дерут пики 18-е по скорости выполнения умножения 16*16 бит в 2 раза, и даже в 4 - на 20МГц
|
|
|
|
|
Apr 12 2011, 12:13
|

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

|
Цитата(Wise @ Apr 12 2011, 13:04)  ..А вообще, атмега - редкое фуфло.. Точно, поэтому бросьте затею с mega и работайте дальше с нетрыньдовым pic'ом у него команд меньше и все одной длины. Цитата Ага, в макросах - особенно! Много же там локальных меток можно наставить! Любая метка объявленная внутри макроса становится локальной. Поверено. Транслятор добавляет к имени метки @<имя макроса>@<уникальное число>. Цитата Спрошу интереса ради: какой-нибудь аврасм поновее не поддерживает ли временные метки? уникальности внутренних меток можно добиться если не скупиться на длину оной и выработать правило для отличия внутренних от внешних меток. Как для себя __ - значит внутренняя, потом первым словом копируется имя внешней метки и через двойное подчеркивание пишу имя локальной метки Код func1:
... __func1__do_this: ...
__func1__do_that: ..
|
|
|
|
|
Apr 12 2011, 14:14
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Apr 12 2011, 16:13)  уникальности внутренних меток можно добиться если не скупиться на длину оной и выработать правило для отличия внутренних от внешних меток. Как для себя __ - значит внутренняя, потом первым словом копируется имя внешней метки и через двойное подчеркивание пишу имя локальной метки В том-то и дело, что уникальность эта вкупе с чрезмерной длиной даром не нужна, только текст засоряет. Куда как удобнее было бы писать: Код 0 ... dec r16 brne %b0 ... brcs %f0 ... 0
|
|
|
|
|
Apr 12 2011, 15:46
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(_Pasha @ Apr 12 2011, 19:01)  Например, mlasm был такой, см. стр.60 Прикольно, но как по мне, уж очень морочливо. Проще уж метку поставить. Тем более если Цитата(defunct) Любая метка объявленная внутри макроса становится локальной. Поверено. Ну и навсяк случ скачать последнюю версию компилятора.
|
|
|
|
|
Apr 13 2011, 04:07
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Вообще- то по правильному это Цитата LOCAL <список-локальных-меток> внутри макроса, и ессно до их использования. Тем самым пересечение имен исключается на корню
|
|
|
|
|
Apr 13 2011, 12:24
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(ARV @ Apr 13 2011, 10:19)  вроде твердо помню: не поддерживал атмеловский ассемблер локальных меток в макросах... С чего Вы это взяли??? Специально тест написал: CODE ; .listmac ;-------------------------- .MACRO AAA RJMP M2 M0: RJMP ME M1: RJMP M0 M2: NOP RJMP M1 ME: NOP NOP .ENDM ;-------------------------- ; CLI RJMP RESET
.ORG $100
RESET: AAA AAA AAA RJMP RESET
и странслировал двумя новыми AVRASMами: Цитата(Atmel) AVRASM: AVR macro assembler 1.77.3 (Nov 3 2009 14:11:39) AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36) и даже откопал 1996 года, куда уже старше Цитата(Atmel) AVRASM: AVR macro assembler version 1.03a (Aug 26 1996 01:03:00) ВСЕ НОРМАЛЬНО. ВСЕ МЕТКИ ЛОКАЛЬНЫ. НИКАКИХ ЕРРОРОВ!
|
|
|
|
Guest_@Ark_*
|
Apr 13 2011, 12:52
|
Guests

|
Цитата Интересно как сие решается у других процов (длина команды у которых может быть разной)? Очень просто все решается в нормальных процессорах. Во время выполнения текущей команды программный счетчик всегда смотрит на следующую команду. И это не зависит от длины текущей команды и ее функции (даже если это ветвление). Считается, что на момент выполнения выборка и декодирование команды уже произведены, и программный счетчик установлен уже на следующую (по естественному порядку выполнения) команду. Если PC используется в качестве аргумента команды, то нужно считать, что он принимает именно такое значение. Нормальные ассемблеры также принимают такое соглашение по умолчанию. P.S. Естественно, что за всех производителей процессоров и всех писателей ассемблеров я ответить не могу.
|
|
|
|
|
Apr 13 2011, 15:15
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(Wise @ Apr 12 2011, 14:04)  ..А вообще, атмега - редкое фуфло.. Я как-нибудь соберу в кучу все свои претензии пользователя, да и выложу.. Пусть им (атмеговцам) будет стыдно..  Цитата(SysRq @ Apr 13 2011, 18:11)  Цитата(Wise @ Apr 11 2011, 21:44)  ...ни слова о Си. О его достоинствах, преимуществах и т. д. Ни слова! Или сразу закрою тему. Давно пора. И что, так и будем дальше в неведении прозибать
|
|
|
|
|
Apr 13 2011, 15:24
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(zombi @ Apr 13 2011, 19:15)  И что, так и будем дальше в неведении прозибать  Здесь одно из двух: Цитата(Wise @ Apr 11 2011, 21:44)  ..Это глюк такой или есть нюансы, которых не знаю? И очевидный ответ: Цитата(GetSmart @ Apr 12 2011, 15:55)  ...не знаешь архитектуру = кривые руки.
|
|
|
|
|
Apr 13 2011, 19:12
|
Местный
  
Группа: Участник
Сообщений: 256
Регистрация: 5-04-09
Из: Москва
Пользователь №: 47 180

|
Цитата(GetSmart @ Apr 13 2011, 08:52)  Да, да. Атмегой плохо орехи колоть получается   А гвозди забивать ваще никак  ... Если уж совсем лениво Datasheet'ы читать, есть книга Евстифеева - практически их перевод на русский язык. Цитата(Wise @ Apr 12 2011, 14:04)  ....А вообще, атмега - редкое фуфло... Считал также первые три дня знакомства с ними (после PIC16). Потом оказалось, что 99,9% их "фуфловости" - результат моих "гениальных"  упражнений в программировании.
|
|
|
|
|
Apr 13 2011, 20:37
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(zombi @ Apr 13 2011, 20:25)  Я так понял что речь о том что при выполнении команды RJMP PC+X происходит изменение PC на величину X адресов а "программистам" хотелось бы на X команд  и если все команды занимают один адрес то все красиво, а вот если команды могут занимать более одного адреса вот тут-то и начинются чудеса у тех кто ленится метки использовать  Еще раз пост Ark-а перечитайте, он хорошо поясняет причину, по которой задан вопрос в теме. Возможно, вы не поняли.. ..Может быть, я и программист в кавычках, как вы отметили, однако, я не просил вас давать оценку моему уровню. Для симметрии, хотите услышать мою оценку вашего уровня? У меня сложилось некоторое мнение, на основании ваших постов здесь.. Цитата(SysRq @ Apr 13 2011, 21:11)  Нефиг писать на ассемблере там где он не нужен.
Давно пора. Цитата(SysRq @ Apr 13 2011, 22:24)  Здесь одно из двух:
И очевидный ответ: Вы провокатор или хам? ..Кажется, ясно и вежливо попросил, в самом начале.. Хотите на грубость нарваться? да легко.. Цитата(forever_student @ Apr 14 2011, 02:12)  Если уж совсем лениво Datasheet'ы читать, есть книга Евстифеева - практически их перевод на русский язык. ..Считал также первые три дня знакомства с ними (после PIC16). Потом оказалось, что 99,9% их "фуфловости" - результат моих "гениальных"  упражнений в программировании. Вы с чего взяли, что я не читал дэйтшиты и книги Евстифеева? На чем такая уверенность основана, на том, что я задал вопрос? Так для этого и форум.. ..А книг, могу еще штук 16 перечислить, хотите? ..Я сказал, что выложу все свои "фи" атмегам, а их много накопилось, и выложу. Но, сейчас я занят. Все позже..
--------------------
It's me
|
|
|
|
|
Apr 13 2011, 20:52
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Wise @ Apr 12 2011, 14:04)  ..Метки отцу помогают.. Он ставит их в значимых местах программы.. и так, кое-где.. ..А вот "пи си плюс-минус" - очень удобно для тактических коротких переходов на обозримых кусках текста, моветон это или нет.. Потому что не наметишься.. если около сотни или больше всяких передвижений.. Чушь. Сударь явно любит садо-мазо. В особо извращенной форме - с ассемблером. Переходите лучше на MS Paint http://i.min.us/ikq8hS.gif
--------------------
Пишите в личку.
|
|
|
|
|
Apr 13 2011, 21:04
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(Oldring @ Apr 14 2011, 03:52)  Чушь. Сударь явно любит садо-мазо. ..Узнаю форум.. Понеслась.. Ваш пост, конечно, обоснован и не чушь? Может быть, мне предположить, что вы любите? ..Если ветка будет сползать в сторону вот таких постов, как последние, закрою. ..Вот знал же, что бесполезно (мне) задавать здесь вопросы - на один корректный ответ по теме, будет дюжина дряни.. Но, профессионалы же ведь.. люди тактичные, вежливые, точные в своих ответах.. Щас, размечтался.
--------------------
It's me
|
|
|
|
|
Apr 13 2011, 21:15
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(Wise @ Apr 14 2011, 00:37)  Вы провокатор или хам? Си, сеньор Цитата(aaarrr @ Apr 14 2011, 01:01)  По-моему, сочинять безумные названия для меток куда хуже. Зачем безумные? Названия должны помогать читать написанный алгоритм. Правильные названия меток и переменных куда лучше часто встречающихся в коде комментариев типа "; переход, если не равно".
|
|
|
|
|
Apr 13 2011, 21:29
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SysRq @ Apr 14 2011, 01:15)  Названия должны помогать читать написанный алгоритм. Правильные названия меток и переменных... 90% локальных меток название не нужно вообще. Алгоритм читать они только помешают. Цитата(Oldring @ Apr 14 2011, 01:06)  Единственная адекватная альтернатива, когда проект разрастается и меток становится слишком много... Их всегда слишком много, даже если проект на две копейки.
|
|
|
|
|
Apr 13 2011, 21:30
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(SysRq @ Apr 14 2011, 04:15)  Си, сеньор  ..То есть, с вами нечего церемониться.. Да вы, похоже, еще и дурак - вопрос-то был риторический.. Цитата Названия должны помогать читать написанный алгоритм. Я тоже так думаю: Цитата ..Метки отцу помогают.. Он ставит их в значимых местах программы.. и так, кое-где.. Цитата Так зачем вам вообще ассемблер? Олдринг, вы тоже хам и провокатор? Я же просил, не обсуждать (сравнивать) ассемблер и Си.. или что там еще.. Это уже было и плохо кончилось.. Вы читать умеете?
--------------------
It's me
|
|
|
|
|
Apr 13 2011, 21:37
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(aaarrr @ Apr 14 2011, 01:29)  Их всегда слишком много, даже если проект на две копейки. Это сколько же у вас меток в одном модуле встречается? 26 букв английского алфавита плюс 10 цифр дают 35594 различные метки длиной до трех символов, что, как мне кажется, должно полностью удовлетворить любителей бессмыссленных меток. Вы не пробовали преодолеть границы сознания, расширив кругозор до 4 символов? Цитата(Wise @ Apr 14 2011, 01:30)  Олдринг, вы тоже хам и провокатор? Я трачу своё время на обучение начинающего, поместившего свой вопрос в теме "в помощь начинающему". Вы против того, что я при этом еще и немного веселюсь?
--------------------
Пишите в личку.
|
|
|
|
|
Apr 13 2011, 21:39
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SysRq @ Apr 14 2011, 01:31)  Ежели не трудно, приведите пример хороший такой ситуации. Хотелось бы все же понять логику такого подхода. Пожалуйста: Код brne PC + 2 rjmp xxx
...
sbis REG, BIT rjmp PC - 1 А еще короткие (на 3-5 строк) циклы и тому подобное.
|
|
|
|
|
Apr 13 2011, 21:45
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(Oldring @ Apr 14 2011, 04:37)  Я трачу своё время на обучение начинающего, поместившего свой вопрос в теме "в помощь начинающему". Вы против того, что я при этом еще и немного веселюсь? Вы думаете, что форум "для начинающих" - место для веселья? Администрация, вероятно, вас не поймет. А если вы продолжите - я сам лично, вас пошлю.. Надеюсь, в этом нет сомнений?
--------------------
It's me
|
|
|
|
|
Apr 13 2011, 21:47
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(aaarrr @ Apr 14 2011, 01:43)  Надо полагать, ваше расширенное сознание не вмещает столь сложные конструкции, весельчак вы наш? Да, я не помню и не хочу помнить, как именно там работает PC. На ARM, например, счетчик команд работает совершенно иначе. И интересно было бы посмотреть на вас, пишущего в таком же стиле на x86 ассемблере. Цитата(Wise @ Apr 14 2011, 01:45)  Вы думаете, что форум "для начинающих" - место для веселья? Администрация, вероятно, вас не поймет. А если вы продолжите - я сам лично, вас пошлю.. Надеюсь, в этом нет сомнений? Я думаю, что веселиться можно везде - правила форума этого не запрещают. Пошлете вы или нет - вот это мне совершенно безразлично, профи вы наш.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 13 2011, 21:51
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Oldring @ Apr 14 2011, 01:45)  Да, я не помню и не хочу помнить, как именно там работает PC. Да просто он там работает, в том-то и дело. Цитата(Oldring @ Apr 14 2011, 01:45)  На ARM, например, счетчик команд работает совершенно иначе. И что же, мне это как-то помешает писать, например: Код mov lr, pc bx r0 ? Совсем даже наоборот.
|
|
|
|
|
Apr 13 2011, 21:54
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SysRq @ Apr 14 2011, 01:50)  С ветвлениями аналогично: указать, к примеру, причину, вызвавшую переход в ту или иную ветку. А если причина - выход за допустимые пределы команды branch? Собственно, такой пример я и показал. Цитата(SysRq @ Apr 14 2011, 01:50)  С циклами вообще печально, ибо при последующих правках вероятность случайно заложить ошибку в коде резко возрастает. Я не утверждаю, что в циклах нужно использовать PC+/- (и не использую), но название метки там тоже в подавляющем большинстве случаев не нужно.
|
|
|
|
|
Apr 13 2011, 21:54
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(Oldring @ Apr 14 2011, 04:47)  Я думаю, что веселиться можно везде - правила форума этого не запрещают. Пошлете вы или нет - вот это мне совершенно безразлично, профи вы наш.  Нет, не везде.. Тем более, если вас заранее попросили.. ..Я вас попросил, потом предупредил.. Профи я ваш или нет, а пойдете на ... публично, со страшной силой.
--------------------
It's me
|
|
|
|
|
Apr 13 2011, 21:57
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(aaarrr @ Apr 14 2011, 01:54)  А если причина - выход за допустимые пределы команды branch? Собственно, такой пример я и показал. Ну и напишите ту же метку с префиксом not например Цитата(Wise @ Apr 14 2011, 01:54)  Профи я ваш или нет, а пойдете на ... публично, со страшной силой. Если вы готовы цинично и публично нарушить правила этого форума - вперед. Я сам с удовольствием зарепорчу ваш пост модераторам.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 13 2011, 22:07
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Oldring @ Apr 14 2011, 02:01)  Надеюсь, мне никогда не придется читать ваш код с подобными переходами. Должен вас обрадовать - это крайне маловероятно. Цитата(Oldring @ Apr 14 2011, 02:01)  А сами себе делайте что угодно. Спасибо, дохтур.
|
|
|
|
|
Apr 13 2011, 22:13
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(Oldring @ Apr 14 2011, 04:57)  Если вы готовы цинично и публично нарушить правила этого форума - вперед. Я сам с удовольствием зарепорчу ваш пост модераторам. Я-то готов, всегда.. когда не вижу других способов образумить.. Что вы провокатор - общеизвестно.. Флудите здесь который пост, да и нагло.. ..Завтра днем зайду, если такая хрень продолжится - либо обматерю, либо обращусь к администрации. Дерзайте..
--------------------
It's me
|
|
|
|
|
Apr 13 2011, 22:14
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(SysRq @ Apr 14 2011, 02:06)  Очень натянуто как-то. При наличии команды пропуска следующей команды, срабатывающей при выполнении заданного условия, и, поскольку веток две, всегда можно сделать переход жестко, безусловными переходами. Где в AVR команда пропуска по условию ? По битам в i/o или в регистрах - да. А вот по битам в регистре состояния - облом. Вообще, IMHO, глупо было выносить SREG из зоны доступности sbis/sbic - в PIC16 этот момент гораздо приятнее...
|
|
|
|
|
Apr 13 2011, 22:15
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Oldring @ Apr 14 2011, 02:12)  Я не "дохтур". А похожи. Цитата(Oldring @ Apr 14 2011, 02:12)  Но вас я уже по этой истории конечно уже запомнил как человека, отстаивающего извращения в программировании. Ну, если включать иногда на секунду мозг считается извращением, то я бессилен что-либо возразить.
|
|
|
|
|
Apr 13 2011, 22:25
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(SysRq @ Apr 14 2011, 02:11)  Пример, пример давайте! Тема предметная, без примеров начинаются фломастеры на вкус и цвет  Уже написали. brge/brlt. Цитата(Wise @ Apr 14 2011, 02:13)  ..Завтра днем зайду Приятных вам снов. Цитата(aaarrr @ Apr 14 2011, 02:15)  Ну, если включать иногда на секунду мозг считается извращением, то я бессилен что-либо возразить. Нет, "включать мозги" как раз извращением не считается. Извращение - это думать, что включаешь мозги, когда на самом деле - нет.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 13 2011, 22:44
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(rx3apf @ Apr 14 2011, 02:14)  По битам в i/o или в регистрах - да. А вот по битам в регистре состояния - облом. Да. Но команда IN флаги не меняет, насколько я помню. -- Цитата(aaarrr @ Apr 14 2011, 02:11)  Для замены BRGE что предложите? Осмысленные метки, я их изначально предлагаю  Ежели доводить до абсурда, то разложить на составляющие результат BRGE тоже возможно. Цитата(aaarrr @ Apr 14 2011, 02:15)  Ну, если включать иногда на секунду мозг считается извращением... Вряд ли извращением, конечно, но неоправданным риском точно. Доверять сие стоит лишь транслятору с ЯВУ, т.к. он не ошибается.
|
|
|
|
|
Apr 13 2011, 22:50
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Oldring @ Apr 14 2011, 02:33)  Даже хуже, но это всё равно не аргумент, чтобы заниматься подобной хакерней. Нет, батенька, не тянут такие конструкции на "хак": слишком уж просто и очевидно. P.S. Блестящий, остроумнейший неологизм! Примите мои искренние поздравления, маэстро. Цитата(SysRq @ Apr 14 2011, 02:44)  Да. Но команда IN флаги не меняет, насколько я помню. Код in reg, SREG sbrc reg, BIT rjmp xxx Несколько вычурно, не находите? Да и с GE/LT все равно облом. Цитата(SysRq @ Apr 14 2011, 02:44)  Вряд ли извращением, конечно, но неоправданным риском точно. Доверять сие стоит лишь транслятору с ЯВУ, т.к. он не ошибается. Объясните мне, где я рискую ошибиться в такой конструкции: Код brhs PC + 2 rjmp xxx
|
|
|
|
|
Apr 13 2011, 23:06
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(aaarrr @ Apr 14 2011, 02:50)  Нет, батенька, не тянут такие конструкции на "хак": слишком уж просто и очевидно. Именно на хак и тянет. Экономия в набивании нескольких символов за счет того, что повышается риск ошибоок при модификации программы и ухудшает видимость структуры программы. Метки, кстати, служат еще одной важной функции - показывают, куда может быть передано управление. Соответственно, иногда только текстовым поиском можно легко найти все места, откуда осуществляется переход на помеченную инструкцию. Цитата(aaarrr @ Apr 14 2011, 02:50)  Объясните мне, где я рискую ошибиться в такой конструкции: Код brhs PC + 2 rjmp xxx На первый взгляд, конечно, кажется, что "brhs PC + 2" текстуально полностью эквивалентно скипу следующего rjmp, если применять единообразно. Но это неверно. Помню, как-то ради быстрого перехода на больший кристалл заменил в проекте все rjmp и rcall на jmp и call текстовой заменой  Цитата(SysRq @ Apr 14 2011, 02:44)  Доверять сие стоит лишь транслятору с ЯВУ, т.к. он не ошибается. Все врут. В моей практике было несколько случаев, когда аккуратное расследование показывало, что наврал именно транслятор. Даже такой хорошо известный и очень надежный транслятор, как MSVC 6.0
--------------------
Пишите в личку.
|
|
|
|
|
Apr 13 2011, 23:07
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(aaarrr @ Apr 14 2011, 02:50)  Несколько вычурно, не находите? Нахожу, конечно же. Однако, информативность кода та же, что без меток, но меньше шансов ляпнуть ошибку. Цитата(aaarrr @ Apr 14 2011, 02:50)  Да и с GE/LT все равно облом. Нет, не облом, если декомпозировать команду. Но выглядеть будет крайне идиотски, не спорю. Цитата(aaarrr @ Apr 14 2011, 02:50)  Объясните мне, где я рискую ошибиться в такой конструкции: Код brhs PC + 2 rjmp xxx В процессе правки заменить rjmp на jmp, потому что код разросся (а правили сложно, долго, и где-то много ниже этого вот места), и компилятор ругался на невозможность relative jump. Ошибка по невнимательности. Человеческий фактор.
|
|
|
|
|
Apr 13 2011, 23:29
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Oldring @ Apr 14 2011, 03:06)  Именно на хак и тянет. Экономия в набивании нескольких символов за счет того, что повышается риск ошибоок при модификации программы и ухудшает видимость структуры программы. Метки, кстати, служат еще одной важной функции - показывают, куда может быть передано управление. Соответственно, иногда только текстовым поиском можно легко найти все места, откуда осуществляется переход на помеченную инструкцию. Какой текстовый поиск? Речь идет об очевидных конструкциях. Ну куда еще может быть передано управление командой "rjmp PC - 1", кроме как на предыдущую? Цитата(SysRq @ Apr 14 2011, 03:07)  Нахожу, конечно же. Однако, информативность кода та же, что без меток, но меньше шансов ляпнуть ошибку. Информативность много ниже. Я уж не говорю о потерянном времени и затраченном регистре. Цитата(SysRq @ Apr 14 2011, 03:07)  Нет, не облом, если декомпозировать команду. Но выглядеть будет крайне идиотски, не спорю. Ну, так можно и до виртуальной машины дойти потихоньку. Цитата(Oldring @ Apr 14 2011, 03:06)  На первый взгляд, конечно, кажется, что "brhs PC + 2" текстуально полностью эквивалентно скипу следующего rjmp, если применять единообразно. Но это неверно. Помню, как-то ради быстрого перехода на больший кристалл заменил в проекте все rjmp и rcall на jmp и call текстовой заменой  Цитата(SysRq @ Apr 14 2011, 03:07)  В процессе правки заменить rjmp на jmp, потому что код разросся (а правили сложно, долго, и где-то много ниже этого вот места), и компилятор ругался на невозможность relative jump. Ошибка по невнимательности. Человеческий фактор. Если уж мы имеем дело с ассемблером, то человеческий фактор и так проявляется на каждом шагу. В конце концов, можно и метку в процессе copy-paste воткнуть не туда. Поэтому элементарную внимательность никто не отменяет.
|
|
|
|
|
Apr 14 2011, 00:21
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SysRq @ Apr 14 2011, 03:58)  Класс и цена ошибки другие. Время и усилия на поиск и устранения больше, последствия намного более непредсказуемые, поддерживать код сложнее. Не вижу ничего хорошего в таком подходе, эх  Я далек от того, чтобы вводить классификацию ошибок. А время на поиск и устранение вообще трудно предсказать. Вот попробуйте найти ошибку в такой конструкции: Код ldi r16, 0 sbrс r17, 2 ldi r16, 1 Пример вполне себе из жизни. Не дословно, конечно, но изюминка сохранена.
|
|
|
|
|
Apr 14 2011, 02:30
|
Местный
  
Группа: Участник
Сообщений: 256
Регистрация: 5-04-09
Из: Москва
Пользователь №: 47 180

|
Цитата(Wise @ Apr 14 2011, 00:37)  Вы с чего взяли, что я не читал дэйтшиты и книги Евстифеева? На чем такая уверенность основана, на том, что я задал вопрос? Sorry, если обидел... Не хотел. Не уверенность, а , скорее, удивление ... не тому, что задан вопрос, а какой вопрос задан. Цитата(Wise @ Apr 14 2011, 00:37)  ..А книг, могу еще штук 16 перечислить, хотите? Смысл? Их читать надо Цитата(Wise @ Apr 14 2011, 00:37)  ..Я сказал, что выложу все свои "фи" атмегам, а их много накопилось, и выложу. Но, сейчас я занят. Все позже..  Было бы очень интересно.
|
|
|
|
|
Apr 14 2011, 05:01
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(aaarrr @ Apr 14 2011, 04:21)  Я далек от того, чтобы вводить классификацию ошибок. А время на поиск и устранение вообще трудно предсказать. Вот попробуйте найти ошибку в такой конструкции: Код ldi r16, 0 sbrс r17, 2 ldi r16, 1 Пример вполне себе из жизни. Не дословно, конечно, но изюминка сохранена. Что-то не прожевать изюминку. Не вижу ничего криминального. Колитесь, в чём фишка
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Apr 14 2011, 07:18
|

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

|
QUOTE (rx3apf @ Apr 14 2011, 01:14)  Где в AVR команда пропуска по условию ? По битам в i/o или в регистрах - да. А вот по битам в регистре состояния - облом. Вообще, IMHO, глупо было выносить SREG из зоны доступности sbis/sbic - в PIC16 этот момент гораздо приятнее... QUOTE (aaarrr @ Apr 14 2011, 01:29)  Даже хуже. Как верно заметил rx3apf, SREG не попадает в область IO, соответственно, никакие из его флагов не доступны командам sbic/sbis. QUOTE (Oldring @ Apr 14 2011, 01:33)  Даже хуже, но это всё равно не аргумент, чтобы заниматься подобной хакерней. Простите, господа, но не ожидал я от Вас такого загона. Скажите, какая разница между SBxx (выполнение следующей команды через такт или невыполнение стоимостью 2 такта) и BRxx (с крайним случаем перехода через команду - выполнение следующей команды через такт (переход не выполняется) или невыполнение при помощи перехода, а не пропуска, тоже ценой 2 такта)?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Apr 14 2011, 07:36
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(ILYAUL @ Apr 14 2011, 11:17)  ...решил проверить , а поймает её студия и получил результат не ловит. У меня противоположный результат (проверил только вот; дома AVRStudio не было на ПК). AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36) успешно обнаруживает и соответствующим образом ругается. -- Цитата(Rst7 @ Apr 14 2011, 11:18)  Скажите, какая разница... В первом случае отсутствие необходимости указать куда переходить. Метка. Суть темы, собственно.
|
|
|
|
|
Apr 14 2011, 07:37
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(Wise @ Apr 14 2011, 00:37)  ..Может быть, я и программист в кавычках, как вы отметили, однако, я не просил вас давать оценку моему уровню. Под "программистами" я не имел ввиду конкретно Вас, сорри если Вы приняли на свой счет. Цитата(Wise @ Apr 14 2011, 00:37)  Для симметрии, хотите услышать мою оценку вашего уровня? У меня сложилось некоторое мнение, на основании ваших постов здесь.. Представляю оценку  . Стыдно признаться, но я ни разу не использовал мнемонику PC+/-7. Цитата(Wise @ Apr 14 2011, 00:37)  Еще раз пост Ark-а перечитайте, он хорошо поясняет причину, по которой задан вопрос в теме. Возможно, вы не поняли.. Возможно и я не понял. Но я всетаки хочу разобраться и понять вконце концов суть вашего вопроса. Попробую сформулировать по другому: Вы утверждаете что ATMELовские трансляторы не правильно компилируют некоторые команды у которых аргументом является програмный счётчик?
|
|
|
|
|
Apr 14 2011, 07:44
|

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

|
QUOTE В первом случае отсутствие необходимости указать куда переходить. Метка. Суть темы, собственно. Нет. Суть темы - явно в кривых руках топикстартера. А это локальный оффтопик про якобы "говносистему команд". Причем, от профессионалов, что и удивляет. QUOTE Разница принципиальная - с тупого конца разбивать, или с острого ! Ах в этом смысле
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Apr 14 2011, 07:46
|

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

|
За всю жизнь переход без метки использовал только один раз: CODE .section .drv.vectors,"ax",@progbits
RJMP ColdStart RJMP . + 0x800 - 2 ; INT0_vect, redirect to application section RJMP . + 0x800 - 2 ; INT1_vect, redirect to application section RJMP . + 0x800 - 2 ; TIMER2_COMP_vect, redirect to application section RJMP . + 0x800 - 2 ; TIMER2_OVF_vect, redirect to application section RJMP TX_START_Handler ; TIMER1_CAPT_vect ........ В остальных случаях хватало локальных и временных меток потому что гнутый асм их поддерживает. А студийный кроме них не поддерживает еще кучу всего и за это идет лесом сразу.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 14 2011, 07:48
|

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

|
QUOTE Текстуальная. Да ну? Напомню начальный вброс: QUOTE Вообще, IMHO, глупо было выносить SREG из зоны доступности sbis/sbic - в PIC16 этот момент гораздо приятнее...
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|