Обсуждаем контроллеры компании Atmel.
Ответить

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 09:57:14

Без меня. Просто оставлю тут страничку из документации IAR C/C++ Compiler User Guide for AVR.
СпойлерИзображение
изображение_2022-11-03_095353149.png
(229.17 KiB) Скачиваний: 48

И никаких фантазий. Cтандарт и документация всегда дадут чёткий ответ.

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 10:53:31

До каких высот поднялась (или опустилась?) дискуссия на радиолюбительском форуме по стандартам языков С и С++ ! Но мой замшелый консерватизм продолжает жить в уверенности, что все эти void* - это где-то там, за хребтом Терскей-Алатау по отношению к малюпасеньким микроконтроллерам, и обычного Си без навороченных заморочек - с лихвой. И разговор уже представляет интерес скорее для психологов ( я не сказал - психиатров ! )
СпойлерОпишем классы: кнопка и лампочка. Методы классов: нажать-отпустить кнопку, зажечь-погасить лампочку :))

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 11:20:30

На AVR делают очень даже сложные проекты, которые требуют профессионального подхода. Ту же мегу 2560 язык не поворачивается "малюпасенькой" назвать.

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 12:24:10

Зачастую, даже мелкие МК, требуют весьма серьёзного подхода. И просто так, с наскоку, результата не получить. Сплошь и рядом бывают ситуации, когда проще решить задачу на более "продвинутом" МК. Но в том то и фишка, что хочется напрячь мозги и решить головоломку с простыми/доступными средствами. Ну чем плохо то!

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 14:23:08

Иллюстрация к IAR-овской реализации обобщённых указателей.
Код:
__flash char x = 10; // Во FLASH
char y = 20;         // В SRAM

char foo(void __generic *s)
{
  return *(char *)s;
}

char main( void )
{   
  return foo(&x) + foo(&y);
}
Через R16,R17,R18 передаётся (1+23)-битный указатель.
Код:
//char main( void )
main:
//{   
//  return foo(&x) + foo(&y);
        LDI     R16, LOW(`x`)
        LDI     R17, (`x`) >> 8
        LDI     R18, 128
        RCALL   foo
        MOV     R19, R16
        LDI     R16, LOW(`y`)
        LDI     R17, (`y`) >> 8
        LDI     R18, 0
        RCALL   foo
        ADD     R19, R16
        MOV     R16, R19
        RET
//}

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 15:32:23

Я имел ввиду, что указывает void* на первый байт любого массива, структуры или типа, и минимальный размер шага (инкремента) указателя void* - 1 байт. В отличие от этого, инкремент указателя не-void* равен размеру типа, на который он указывает.


Я поражаюсь сам себе! Когда я прочитал предыдущую болтовню про "1 байт" - у меня сразу возникла догадка, что переда нами жертва "дворового программирования" на GCC. Вы все это поняли по тексту моего сообщения. Но сомнения были, признаюсь честно: может быть все не так запущено? Может быть я просто пошел на поводу своего опыта общения с подобными "айтишиками от сохи" и выдаю желаемое за действительное? Может я его просто неправильно понял?

Но тут снова возник он и, как говорится в пословице, "открыл рот и устранил все сомнения".

Котик мой, в языках С и С++ тип `void` не является объектным типом. Он не поддерживает никакой адресной арифметики. У указателя `void *` нет никакого "шага инкремента", потому что к такому указателю невозможно применить инкремент. В языках С и С++ нет и никогда не было никакого "инкремента" для указателей `void *`.


А он, как видите, даже пример кода нам привел, в котором он тупо лупасит инкрементом по `void *` указателю, но при этом в его бошке (даже после моего предыдущего сообщения с толстым намеком!) не возникает и тени сомнения. Он не понимает, что его потуги не имеют никакого, даже отдаленного отношения к С или С++.

Меня поражает мое стопроцентное попадание с первого раза. Это именно пример того "дерьмеца из GCC", о котором я говорил в своем предыдущем сообщении. Это именно пример того самого "дворового самоучки", о которых я говорил там же. Он думает, что что-то смыслит в этих языках, хотя в реальности никогда даже близко к ним не подходил. Прямо как тот корейский официант из русского ресторана на Брайтон Бич, который говорит на чистом русском, потому что думает, что это английский. А если копнуть глубже, то там столько еще трэшака всплывет, что вышеприведенный "инкремент указателя void*" по сравнению с этим покажется мелочью.

