Atmega8 и SPI 25 серии помогите разобраться

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

[uquote="Starichok51",url="/forum/viewtopic.php?p=3793309#p3793309"]проц не умеет выполнять х++, компилятор ему транслирует это выражение в набор команд, которые понимает проц.[/uquote]

Это понятно что синтаксис СИ + компилятор делают свое дело. Но вопрос был в том, сможет ли проц оперируя своими инструментами накручивать бинарный счетчик.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

там не х++, а сначала х-100 и а++, столько же раз, потом х-10 и б++ столько же раз, потом х—>с...
максимальное количество итераций будет у чисел 190-199, 20 штук...
но на самом деле у ассемблерщиков есть и поинтересней алгоритмы...

Добавлено after 3 minutes 37 seconds:
но АЛУ в команде "Delay" бывает простым х++ (точнейх--) не то что инты, лонгинты "разматывает"!
Последний раз редактировалось Ivanoff-iv Ср фев 19, 2020 17:01:46, всего редактировалось 2 раза.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3793322#p3793322"]там не х++, а сначала х-100 и а++, столько же раз, потом х-10 и б++ столько же раз, потом х—>с...
максимальное количество итераций будет у чисел 190-199, 20 штук...
но на самом деле у ассемблерщиков есть и поинтересней алгоритмы...[/uquote]

Нее, х++ я буду использовать в коде СИ, чтобы посчитать и ограничить шаги мотора. Но число х я буду постоянно сравнивать с двоичным числом, если это допускается.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

franc_di, у вас изначально подход не с той стороны. Вы пишите на языке выского уровня - C. На этом языке можно писать под любую платформу, под которую есть компилятор. В языке у вас переменная int - целое знаковое 16-битное число. Как оно там хранится внутри текущего железа - это вопрос отдельный. Чтобы понять как операции работают на конкретно вашем железе - надо смотреть ассемблерный выхлоп кода. Ну или просто знать. Иначе никак.
У GCC из elf можно легко получить ассемблерный листинг в перемешу с C кодом через avr-objdump -Sd in.elf

Чо вы напишите x = x * 256, что x = x << 8 - результат в коде в итоге будет одинаковый - сдвиг на 8 бит влево:

Код: Выделить всё

  x <<= 8;
  54:   80 91 60 00     lds     r24, 0x0060     ; 0x800060 <_edata>
  58:   90 91 61 00     lds     r25, 0x0061     ; 0x800061 <_edata+0x1>
  5c:   98 2f           mov     r25, r24
  5e:   88 27           eor     r24, r24
  60:   90 93 61 00     sts     0x0061, r25     ; 0x800061 <_edata+0x1>
  64:   80 93 60 00     sts     0x0060, r24     ; 0x800060 <_edata>
  x *= 256;
  68:   80 91 60 00     lds     r24, 0x0060     ; 0x800060 <_edata>
  6c:   90 91 61 00     lds     r25, 0x0061     ; 0x800061 <_edata+0x1>
  70:   98 2f           mov     r25, r24
  72:   88 27           eor     r24, r24
  74:   90 93 61 00     sts     0x0061, r25     ; 0x800061 <_edata+0x1>
  78:   80 93 60 00     sts     0x0060, r24     ; 0x800060 <_edata>
Это выхлоп кода полностью без оптимизации! И переменная с модом volatile. В иных случаях компилятор всё это дико оптимизирует. Две пары инструкций на загрузку-выгрузку в-из регистров (lds, sts) дальше пропускать буду.

Если вы напишите x = x + 1 - выхлоп будет конкретно для AVR через инструкцию ADIW:

Код: Выделить всё

  x++;
  84:   01 96           adiw    r24, 0x01       ; 1
У пиков младших, к примеру, емнип, там будет небольшой набор инструкция для проверки старшего и младшего разряда отдельно. Вот пример как AVR-GCC решает задачу с 32-битными числами:

Код: Выделить всё

  y += 123456;
  a6:   80 91 62 00     lds     r24, 0x0062     ; 0x800062 <y>
  aa:   90 91 63 00     lds     r25, 0x0063     ; 0x800063 <y+0x1>
  ae:   a0 91 64 00     lds     r26, 0x0064     ; 0x800064 <y+0x2>
  b2:   b0 91 65 00     lds     r27, 0x0065     ; 0x800065 <y+0x3>
  b6:   80 5c           subi    r24, 0xC0       ; 192
  b8:   9d 41           sbci    r25, 0x1D       ; 29
  ba:   ae 4f           sbci    r26, 0xFE       ; 254
  bc:   bf 4f           sbci    r27, 0xFF       ; 255
  be:   80 93 62 00     sts     0x0062, r24     ; 0x800062 <y>
  c2:   90 93 63 00     sts     0x0063, r25     ; 0x800063 <y+0x1>
  c6:   a0 93 64 00     sts     0x0064, r26     ; 0x800064 <y+0x2>
  ca:   b0 93 65 00     sts     0x0065, r27     ; 0x800065 <y+0x3>
