...контрольная сумма всех предыдущих четырех байт...
Если реально посчитать то всё сойдется... в 8 случаях из 10 ;)
Но если немного поразмыслить... Как сумма четырех байт может вмещаться в один байт???? :)))
Да ни как! И ни как она не вмещается :)
Когда речь идет о контрольной сумме, всегда подразумевается сложение по модулю. Так что, если не вместилось - значит считаем только то, что вместилось, а не вместившиеся разряды - отбрасываем.
Nord_Air пишет:
На ассемблере сумма байтов надеюсь от Си сильно не отличается ;)
Вообще-то отличается. И иногда сильно - как раз в том случае, если "не вмещается": в Ассемблере при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты, а в Си - не менее чем двухбайтовые слова.
Когда речь идет о контрольной сумме, всегда подразумевается сложение по модулю. Так что, если не вместилось - значит считаем только то, что вместилось, а не вместившиеся разряды - отбрасываем.
Сложение по модулю, это сложение чисел без учета знака. Таково определение из математики или даже алгебры...
Есть код, в библиотеке, точнее функция. Которая считает сумму байт. Расчет по модулю, там сделан, в следствии кривожопого мышления, которое мы разбирали неделей ранее, а именно ошибки которая связана с неправильным отображением отрицательных температур.
Минус там приходит в 4-й или 3-й байт в виде цифры 128. Ну.. вот каг бы такая реализация.... Это факт. А не в виде первого байта.
Ну и собсно вопрос? А что ты хотел сказать и на что указать? Ну допустим реализовно сложение по модулю и чё??? Оно всё равно неправильное.... В конкретной задаче.
Я могу развернуть тему. Некий автор библиотеки, читал даташит, и на его основе писал библиотеку. Он считал, что при минусе, будут приходить отрицательные значения. Видимо, где первый бит будет зарезервирован под знак. Его чаянья ясны и понятны, но с действительностью они не имеют ничего общего.
Точно так же он считал и сумму... Но какая разница.??? С модулем или без. Как можно впихнуть в один байт сумму четырех. Нет я вижу ошибку, и понимаю как оно реализовано... И как нужно считать сумму... Но код библиотек от этого правильнее не становится ;)
andriano пишет:
при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты
Я не очень пониимаю, что такое промежуточные результаты при сложении... Оставлю это без комментариев.
Сложение по модулю, это сложение чисел без учета знака. Таково определение из математики или даже алгебры...
В данном случае результат не зависит от того, есть знак или нет.
Цитата:
Ну и собсно вопрос? А что ты хотел сказать и на что указать? Ну допустим реализовно сложение по модулю и чё??? Оно всё равно неправильное.... В конкретной задаче.
Почему неправильное то?
Цитата:
Точно так же он считал и сумму... Но какая разница.??? С модулем или без. Как можно впихнуть в один байт сумму четырех. Нет я вижу ошибку, и понимаю как оно реализовано... И как нужно считать сумму... Но код библиотек от этого правильнее не становится ;)
В библиотеку я и не заглядывал - лень. А в один байт легко впихивается сумма какого угодно количества байт, если нас не интересует перенос в старшие разряды.
Цитата:
andriano пишет:
при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты
Я не очень пониимаю, что такое промежуточные результаты при сложении... Оставлю это без комментариев.
Если мы складываем между собой 4 байта, то первые две суммы у нас промежуточные, а последняя - окончательная (в случае с Ассемблером). А в случае Си все три суммы - промежуточные, а последняя операция уже не суммирование, а присваивание - происходит с усечением старших разрядов. Чего здесь непонятного? Все операции при вычислении любой формулы - промежуточные, кроме одной - самой последней.
может просто к checksumm нужно относиться не как к математической сумме, а как к хешу, вроде md5... буков может быть миллиард, а хеш всего 32 символа... тебе же не надо восстанавливать из чексума температуру, только проверить...
чисто для контроля помех в невоенной аппаратуре вполне пригодно. я так думаю)
Если мы складываем между собой 4 байта, то первые две суммы у нас промежуточные, а последняя - окончательная (в случае с Ассемблером). А в случае Си все три суммы - промежуточные, а последняя операция уже не суммирование, а присваивание - происходит с усечением старших разрядов.
и что, есть какой-то шанс, что компилятор/оптимизатор видя byte = byte + byte; откомпилит кам-то иначе, чем просто сложить свои любимые 8bit регистры? не верю)) (это не претензия или недоверие, это неуверенность))
...пойду читану, как исходники кода на ассемблере увидеть, потом их посмотрю, и уже буду увереннее)))
CRC - не арифметическая сумма, любая википедия в одном абзаце объяснит, что это код вычисляемый по определенному алгоритму. Что за тупняк опять начался...
и что, есть какой-то шанс, что компилятор/оптимизатор видя byte = byte + byte; откомпилит кам-то иначе, чем просто сложить свои любимые 8bit регистры? не верю))
Читайте стандарт языка.
Впрочем, если "не верю", то даже и не знаю, чем можно Вам помочь.
Мда... Я разобрался пока 128 не записал... понятно не стало.
библиотека iarduino неправильно работала из-за неправильного приведения типов. Байт высоких разрядов температуры знаковый и в нем 128 это -1, в стальных байтах 128 это 128. А массив инициилизируется как какой-то один тип. Читать из датчика нужно как обычные байты , а уже после, правильно складывать.
Библиотека амперки рабочая, но решение там довольно топорное. Если 128, то умножаем на -1. Но когда я сам до этого дошел, я сделал точно так же :) Типа ну датчик так работает... :)
Датчик, теоретически может работать и при температуре ниже -25.5 а это уже не будет обрабатываться этой библиотекой.
На этом всё, походу мне надо немного отдохнуть от всех этих микроконтроллеров :)
ldd r19, Y+5 // загружаем переменные в регистры
ldd r24, Y+4 //...
ldd r18, Y+3 //...
ldd r25, Y+2 //загрузили переменные в регистры
add r24, r19 //и погнали складывать
add r24, r18 //и снова
add r24, r25 //и снова
std Y+1, r24 //это результат
как и положено, используются только 8bit...
слава Богу, программисты писавшие компилятор оказались не настолько тупыми, как некоторые, что бревна в своем мозгу не чувствуют)))
что, andriano, есть что сказать? промежуточные, блин, результаты, ага...
это же надо, какую-то хрень придумать про какие-то промежуточные результаты (вообще ересь), какие-то стандарты языка, которые регламентируют способ и разрядность вычисления - это полнейший бред!
На этом всё, походу мне надо немного отдохнуть от всех этих микроконтроллеров :)
progrik Изи мен ;) Здесь все в основном учатся.
да, что-то.. нервы обнажены, работаю на износ))
а я устаю не от мк, а от сопутствующего морального ущерба, наносимого всякими сверх разумами - любителями итальянского бренда "Po Diagonalli"))
ldd r19, Y+5 // загружаем переменные в регистры
ldd r24, Y+4 //...
ldd r18, Y+3 //...
ldd r25, Y+2 //загрузили переменные в регистры
add r24, r19 //и погнали складывать
add r24, r18 //и снова
add r24, r25 //и снова
std Y+1, r24 //это результат
как и положено, используются только 8bit...
Мы о чем говорим? О Си или об Ассемблере?
Вопрос №1: Зачем здесь volatile?
Когда ответите, вопрос №2: а что будет, если в последней строке заменить uint8_t на uint16_t.
Ну и сразу приведу вопрос №3: а если не на uint16_t, а на float?
Но последний вопрос задан заранее. )
Цитата:
слава Богу, программисты писавшие компилятор оказались не настолько тупыми, как некоторые, что бревна в своем мозгу не чувствуют)))
что, andriano, есть что сказать? промежуточные, блин, результаты, ага...
это же надо, какую-то хрень придумать про какие-то промежуточные результаты (вообще ересь), какие-то стандарты языка, которые регламентируют способ и разрядность вычисления - это полнейший бред!
Ну я не большой знаток ассемблера AVR, но мне кажется, что тут стоит использовать ADC, а не ADD
блин, я думал по моим постам понятно, что я сгенерил ассемблерный код из Си-шного, как и собирался... это листинг из микрочип студии, все претензии к разработчикам компилятора))
Норд айр и Прогрик, что за тупняк вы тут устроили...
Один не может понять, как сумма кучи байт может уложиться в 8 бит, другой даже приводит правильный код 8битного сложения и при этом пишет " не аерю".
Кто рассуждал про гайку не в ту сторону крутите? Да вы ребята не то что не туда крутите - вы гайки молотком насаживаете походу
НОРДАЙР, что непонятного а 8битном сложении? Сколько байтов не складывай - сумма всегда меньше 256. Если вы этого не понимаете, то после этого асе авши рассуждения о дырявых даташитах гроша не стоят
Норд айр и Прогрик, что за тупняк вы тут устроили... Один не может понять, как сумма кучи байт может уложиться в 8 бит, другой даже приводит правильный код 8битного сложения и при этом пишет " не аерю".
только меня с "не верю" вычеркни из Тупняка этого. а то тоже резко попадешь в "Po Diagonalli")))
я не верил, что компилятор будет использовать что-то кроме 8 бит для сложения 8 бит данных. проверил - оказался прав. и _потом_ привел код. где мой тупняк? ты не только порядок перепутал, но и смысл. отделяй мух от котлет. особенный тупняк устроил мой неразумный оппонент andriano, которого ты и не упомянул почему-то... а теперь и ты туда-же...
ВНИМАТЕЛЬНО цитата:
"и что, есть какой-то шанс, что компилятор/оптимизатор видя byte = byte + byte; откомпилит кам-то иначе, чем просто сложить свои любимые 8bit регистры? не верю))"
точно я туплю?
я на 100 процентов подтвердил свои мысли эмпирическим путем. в том числе, что нехер пялиться в учебник, который был написан задолго до появления 8-битных атмег всяких... но чел доколупался до volatile и прочей чуши, не имеющей отношения к делу... double ему за воротник.
задолбали своими тупняками обвинять меня в тупняках. что за бред? сами тупите и тупите, тупите и тупите... пздц)))) я у шоке... точно надо валить с этого замечательного форума...
олько меня с "не верю" вычеркни из Тупняка этого. а то тоже резко попадешь в "Po Diagonalli")))
ну в основном мое Фе касалось в основном господина с ником "СеверныйВетер" - это ж надо, 50 с лишком сообщений с вальяжным видом рассуждать о "дырявых даташитах", чтобы в конце вдруг выяснилось, что человек не знает как устроены байты и как работает 8-битное сложение...
Ты, Прогрик, подтянулся в самом конце и возможно зря попал под раздачу. Код твой, как я сказал с самого начала - правильный, а в суть вашего спора с андриано я не полезу, чтоб не подливать масла в огонь.
обоснуй.
но тебе нечем.
тогда просто потри все мои мессаги и забань, долго-ли умеючи...
только не забудь потереть все мои мессаги со всего форума, ладно?
ВНИМАТЕЛЬНО цитата:
"и что, есть какой-то шанс, что компилятор/оптимизатор видя byte = byte + byte; откомпилит кам-то иначе, чем просто сложить свои любимые 8bit регистры? не верю))"
точно я туплю?
Точно!
Я же Вам задал конкретный вопрос (№2), который мог бы помочь Вам разобраться в вопросе. Но т.к. ответ на этот вопрос явно опровергал Ваши предыдущие утверждения, Вы предпочли его проигнорировать.
Ну, раз не хотите Вы, выложу я (результат "родного" дизассемблера Arduino IDE).
заочно!
да сколько же можно?!!
сфига там появился uint16_t, если 3 раза на этой странице написано, даже там написано, что сам цитируешь ---- Ч_И_Т_А_Й В_Н_И_М_А_Т_Е_Л_Ь_Н_О П_О Б_У_К_В_А_М::: "..видя byte = byte + byte; ..."
речь шла о контрольной сумме 4-х байт в ОДИН ДОЛБАННЫЙ БАЙТ!!!!!!!!!!! НАХРЕНА ТАМ uint16?
ты сам читаешь, что квотишь? "Po Diagonalli" однозначно, ничего не изменилось....
я даже специально пример кода переписал, чтоб именно 4-ре аргумента было. и результат байт...
я все знаю про преобразования типов, не надо меня учить, учитель нашелся. 30 лет назад эта книга у меня в туалете жила. детей своих учи или студентов. и выпей чаю.
ну бред полнейший. я не верю, что можно ТАК тупить... сам себе придумал херни, 16 бит, преобразования типов.. несет чушь полную, охренеть...
больной на голову...
я нашел того, кому пора напиться... ээээ, лечиться...
сфига там появился uint16_t, если 3 раза на этой странице написано, даже там написано, что сам цитируешь ---- Ч_И_Т_А_Й В_Н_И_М_А_Т_Е_Л_Ь_Н_О П_О Б_У_К_В_А_М::: "..видя byte = byte + byte; ..."
Вы всерьез полагаете, что результат бинарной операции где-то в глубине правой части выражения может зависеть от типа переменной в левой?
Тогда Вы вообще ничего не знаете ни о Си, ни о программировании.
Тогда Вы вообще ничего не знаете ни о Си, ни о программировании.
в твоей-же ссылке на той-же 47-й странице написано
Преобразования возникают и при присваиваниях; значение правой части преобразуется к типу левой, который и является типом результата.
ТЫ ТУПЕЙШЕЕ И УПРЯМЕЙШЕЕ СУЩЕСТВО ИЗ ВСЕХ ДЕГЕНЕРАТИВНЫХ СУЩЕСТВ НА ПЛАНЕТЕ!!!
ПРОСТО СУКА ПОСТВАЬ UINT8_T И ПРОВЕРЬ, УРОДИНА ТЫ МОРАЛЬНАЯ
снова обосрался, петушок? знаток херов. учить вздумал. соси чупа-чупс.
и еще, гавно такое, унижать меня пытается, превосходством ментальным размахивал... да и продожаешь.... тупица непроходимая...
интересно, причем тут это вообще? тупняк продолжается?
что значит при чем?
чувак пишет, что в правой части ничего не происходит и не зависит от типа даннох в левой части. это херня. о чем написано в книге, цитату из которой я привел. и мало того, если говорить о практической части, то за 5 сек я меняю инт8 на инт16 - и все меняется, как и должно. считаются уже как инт16. этот чувак не шарит в Си вообще, в неявных преобразованиях типов особенно.
и читает как придурок по диагонали. как мануалы так и посты....
цитата героя: "в Ассемблере при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты, а в Си - не менее чем двухбайтовые слова"
понимаешь? ДВА БАЙТА ИЛИ ОДИН используется в вычислениях.
я доказал, что только ОДИН. и это зависит от типа переменной в левой половине.... вот о чем речь...
пойду, посмотрю, что с луной. у всех вас какой-то запредельный тупняк...
цитата героя: "в Ассемблере при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты, а в Си - не менее чем двухбайтовые слова"
И че? Книжку-то читал. что тебе посоветовали? Там черным по белому сказано, что в любом выражении типы шорт и чар сначала преобразуются в инт, и только потом вычисляются. ДАЖЕ ЕСЛИ В ВЫРАЖЕНИИ ТОЛЬКО БАЙТЫ - они складываются как инт. Что непонятно? не тупи.
Другой вопрос, что в данном случае это НИКАК НЕ ВЛИЯЕТ НА РЕЗУЛЬТАТ, поэтому спор ни о чем.
Тогда Вы вообще ничего не знаете ни о Си, ни о программировании.
в твоей-же ссылке на той-же 47-й странице написано
Преобразования возникают и при присваиваниях; значение правой части преобразуется к типу левой, который и является типом результата.
Правильно.
Все вычисления процессор производит последовательно. Сначала вычисляет целиком (опять же, последовательными операциями, если операций больше одной) правую часть, и только потом - присваивает левой с возможным преобразованием типа. Вычисления правой части никак от типа левой части зависеть не могут.
Цитата:
ТЫ ТУПЕЙШЕЕ И УПРЯМЕЙШЕЕ СУЩЕСТВО ИЗ ВСЕХ ДЕГЕНЕРАТИВНЫХ СУЩЕСТВ НА ПЛАНЕТЕ!!!
Ну да, когда аргументов не хватает, остается только либо приводить ссылки не по теме, либо обзывать собеседника. В данном случае мы имеем и то и другое сразу.
Если, как Вы утверждаете, тип результата операции справа определяется типом переменной слева, то почему третий и четвертый байты тупо обнуляются вместо того, чтобы командой adc поместить туда нужные биты?
цитата героя: "в Ассемблере при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты, а в Си - не менее чем двухбайтовые слова"
понимаешь? ДВА БАЙТА ИЛИ ОДИН используется в вычислениях.
Ну, слава Богу, хоть меня не переврали. И на том спасибо.
Цитата:
я доказал, что только ОДИН. и это зависит от типа переменной в левой половине.... вот о чем речь...
"Нет" для обоих утверждений.
Не доказали потому, что не умеете отличать частного случая от общего правила.
пока не выложишь листинг с uint8_t в левой части - разговаривать не о чем. сам все увидишь. это не 16-битный 286-й какой нибудь, где удобнее, чем юзать весь 16-битный регистр не придумать...
последний раз: я сказал, что byte = byte + byte + byte + byte; не будет использовать 2 байта. только один. не будет приведения типов.
сказал. потом проверил. подтвердил.
а ты говоришь, у тебя компилятор родной не родной - ты крут.
и был разговор как-раз о ЧАСТНОМ СЛУЧАЕ - в один байт сумму 4-рех
_не_ _морозься_, _не_ _включай_ _дурака_, ты делаешь больно только себе.
дай листинг с уинт8 - остальное болтовня
и удивишься, тебе не поможет отключение оптимизации
выводы делай сам. я устал бадаться, баран ты крепкий....
под 33кгц, пишут только отцы... :) Это бесспорно . БЕЗ САРКАЗМА, :) серьезно
под 33кгц, пишут только отцы... :) Это бесспорно . БЕЗ САРКАЗМА, :) серьезно
Закроем эту тему. Я писал под pic16 на этой частоте потому что
- было легко посчитать на пальцах :)
- не надо кварца
- IDE под ассемблер pic16 много лучше, чем его си.
Закроем эту тему.
Закроем эту тему на доброй ноте ;)
Будет еще масса злых поводов для обсуждений ;)
Будет еще масса злых поводов для обсуждений ;)
Вот тут не сомневаюсь!
Сойдёмся еще :)
Приятно было поспорить!
Так я пока не нужен? Вот блин, а я уже дуэльный смокинг от нафталина отряхнул ))
...контрольная сумма всех предыдущих четырех байт...
Если реально посчитать то всё сойдется... в 8 случаях из 10 ;)
Но если немного поразмыслить... Как сумма четырех байт может вмещаться в один байт???? :)))
Да ни как! И ни как она не вмещается :)
На ассемблере сумма байтов надеюсь от Си сильно не отличается ;)
Вообще-то отличается. И иногда сильно - как раз в том случае, если "не вмещается": в Ассемблере при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты, а в Си - не менее чем двухбайтовые слова.
Когда речь идет о контрольной сумме, всегда подразумевается сложение по модулю. Так что, если не вместилось - значит считаем только то, что вместилось, а не вместившиеся разряды - отбрасываем.
Сложение по модулю, это сложение чисел без учета знака. Таково определение из математики или даже алгебры...
Есть код, в библиотеке, точнее функция. Которая считает сумму байт. Расчет по модулю, там сделан, в следствии кривожопого мышления, которое мы разбирали неделей ранее, а именно ошибки которая связана с неправильным отображением отрицательных температур.
Минус там приходит в 4-й или 3-й байт в виде цифры 128. Ну.. вот каг бы такая реализация.... Это факт. А не в виде первого байта.
Ну и собсно вопрос? А что ты хотел сказать и на что указать? Ну допустим реализовно сложение по модулю и чё??? Оно всё равно неправильное.... В конкретной задаче.
Я могу развернуть тему. Некий автор библиотеки, читал даташит, и на его основе писал библиотеку. Он считал, что при минусе, будут приходить отрицательные значения. Видимо, где первый бит будет зарезервирован под знак. Его чаянья ясны и понятны, но с действительностью они не имеют ничего общего.
Точно так же он считал и сумму... Но какая разница.??? С модулем или без. Как можно впихнуть в один байт сумму четырех. Нет я вижу ошибку, и понимаю как оно реализовано... И как нужно считать сумму... Но код библиотек от этого правильнее не становится ;)
при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты
Я не очень пониимаю, что такое промежуточные результаты при сложении... Оставлю это без комментариев.
Сложение по модулю, это сложение чисел без учета знака. Таково определение из математики или даже алгебры...
В данном случае результат не зависит от того, есть знак или нет.
Ну и собсно вопрос? А что ты хотел сказать и на что указать? Ну допустим реализовно сложение по модулю и чё??? Оно всё равно неправильное.... В конкретной задаче.
Почему неправильное то?
Точно так же он считал и сумму... Но какая разница.??? С модулем или без. Как можно впихнуть в один байт сумму четырех. Нет я вижу ошибку, и понимаю как оно реализовано... И как нужно считать сумму... Но код библиотек от этого правильнее не становится ;)
В библиотеку я и не заглядывал - лень. А в один байт легко впихивается сумма какого угодно количества байт, если нас не интересует перенос в старшие разряды.
при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты
Я не очень пониимаю, что такое промежуточные результаты при сложении... Оставлю это без комментариев.
чисто для контроля помех в невоенной аппаратуре вполне пригодно. я так думаю)
...пойду читану, как исходники кода на ассемблере увидеть, потом их посмотрю, и уже буду увереннее)))
CRC - не арифметическая сумма, любая википедия в одном абзаце объяснит, что это код вычисляемый по определенному алгоритму. Что за тупняк опять начался...
в далласе также
и что, есть какой-то шанс, что компилятор/оптимизатор видя byte = byte + byte; откомпилит кам-то иначе, чем просто сложить свои любимые 8bit регистры? не верю))
Читайте стандарт языка.
Впрочем, если "не верю", то даже и не знаю, чем можно Вам помочь.
помоги, не пиши херни о которой я не писал! и не вменяй мне того, о чем я не говорил. не тупи, короче. понятно?
Было бы гораздо лучше, если бы Вы не торопились немедленно отвечать на сообщение, а сначала проверили. Глядишь, и надобность в ответе бы исчезла.
Мда... Я разобрался пока 128 не записал... понятно не стало.
библиотека iarduino неправильно работала из-за неправильного приведения типов. Байт высоких разрядов температуры знаковый и в нем 128 это -1, в стальных байтах 128 это 128. А массив инициилизируется как какой-то один тип. Читать из датчика нужно как обычные байты , а уже после, правильно складывать.
Библиотека амперки рабочая, но решение там довольно топорное. Если 128, то умножаем на -1. Но когда я сам до этого дошел, я сделал точно так же :) Типа ну датчик так работает... :)
Датчик, теоретически может работать и при температуре ниже -25.5 а это уже не будет обрабатываться этой библиотекой.
На этом всё, походу мне надо немного отдохнуть от всех этих микроконтроллеров :)
progrik Изи мен ;) Здесь все в основном учатся.
проверил... сверх умным сверх разумам посвящается:
как и положено, используются только 8bit...
слава Богу, программисты писавшие компилятор оказались не настолько тупыми, как некоторые, что бревна в своем мозгу не чувствуют)))
что, andriano, есть что сказать? промежуточные, блин, результаты, ага...
это же надо, какую-то хрень придумать про какие-то промежуточные результаты (вообще ересь), какие-то стандарты языка, которые регламентируют способ и разрядность вычисления - это полнейший бред!
откуда вы такие вылазите, блин...
progrik Изи мен ;) Здесь все в основном учатся.
а я устаю не от мк, а от сопутствующего морального ущерба, наносимого всякими сверх разумами - любителями итальянского бренда "Po Diagonalli"))
проверил... сверх умным сверх разумам посвящается:
как и положено, используются только 8bit...
Мы о чем говорим? О Си или об Ассемблере?
Вопрос №1: Зачем здесь volatile?
Когда ответите, вопрос №2: а что будет, если в последней строке заменить uint8_t на uint16_t.
Ну и сразу приведу вопрос №3: а если не на uint16_t, а на float?
Но последний вопрос задан заранее. )
слава Богу, программисты писавшие компилятор оказались не настолько тупыми, как некоторые, что бревна в своем мозгу не чувствуют)))
что, andriano, есть что сказать? промежуточные, блин, результаты, ага...
это же надо, какую-то хрень придумать про какие-то промежуточные результаты (вообще ересь), какие-то стандарты языка, которые регламентируют способ и разрядность вычисления - это полнейший бред!
откуда вы такие вылазите, блин...
PS. Для тех, кто умеет читать: конец 46 - начало 47 страницы https://nsu.ru/xmlui/bitstream/handle/nsu/9058/kr.pdf
проверил... сверх умным сверх разумам посвящается:
как и положено, используются только 8bit...
Ну я не большой знаток ассемблера AVR, но мне кажется, что тут стоит использовать ADC, а не ADD
Норд айр и Прогрик, что за тупняк вы тут устроили...
Один не может понять, как сумма кучи байт может уложиться в 8 бит, другой даже приводит правильный код 8битного сложения и при этом пишет " не аерю".
Кто рассуждал про гайку не в ту сторону крутите? Да вы ребята не то что не туда крутите - вы гайки молотком насаживаете походу
НОРДАЙР, что непонятного а 8битном сложении? Сколько байтов не складывай - сумма всегда меньше 256. Если вы этого не понимаете, то после этого асе авши рассуждения о дырявых даташитах гроша не стоят
я не верил, что компилятор будет использовать что-то кроме 8 бит для сложения 8 бит данных. проверил - оказался прав. и _потом_ привел код. где мой тупняк? ты не только порядок перепутал, но и смысл. отделяй мух от котлет. особенный тупняк устроил мой неразумный оппонент andriano, которого ты и не упомянул почему-то... а теперь и ты туда-же...
ВНИМАТЕЛЬНО цитата:
"и что, есть какой-то шанс, что компилятор/оптимизатор видя byte = byte + byte; откомпилит кам-то иначе, чем просто сложить свои любимые 8bit регистры? не верю))"
точно я туплю?
я на 100 процентов подтвердил свои мысли эмпирическим путем. в том числе, что нехер пялиться в учебник, который был написан задолго до появления 8-битных атмег всяких... но чел доколупался до volatile и прочей чуши, не имеющей отношения к делу... double ему за воротник.
задолбали своими тупняками обвинять меня в тупняках. что за бред? сами тупите и тупите, тупите и тупите... пздц)))) я у шоке... точно надо валить с этого замечательного форума...
олько меня с "не верю" вычеркни из Тупняка этого. а то тоже резко попадешь в "Po Diagonalli")))
ну в основном мое Фе касалось в основном господина с ником "СеверныйВетер" - это ж надо, 50 с лишком сообщений с вальяжным видом рассуждать о "дырявых даташитах", чтобы в конце вдруг выяснилось, что человек не знает как устроены байты и как работает 8-битное сложение...
Ты, Прогрик, подтянулся в самом конце и возможно зря попал под раздачу. Код твой, как я сказал с самого начала - правильный, а в суть вашего спора с андриано я не полезу, чтоб не подливать масла в огонь.
progrik, ты дэбил, имбецил или просто алигафрэн?
но тебе нечем.
тогда просто потри все мои мессаги и забань, долго-ли умеючи...
только не забудь потереть все мои мессаги со всего форума, ладно?
тогда просто потри все мои мессаги и забань, долго-ли умеючи...
только не забудь потереть все мои мессаги со всего форума, ладно?
нет. сегодня просто напейся. Один. Надо.
Напиши потом, кактамчо. Отпустит, проверено.
еще идеи? бан решает.
ВНИМАТЕЛЬНО цитата:
"и что, есть какой-то шанс, что компилятор/оптимизатор видя byte = byte + byte; откомпилит кам-то иначе, чем просто сложить свои любимые 8bit регистры? не верю))"
точно я туплю?
Точно!
Я же Вам задал конкретный вопрос (№2), который мог бы помочь Вам разобраться в вопросе. Но т.к. ответ на этот вопрос явно опровергал Ваши предыдущие утверждения, Вы предпочли его проигнорировать.
Ну, раз не хотите Вы, выложу я (результат "родного" дизассемблера Arduino IDE).
да сколько же можно?!!
сфига там появился uint16_t, если 3 раза на этой странице написано, даже там написано, что сам цитируешь ---- Ч_И_Т_А_Й В_Н_И_М_А_Т_Е_Л_Ь_Н_О П_О Б_У_К_В_А_М::: "..видя byte = byte + byte; ..."
речь шла о контрольной сумме 4-х байт в ОДИН ДОЛБАННЫЙ БАЙТ!!!!!!!!!!! НАХРЕНА ТАМ uint16?
ты сам читаешь, что квотишь? "Po Diagonalli" однозначно, ничего не изменилось....
я даже специально пример кода переписал, чтоб именно 4-ре аргумента было. и результат байт...
я все знаю про преобразования типов, не надо меня учить, учитель нашелся. 30 лет назад эта книга у меня в туалете жила. детей своих учи или студентов. и выпей чаю.
ну бред полнейший. я не верю, что можно ТАК тупить... сам себе придумал херни, 16 бит, преобразования типов.. несет чушь полную, охренеть...
больной на голову...
я нашел того, кому пора напиться... ээээ, лечиться...
Андриано и Прогрик - если бы вы, кроме результата компиляции - асма, приводили Сишный исходник - повода спорить бы не было, как мне кажется
сфига там появился uint16_t, если 3 раза на этой странице написано, даже там написано, что сам цитируешь ---- Ч_И_Т_А_Й В_Н_И_М_А_Т_Е_Л_Ь_Н_О П_О Б_У_К_В_А_М::: "..видя byte = byte + byte; ..."
Вы всерьез полагаете, что результат бинарной операции где-то в глубине правой части выражения может зависеть от типа переменной в левой?
Тогда Вы вообще ничего не знаете ни о Си, ни о программировании.
Я бы не доверял знаниям, полученным в туалете.
Преобразования возникают и при присваиваниях; значение правой части преобразуется к типу левой, который и является типом результата.
ТЫ ТУПЕЙШЕЕ И УПРЯМЕЙШЕЕ СУЩЕСТВО ИЗ ВСЕХ ДЕГЕНЕРАТИВНЫХ СУЩЕСТВ НА ПЛАНЕТЕ!!!
ПРОСТО СУКА ПОСТВАЬ UINT8_T И ПРОВЕРЬ, УРОДИНА ТЫ МОРАЛЬНАЯ
снова обосрался, петушок? знаток херов. учить вздумал. соси чупа-чупс.
и еще, гавно такое, унижать меня пытается, превосходством ментальным размахивал... да и продожаешь.... тупица непроходимая...
...
в твоей-же ссылке на той-же 47-й странице написано
Преобразования возникают и при присваиваниях; значение правой части преобразуется к типу левой, который и является типом результата.
интересно, причем тут это вообще? тупняк продолжается?
чувак пишет, что в правой части ничего не происходит и не зависит от типа даннох в левой части. это херня. о чем написано в книге, цитату из которой я привел. и мало того, если говорить о практической части, то за 5 сек я меняю инт8 на инт16 - и все меняется, как и должно. считаются уже как инт16. этот чувак не шарит в Си вообще, в неявных преобразованиях типов особенно.
и читает как придурок по диагонали. как мануалы так и посты....
что было не понятного?........
пипец.......
а вообще, по-моему оба дебилы :)
Результат обоих выражений
и
будет одинаковым при a b c d менее 256
Из чего следует. что замечание андриано на тему "промежуточных результатов" в uint16 смысла не имеет.
Ну а прогрик вообще не въехал. о чем спич :))
мы не про результат, мы про то, как это происходит на машинном уровне. ты-то куда полез?...
мы не про результат, мы про то, как это происходит на машинном уровне. ты-то куда полез?...
вот именно. А если "не про результат" - к чему вообще ты стал говорить о преобразовании правой части к левой? Это вообще к вопросу отношения не имеет
как бы, если кто не понял..
CRC8, вычисленная по этому коду
и по этому
будет ОДИНАКОВОЙ.
И о чем вы тут сретесь.. совершенно непонятно....
не лезь в тему не разобравшись.
цитата героя: "в Ассемблере при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты, а в Си - не менее чем двухбайтовые слова"
понимаешь? ДВА БАЙТА ИЛИ ОДИН используется в вычислениях.
я доказал, что только ОДИН. и это зависит от типа переменной в левой половине.... вот о чем речь...
пойду, посмотрю, что с луной. у всех вас какой-то запредельный тупняк...
цитата героя: "в Ассемблере при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты, а в Си - не менее чем двухбайтовые слова"
И че? Книжку-то читал. что тебе посоветовали? Там черным по белому сказано, что в любом выражении типы шорт и чар сначала преобразуются в инт, и только потом вычисляются. ДАЖЕ ЕСЛИ В ВЫРАЖЕНИИ ТОЛЬКО БАЙТЫ - они складываются как инт. Что непонятно? не тупи.
Другой вопрос, что в данном случае это НИКАК НЕ ВЛИЯЕТ НА РЕЗУЛЬТАТ, поэтому спор ни о чем.
Преобразования возникают и при присваиваниях; значение правой части преобразуется к типу левой, который и является типом результата.
Правильно.
Все вычисления процессор производит последовательно. Сначала вычисляет целиком (опять же, последовательными операциями, если операций больше одной) правую часть, и только потом - присваивает левой с возможным преобразованием типа. Вычисления правой части никак от типа левой части зависеть не могут.
ТЫ ТУПЕЙШЕЕ И УПРЯМЕЙШЕЕ СУЩЕСТВО ИЗ ВСЕХ ДЕГЕНЕРАТИВНЫХ СУЩЕСТВ НА ПЛАНЕТЕ!!!
Ну да, когда аргументов не хватает, остается только либо приводить ссылки не по теме, либо обзывать собеседника. В данном случае мы имеем и то и другое сразу.
Этот прожирик не первый раз кидается на всех, как тузик из будки. Гипертрофированное ЧСВ, похоже.
И уходит не впервой, по-моему.
чувак пишет, что в правой части ничего не происходит и не зависит от типа даннох в левой части. это херня.
Продолжаете упорствовать.
Ну ладно, если не умеете читать и логически мыслить, могу привести и конкретный код:
Если, как Вы утверждаете, тип результата операции справа определяется типом переменной слева, то почему третий и четвертый байты тупо обнуляются вместо того, чтобы командой adc поместить туда нужные биты?
не лезь в тему не разобравшись.
цитата героя: "в Ассемблере при байтовом сложении все промежуточные (и окончательный) результаты - всегда байты, а в Си - не менее чем двухбайтовые слова"
понимаешь? ДВА БАЙТА ИЛИ ОДИН используется в вычислениях.
Ну, слава Богу, хоть меня не переврали. И на том спасибо.
я доказал, что только ОДИН. и это зависит от типа переменной в левой половине.... вот о чем речь...
"Нет" для обоих утверждений.
Не доказали потому, что не умеете отличать частного случая от общего правила.
А "не зависит" - ну об этом уже было постом выше.
последний раз: я сказал, что byte = byte + byte + byte + byte; не будет использовать 2 байта. только один. не будет приведения типов.
сказал. потом проверил. подтвердил.
а ты говоришь, у тебя компилятор родной не родной - ты крут.
и был разговор как-раз о ЧАСТНОМ СЛУЧАЕ - в один байт сумму 4-рех
_не_ _морозься_, _не_ _включай_ _дурака_, ты делаешь больно только себе.
дай листинг с уинт8 - остальное болтовня
и удивишься, тебе не поможет отключение оптимизации
выводы делай сам. я устал бадаться, баран ты крепкий....
...