И это все - даже несмотря на то, что в моем предыдущем сообщении я фактически предупредил данного деятеля о ловушке, в которую он сам себя ведет. Но это не помогло ему не облажаться :facepalm:

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


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

Одного я не угадал в своем предыдущем сообщении: я думал, что в этой бошке зародится искра сомнения и данный котан вернется к нам поумневшим. Вернулся. Но не поумневшим.

Более того, когда подобная публика понимает, что дело запахло жареным, они обычно начинают тупую нудню в стиле "да ты теоретик тупой у меня в GCC все всегда работало это практика а практика главное". Мы это еще увидим, я думаю. Но данные персонаж, несмотря на совершенно четкое предупреждение о "GCC дерьмеце" в моем предыдущем сообщении, ничего не заподозрил, а честно вывалил сюда свои удивительные верования об "инкременте типа void*".

Добавлено after 23 minutes 8 seconds:
До каких высот поднялась (или опустилась?) дискуссия на радиолюбительском форуме по стандартам языков С и С++ !


Ветка о программировании? Не?

И дискуссия на самом деле никуда не поднималась и не опускалась. Она всегда была такой. Просто не было точки отсчета, не с чем было сравнивать. А если какая точка отсчета и появлялась, то личности... эээ... определенного пошиба (скажем так), истерично боясь того, что понимание их "высот" сейчас станет видно невооруженным глазом, бросались в отчаянную атаку. Что мы все наблюдаем и сейчас. Как правило, такие атаки рано или поздно приводят к результату - вменяемые люди просто машут на все рукой и уходят. То есть просветления наступают периодами. Сейчас как раз такой.

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 15:45:14

тип `void` ... указателя `void *`
А Вы тут не смешиваете два разных предмета в один?

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 15:49:01

тип `void` ... указателя `void *`
А Вы тут не смешиваете два разных предмета в один?


Нет. Где именно вы увидели смешивание?

Ага, возможно вы имеете в виду "Он не поддерживает никакой адресной арифметики". Я думаю, все поняли, что имеется в виду, но давайте перефразируем:

Котик мой, в языках С и С++ тип `void` не является объектным типом. Он не поддерживает Указатели на него не поддерживают никакой адресной арифметики. У указателя `void *` нет никакого "шага инкремента", потому что к такому указателю невозможно применить инкремент. В языках С и С++ нет и никогда не было никакого "инкремента" для указателей `void *`.

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 16:00:33

однако, отец-то многословен... краткость, основная отличительная черта Си, явно не его сестра...

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 16:09:35

Да, и слащаво-приторный какой-то. Уж не представитель ЛГБТ-сообщества ли, с этими тошнотворными сюсюканиями. Тьфу млин, надо протереть монитор от этой ссаной слащавости.
Поцык недавно поначитался инфы про языки на ночь глядя, вот ему и приснилось вдруг, что он-то и является автором языка (даже двух языков сразу). Бред какой-то. Тьфу, пакость слащавая.

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 16:23:54

однако, отец-то многословен... краткость, основная отличительная черта Си, явно не его сестра...


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

Добавлено after 6 minutes 26 seconds:
Да, и слащаво-приторный какой-то. Уж не представитель ЛГБТ-сообщества ли, с этими тошнотворными сюсюканиями. Тьфу млин, надо протереть монитор от этой ссаной слащавости.
Поцык недавно поначитался инфы про языки на ночь глядя, вот ему и приснилось вдруг, что он-то и является автором языка (даже двух языков сразу). Бред какой-то. Тьфу, пакость слащавая.


О! Кстати о "краткости", котаны!

Обычно, как я уже писал выше, публика подобного пошиба в таких дискуссиях проходит через три стадии: 1. Стадия, когда они порют чушь, 2. Стадия "тытеоретикяпрактик", 3. Стадия оскорблений и нечленораздельного быдловизга.

Я выше предсказывал, что грядет вторая стадия, но, как видите, он сразу с первой препрыгнул на третью :) "Краткость" в действии! Можно лишь поприветствовать такую экономию времени! :beer:

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 16:29:45

отец-то, не смотря на нелюбовь к краткости, успешно совмещает в своих постах все стадии от "я весь в белом" до "вы все в говне".

а вот на мой простой вопрос так и не ответил... ни кратко, ни пространно...

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 16:51:28