Добавлено after 4 minutes 46 seconds:
[uquote="franc_di",url="/forum/viewtopic.php?p=3793324#p3793324"]Но число х я буду постоянно сравнивать с двоичным числом, если это допускается.[/uquote]
Да не важно в какой системе счисления. Хранятся все числа в МК всегда в двоичном виде. А на "сях" вы можете писать в любой системе счисления. Всякие там преобразования и endianess играют только при общении с другими ус-вами с отличным форматом _передачи_. Но у вас тут явно пока совсем не о том.
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

Извините я из этого ничего не понимаю пока.
Кроме этого:
Чо вы напишите x = x * 256, что x = x << 8 - результат в коде в итоге будет одинаковый - сдвиг на 8 бит влево:
Мой подход обусловлен интересом реализовать идею. Отсюда я ищу понятные куски кода, формат записи чисел и минимальные правила, чтобы просто реализовать идею.
Конечно надо было забыть про идею на год или два и взять пару книжек для чайников в СИ. Но куда интереснее изучать что-то на живых примерах. Си как язык программирования мне неинтересен. Он просто более ли менее понятен в реализации алгоритма работы микропрограммы процессора. Иных задач нету.

Добавлено after 3 minutes 7 seconds:
Да не важно в какой системе счисления. Хранятся все числа в МК всегда в двоичном виде. А на "сях" вы можете писать в любой системе счисления. Всякие там преобразования и endianess играют только при общении с другими ус-вами с отличным форматом _передачи_. Но у вас тут явно пока совсем не о том.
Спасибо, понятно :)
Реклама
Модератор
Аватара пользователя
Сообщения: 19063
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

franc_di писал(а):Но вопрос был в том, сможет ли проц оперируя своими инструментами накручивать бинарный счетчик.
еще раз повторю:
проц САМ ничего не умеет делать. проц работает под управлением тобой написанной программы.
что в программе напишешь, то и будет делать проц ...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

[uquote="Starichok51",url="/forum/viewtopic.php?p=3793749#p3793749"]
franc_di писал(а):Но вопрос был в том, сможет ли проц оперируя своими инструментами накручивать бинарный счетчик.
еще раз повторю:
проц САМ ничего не умеет делать. проц работает под управлением тобой написанной программы.
что в программе напишешь, то и будет делать проц ...[/uquote]

Мой вопрос не корректен конечно. Но я новичок в этом))
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Вынужден с Вами, Starichok51, не согласиться - кое-что процессор, а точнее АЛУ, умеет делать сам: он умеет выполнять целый набор команд, из которых потом и строится алгоритм... другой вопрос, что он ничего сам без алгоритма делать не будет... (всё-таки не будет и не умеет, это разные вещи)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="franc_di",url="/forum/viewtopic.php?p=3793331#p3793331"]Извините я из этого ничего не понимаю пока.[/uquote]

Код: Выделить всё

  70:   98 2f           mov     r25, r24
  72:   88 27           eor     r24, r24
У нас до этого из памяти загружены 2 байта нашей переменной. Младший в регистр r24, старший - в регистр r25. Затем инструкцией mov младший байт перемещается в старший, а младший потом инструкцией eor обнуляется. Вот мы и умножили на 256 по-сути. Это если без оптимизации что делается.
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

это типа ассемблера?
Я и говорю что СИ более ли менее по логике понятна, и интересовал именно момент корректности делить и умножать в привычном людям варианте.

А вот это все очень сложно, держать алгоритм программы в целом и еще думать как зарезервировать ячейку, записать данные, переместить . Пусть этим занимается компилятор и проц в последствии.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Так на С и не надо думать об этом, об этом думает компилятор. Об это уже и было написано. Вы же сами начали выяснить как оно "внутри" происходит.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

franc_di писал(а):...
Вы мозгоебкопатель. Вы неоднократно подчеркнули, что не собираетесь читать книги по архитектуре микроконтроллеров, языкам, методам программирования. Вы тратите наше время. Это самый ценный и НЕВОСПОЛНИМЫЙ ресурс. Я вам указываю на то, что вы не уважаете окружающих. И не вижу никакого смысла потворствовать вам. Только вы получаете какую-либо сомнительную выгоду. От ваших действий нет пользы как участникам форума, так и гостям-читателям. Ни единого бита полезной информации.
Предлагаю бойкотировать этого персонажа. Пусть занимается интеллектуальным онанизмом в одиночестве или в другом месте.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