стадии от "я весь в белом" до "вы все в говне"..

Ну так именно в этом то и лежит смысл его слащаво-приторного поствования тут! :))) Какой там "изык сей", какой там void, главное - что он весь противно-белый и с ЧСВ "создателя языка Си и С++ внатуре" :)))
Кстати, он сейчас сам проходит 3-ю стадию по его же классификации - "оскорбление и быдловизг". Вон сколько букв то навизжал уже, на три страницы/

PS.
Инкремент указателя void* я показал только для иллюстрации факта, что void* указывает на "нечто" минимального размера 1 байт. "Отэц изыка" конечно же не понял этого.
Далее. Объектов в языке Си нет. И понятия "объект" и "указатель" - не синонимы! "Автор изыка" уж должен был это знать, когда "придумывал изык".
Последний раз редактировалось MLX90640 Чт ноя 03, 2022 18:11:31, всего редактировалось 1 раз.

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 16:58:30

Ну вот, отпугнёте своим неприятием Брюса Виллиса, и некому будет обучать С++шкам из первоисточника. :)

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 17:00:50

отец-то, не смотря на нелюбовь к краткости, успешно совмещает в своих постах все стадии от "я весь в белом" до "вы все в говне".


О! Еще одна, кстати, типовая деталь, котаны: подобная публика обычно проецирует свои самые эпические фиаско на "всех". Наша сладкая парочка пытается панически взывать ко "всем", не принимая во внимание тот простой факт, что от "всех" они получат лишь дополнительных пендюлей :) Существенно более "кратких", чем мои пространные изложения, но от того не менее чувствительных :)

Кто-то из более серьезных исследователей подобных феноменов говорил мне как-то, что якобы в 99 случаях из 100 такие проекции свидетельствуют о патологической манере регистрировать множественные аккаунты в интернет сообществах. Создав самому себе внушительную "группу поддержки" и истерично лупя по клавишам, переключая нарегистрированные аккаунты, подобный деятель в какой-то момент действительно убеждает себя в том, что он - "все".

Но мне кажется, что тут все проще: от соседства с подобной публикой обычный человек действительно может чувствовать себя как "в говне". До меня они не добросят, а вот рядовым участникам действительно может быть... неуютно (выразимся мягко) рядом с этими.

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 18:02:01

народ, как бы тема про простые вопросы по Си для АВРок...
А вы уж накатали несколько страниц воды и попыток взаимных оскорблений....
Вроде тут для холиваров есть отдельный загон МЯУ, не... ?

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 18:15:49

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

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт ноя 03, 2022 20:07:11

отец-молодец, так что там с стандартными костылями в Си? как ты допустил это безобразие?!

например, почему, если for(;;) это бесконечный цикл, while() это ошибка?

Re: Нескольно простых вопросов о программировании AVR на Си.

Пт ноя 04, 2022 04:03:19

Инкремент указателя void* я показал только для иллюстрации факта, что void* указывает на "нечто" минимального размера 1 байт. "Отэц изыка" конечно же не понял этого.


О! Видно, что хоть и с запозданием, но какие-то искорки чего-то там начинают вспыхивать между еще сохранившимися клетками серого вещества, раз он взялся оправдываться путем редактирования сообщений задним числом. Это прогресс. "Слепые начинают говорить, а немые ходить, когда я делаю пассы"

Возможность самостоятельно прочувствовать полный вкус содержащейся в вышепроцитированном пассаже циркулярной логики я оставлю остальным участникам форума. Зацените, народ, не проходите мимо: он пытается рассказать нам, что бредни про "void* указывает на "нечто" минимального размера 1 байт" он подцепил через бредни про возможность инкремента `void *` указателя. Оказывается, я просто "не понял", что он использует вторые бредни для иллюстрации/оправдания первых бредней. :)

Других "иллюстраций" у него сегодня для вас нет ¯\_(ツ)_/¯

Далее. Объектов в языке Си нет.


Ого! Остапа понесло!

Стандарт языка С. Раздел основных определений 3.15
1 object
region of data storage in the execution environment, the contents of which can represent values

Ну и случайно выбранный раздел "6.2.4 Storage durations of objects"

1 An object has a storage duration that determines its lifetime. There are four storage durations: static, thread, automatic, and allocated. Allocated storage is described in 7.22.3.