Значит я не корректно выразился. Меня интересовало что творится в регистре обмена данными, а также как данное число без ошибок загнать в формулу через переменную, где будут обычные числа в 10чной системе. Чтобы посчиталось правильно.
Я думал что тут надо как для человека переводить все в единую систему счисления, а затем совершать действия. :)
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

franc_di, -> Основы Си
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

franc_di писал(а):А вот это все очень сложно, держать алгоритм программы в целом и еще думать как зарезервировать ячейку, записать данные, переместить . Пусть этим занимается компилятор и проц в последствии.
Это не сложно на самом деле. Но этому нужно учиться. Я несколько лет писал на ассемблере. И нужно было держать в голове не только алгоритмы программ, но и состояние регистров, ячеек памяти и много других параметров параллельно. Язык си в этом плане проще. Но все равно ты должен держать в голове алгоритмы.

Вы не любите сложностей. Вы потворствуете, потакаете своим слабостям. Лени к примеру. Беда в том, что мозг эволюционно вынужден лениться. Ради экономии энергии. И только сам человек способен расшевелить эту ленивую животину. И держать животину в тонусе.

Впрочем не думаю, что вы поймете.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

Demiurg писал(а):
franc_di писал(а):...
Вы мозгоебкопатель. Вы неоднократно подчеркнули, что не собираетесь читать книги по архитектуре микроконтроллеров, языкам, методам программирования. Вы тратите наше время. Это самый ценный и НЕВОСПОЛНИМЫЙ ресурс. Я вам указываю на то, что вы не уважаете окружающих. И не вижу никакого смысла потворствовать вам. Только вы получаете какую-либо сомнительную выгоду. От ваших действий нет пользы как участникам форума, так и гостям-читателям. Ни единого бита полезной информации.
Предлагаю бойкотировать этого персонажа. Пусть занимается интеллектуальным онанизмом в одиночестве или в другом месте.
Согласен, что вопросы давно уже вышли за рамки темы. Благодарю за потраченное время и разъяснения.
Dimon456 писал(а):franc_di, -> Основы Си
Спасибо читаю.
Demiurg писал(а):Вы не любите сложностей. Вы потворствуете, потакаете своим слабостям. Лени к примеру. Беда в том, что мозг эволюционно вынужден лениться. Ради экономии энергии. И только сам человек способен расшевелить эту ленивую животину. И держать животину в тонусе.
На самом деле ваша мысль ясна с самого начала.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

[uquote="franc_di",url="/forum/viewtopic.php?p=3794181#p3794181"]На самом деле ваша мысль ясна с самого начала.[/uquote]
Поделитесь. Какая мысль?
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

[uquote="Demiurg",url="/forum/viewtopic.php?p=3794187#p3794187"][uquote="franc_di",url="/forum/viewtopic.php?p=3794181#p3794181"]На самом деле ваша мысль ясна с самого начала.[/uquote]
Поделитесь. Какая мысль?[/uquote]

"иди читай, пройди все то что прошел я, набей шишек, получи опыт, а потом поговорим на равных"

Добавлено after 5 minutes 27 seconds:
Между прочим вы сами содействуете тому что тема уходит от сути, расписывая алгоритмы и мысли заведомо зная что я ничего не пойму. В то время другие участники форума тыкали носом в ответ и давали полезные ссылки на понятную информацию.
Вам видимо приятно поглумиться над глупым в данной теме человеком. Никогда себе такого не позволяю в своем деле.
Планку своих знаний я изначально обрисовал, и тот кто был на моем месте когда то просто понял. А вы добились своих знаний титаническими усилиями, чтением сложных книг(кстати не без помощи опытных отзывчивых людей), и вам просто жалко пускать эти знания в никуда.
Можно десятилетия читать пласты полезной литературы и через 10-20 лет оно пригодится в малом объеме.
А мне интереснее получать только полезную информацию в виде базовых понятий и восполнять пробелы между понятиями. Считаю такой метод впитывания знаний наиболее эффективным и весьма продуктивным. А главное с максимально быстрым достижением цели.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

[uquote="franc_di",url="/forum/viewtopic.php?p=3794190#p3794190"]"иди читай, пройди все то что прошел я, набей шишек, получи опыт, а потом поговорим на равных"