2 The lifetime of an object is the portion of program execution during which storage is guaranteed to be reserved for it. An object exists, has a constant address, and retains its last-stored value throughout its lifetime. If an object is referred to outside of its lifetime, the behavior is undefined. The value of a pointer becomes indeterminate when the object it points to (or just past) reaches the end of its lifetime.


Ну и так далее... "Объектов в языке Си нет." :facepalm:

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


Признаюсь честно: к чему здесь эта чушь про какие-то "не синонимы" и зачем он нам тут бросился про это рассказывать - я не понял.

Скорее всего мы наблюдаем суперсекретный стратегическо-тактический трюк от настоящих интернетных стелс-пихотов. Например, в разгар математической дискуссии громогласно заявите в направлении своего оппонента "И запомни: дважды два не равно пяти!!!". Это обеспечит вам победу и навсегда запятнает репутацию оппонента в глазах коллег. (На самом деле нет.) :)

Добавлено after 4 hours 5 minutes 59 seconds:

... Чуть позже, после второго самовара чая, меня вдруг внезапно прошило молнией подозрения, аж шерсть дыбом встала: а вдруг это мои предшественники - неТРУшные ANSIшные X3J11овцы - придумали богомерзкий термин "объект" и привнесли его в спецификацию языка, тем самым поправ великое наследие самого Кернигана?

(Кстати, в очередной раз отметим этот загадочный культ Кернигана, характерный исключительно для дворовых котеек на просторах бывшего СССР. Вроде бы мало-мальски образованному энтузиасту С должно быть известно, что отцом языка является Денис Ритчи, а Керниган не имеет к нему прямого отношения вообще. Брайан Керниган лишь помогал писать книгу. Вот Страуструп молодец - не взял никого в соавторы TC++PL, а то бы и тут был... Керниган. Но не будем отвлекаться.)

Итак: к стеллажам с книгами!!! Не будем доверять ветреным фотошопам электронных копий, а дрожащею лапою со скрипом перевернем пожелтевшую обложку фолианта первого издания K&R. Тээээкс... Угу... Мяу... Хм... Ба, да тут сплошняком "object, objects, object, objects...". Более того, в приложении A стоит ссылка на "C Reference Manual" с использованием термина "object", а CRFы - это документы за авторством Дениса Ритчи, которые появились на свет заметно раньше первого издания K&R.

Открываем "C Reference Manual" (к сожалению, у меня лишь электронная копия):

C supports four fundamental types of objects: characters, integers, single, and double-precision floating-point numbers.


Нет, похоже комитетчики не виноваты... Объекты в С существовали уже во времена динозавров.

А может дело в переводе, снова прошило меня молнией очередного подозрения? Может быть наше юное дарование пытается вот таким окружным путем донести до нас глубокую мысль о том, что неправильно переводить термин "object" на русский язык как "объект"? Возможно, правильным переводом является "пепяка"? В С есть пепяки, а объектов нет! Звучит гордо, но что-то мне вы этом не нравится. Как, народ, думаете? Или подождем очередной порции объяснений от нашего оратора? :)

Re: Нескольно простых вопросов о программировании AVR на Си.

Пт ноя 04, 2022 06:50:02

Дааа, самовозвеличивание за счет оскоробления других... Столько букв написячено, хотя в конце вы начали догадываться, что "объект" и ООП - это вроде как не одно и то же. Изучите, что такое ООП, потом будете изливать потоки оскорблений и бредятины. "Третья стадия" у вас, совместно с "первой", по вашей же классификации.
Кстати, я даже не читаю этого потока бредогенерации, так, некоторые буквы. Ибо суть его постов - самовозвеличивание за счет оскорблений. В остальном же - полный ноль этот... как ево... игрок какой-то там сетевой игрухи.

---- PS ----
Те объекты в языке Си, про которые "замозванный атец" говорит, они вовсе НЕ то же самое, что и объекты в понятии ООП. Видимо, каждое слово нужно приводить четко как по толковому словарю, чтобы избежать двоякого понимания и переворачивания смысла. Конечно, поток какашек на вентилятор от этого бредогенератора фееричный, он просто мастер демагогии и слащавых сюсюканий, это у него не отнять. Но такая болтология в оскорбительной интонации никогда не была в почете.
Последний раз редактировалось MLX90640 Пт ноя 04, 2022 15:32:50, всего редактировалось 1 раз.
Ответить