Между прочим вы сами содействуете тому что тема уходит от сути, расписывая алгоритмы и мысли заведомо зная что я ничего не пойму. В то время другие участники форума тыкали носом в ответ и давали полезные ссылки на понятную информацию.
Вам видимо приятно поглумиться над глупым в данной теме человеком. Никогда себе такого не позволяю в своем деле.
Планку своих знаний я изначально обрисовал, и тот кто был на моем месте когда то просто понял. А вы добились своих знаний титаническими усилиями, чтением сложных книг(кстати не без помощи опытных отзывчивых людей), и вам просто жалко пускать эти знания в никуда.
Можно десятилетия читать пласты полезной литературы и через 10-20 лет оно пригодится в малом объеме.
А мне интереснее получать только полезную информацию в виде базовых понятий и восполнять пробелы между понятиями. Считаю такой метод впитывания знаний наиболее эффективным и весьма продуктивным. А главное с максимально быстрым достижением цели.[/uquote]
Между нами огромная разница. Я изначально понимал, что все это непросто и сложно. Знаете, как я начал? Покупал комплектующие в одной фирме. Взял у них бесплатный каталог, обзорник. Это был 2007 год. И там были описаны краткие сводки популярных микроконтроллеров. AVR, PIC, STM. И только на основе этих скудных сведений я понял, что мне нужно начать с AVR. Я купил книги по архитектуре МК AVR, отладочную плату STK-500. И самостоятельно начал осваивать. Читал книги, писал первые простейшие программы. И разбирался сам. И только когда я понимал, что зашел в тупик, шел на форумы.
Вы правы, не без помощи. Но знаете, почему они мне помогали? Потому что видели, что я предпринимал усилия. И шел за помощью, только в тех случаях, когда был в тупике. И меня тоже отправляли читать книги.
Вы же хотите на халяву получить эти знания. 10-20 лет это ваши химеры, страхи сложностей. Если вы соизволите взять себя за жопу, не ныть, а пахать, читать, перерабатывать информацию, то:
Изучите азы, не будете добить форумы глупыми, бесполезными вопросами. Вы сами получите эту информацию, сэкономите себе время и участникам форумов.
Освоите архитектуру. Перестанете долбить форумы глупыми вопросами.
Освоите язык. Перестанете долбить форумы глупыми вопросами.
Освоите методы программирования. Перестанете долбить форумы глупыми вопросами.
И да, это займет несколько лет.
А теперь смотри. Нам всем потребовалось на это на все по нескольку лет. И скажи мне, каким образом нам тебе утрамбовать за неделю, месяц тот объем информации, на переработку которого нам всем потребовалось по несколько лет????!!!!
Это не разжевать никак. Это как негру пытаться объяснить, что такое снег. Только он никогда его не видел. И никогда на его территории не было морозов.
Все, прекрати ныть. Сложно для тебя все это? Иди крути гайки, лопатой работай, что угодно. Потому что ты свои извилины даже НЕ ПЫТАЕШЬСЯ напрячь.
И это я все тебе написал не потому что я умный, а ты дурак. А потому что ты лентяй и раздолбай по жизни. И не вздумай оскорбиться. Может микроконтроллеры это не твое. Смирись и найди свой путь в жизни. Почитай, что я тебе написал, и подумай. Может быть, я написал самые важные слова в твоей жизни...

В нашей современной реальности доступность интернета, видео, гаджетов люди разучились трудиться. Искать информацию. В этом главная беда. Все эти ардуины дают ложное чувство легкости. Типа берешь ардуину, накидал несколько строчек кода и все работает. Только это мираж, химера. И вы жертва этого миража, химеры и современной реальности....
Последний раз редактировалось Demiurg Пт фев 21, 2020 00:31:23, всего редактировалось 1 раз.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Сб фев 08, 2020 02:33:35

Сообщение franc_di »

И скажи мне, каким образом нам тебе утрамбовать за неделю, месяц тот объем информации, на переработку которого нам всем потребовалось по несколько лет????!!!!
Это не разжевать никак.
Не нужен мне объем вашей информации, мне своего багажа (теоретических из техникума и практических из жизни) по РЭА хватает и поделиться могу без глумления. Не просил я много, у меня был ступор в конкретных местах. Теперь я могу просто дописать программу, отладить ее корректную работу, и продолжу изучение на более сложных но интересных задачах.
Мне нужны были отправные точки, откуда начинать и в какую сторону искать знания дальше. Я определился с направлением поисков, За что спасибо участникам форума. Зато теперь я знаю в каком узком направлении мне нужна подробная информация по программированию. На базе этих отправных точек я найду в яндексе и по приведенным ссылкам свой необходимый объем знаний.
Ответить

Вернуться в «AVR»