А то, что лежит по этому адресу определяется типом данных. И тогда линковщик просто проверят, чтобы по этому адресу был именно тот тип данных? А если , условно говоря, все данные представляются нулями и единицами, то как потом программа понимает, что у нее именно действительные числа записаны, а не строка? Как он потом отличает эти нули и единицы?
Особенно, если программист приложил усилия, чтобы компилятор видел больше.
так да, в конечном итоге от программиста все и зависит.
в общем, если LTO не использовать, ничего компилятор не видит, если ничегонеделающая функция находится в другом модуле. а с LTO не обманешь - проверил, правда, на avr-gcc.
что ж, дискуссия для меня оказалась полезной, очередной вклад в копилочку знаний, спасибо всем, кто разъяснял.
Добавлено after 1 minute 52 seconds:
СКАЗОЧНИК писал(а):
И тогда линковщик просто проверят, чтобы по этому адресу был именно тот тип данных?
проверка типов это задача компилятора, линковщик тупо адреса подставляет
СКАЗОЧНИК писал(а):
как потом программа понимает, что у нее именно действительные числа записаны, а не строка?
как в программе вы написали, так эти нули и единицы и трактуются, это не компилятора вопрос, а программиста
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
в общем, если LTO не использовать, ничего компилятор не видит, если ничегонеделающая функция находится в другом модуле. а с LTO не обманешь - проверил, правда, на avr-gcc.
Помимо LTO есть еще Whole Program Optimization(-fwhole-program) которая делает примерно то же самое.
в общем, если LTO не использовать, ничего компилятор не видит
А если для Вашей целевой архитектуры будет кодогенератор из LLVM, то там возникнет еще один этап оптимизации - уже на уровне IR кода после линковки. И без volatile он там такого накое может наоптимизячить, что действительно буфера в памяти не найдете )
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Помимо LTO есть еще Whole Program Optimization(-fwhole-program) которая делает примерно то же самое
когда-то я пытался сравнить эти варианты... в применении avr-gcc разных версий всегда получал один и тот же результат: не работала либо одна, либо другая оптимизация. не работала - в смысле компиляция выдавала какие-то ошибки.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Я просто подумал, что проблема моя (может и многих) в понимании указателей (или тех же структур), в том, что нет понимания, как это происходит в железе... Т.е. что мы видим в программном коде - это одно. Это для удобства понимания сделано. А комп это как-то по своему обрабатывает.
Всегда раньше почему-то думал, что имя переменной тоже где-то хранится. Позже через некоторые ассемблерные (дизассемблерные) листинги стало понятно, что нет имен в программе. Если четко понимать связь того, что написано пером и преобразовано в компьютерный язык, то придет и понимание размещения в памяти всего.
Т.е. если я вместо имени буду в теории писать просто адрес в памяти, то это будет тоже самое?
Адрес в памяти - это числовая константа. Просто так вместо имени ее писать нельзя. Ее сначала нужно определить как указатель на необходимый тип и присвоить значение по этому указателю:
А то, что лежит по этому адресу определяется типом данных. И тогда линковщик просто проверят, чтобы по этому адресу был именно тот тип данных? А если , условно говоря, все данные представляются нулями и единицами, то как потом программа понимает, что у нее именно действительные числа записаны, а не строка? Как он потом отличает эти нули и единицы?
ИМХО, программа в двоичных кодах в процессоре вообще ничего не различает, а тупо выполняется по командам из памяти программ. Пойти по такому то адресу в память данных - взять то и то - отправить в АЛУ - сложить - результат сохранить в ОЗУ по определенному адресу. После работы препроцессора, линковщика и компилятора нету там ни типов, ни структур, ни переменных, и нет вообще ничего привычного из того, что мы видим в редакторе IDE.
_________________ Астролябия-сама меряет, было бы что мерять!!!
А почитать? Указатели на volatile Также распространенной ошибкой является использование обычного (не volatile) указателя на volatile-переменную. Чем это может нам навредить? Рассмотрим пример (из реальной программы), в котором был использован указатель на регистр порта ввода/вывода. Программа по SPI управляла двумя одинаковыми микросхемами, подключенными на разные выводы микроконтроллера, порт, к которому подключена активная микросхема, выбирался через указатель: .......
Читайте по буквам: "ошибкой является использование обычного (не volatile) указателя на volatile-переменную". Ваш автор имеет ввиду просто указатель, ни на какой ни волатайл, но называет его точно, как вы -- "указатель на volatile", при этом он и вы одинаковым образом называете разное, а раз так, то это зашквар-зашквар. Говорю ж, приплыли.
а как происходит подстановка параметров "pData" на "volatile uint8_t good_buffer" т.е. с подстановкой читает: "uint8_t * volatile uint8_t good_buffer" так ?
После работы препроцессора, линковщика и компилятора нету там ни типов, ни структур, ни переменных, и нет вообще ничего привычного из того, что мы видим в редакторе IDE.
Вообще говоря, это не так. В С++, например, есть технология Run Time Type Information. Она позволяет получать имя типа переменных и объектов во время выполнения.
Foo и bar произошли от армейского акронима времён Второй мировой, FUBAR — «Fucked Up Beyond All Recognition» (англ. «Разбито в хлам»). Во время кампаний в Северной Африке и Сицилии (1942–1943) возникло целое семейство таких сокращений, которые можно найти в книге Рика Эткинсона Day of Battle: The War in Sicily and Italy, 1943-1944. Например, сокращение JANFU означает «Joint Army Navy Fucked Up» (англ. «Союз армии и флота облажался»), и применялось, в частности, для описания инцидента 11 июля 1943 года, когда британский флот сбил 23 транспортных самолёта США с десантом.
Чукча - писатель... Может стоит прочесть первоисточник ПОСЛЕ многоточия в цитате? Несете какую то рандомную хрень... Тимофеев совершенно определенно объясняет необходимость использования указателей на volatile в случае возможности присвоения им адресов volatile-переменных. И приводит ДВА примера - ошибочный и правильный. То есть квалификатор volatile должен быть и у переменной и у указателя на нее. Что не так? ЗЫ. Вам стоит познакомиться с автором текста по ссылке, кстати. Заочно, конечно. Прежде чем быковать. А то ведь стыдно будет, любезный...
Чукча - писатель... Может стоит прочесть первоисточник ПОСЛЕ многоточия в цитате? Несете какую то рандомную хрень...
И понеслось дерьмо по трубам. Вы одним термином назвали разное. Я точно показал, что именно. Обтекайте теперь оба. Голосите про "рандомную херь". Фигли вам остается.
Цитата:
Тимофеев совершенно определенно объясняет необходимость использования указателей на volatile в случае возможности присвоения им адресов volatile-переменных.
Вот в этой фразе? "Также распространенной ошибкой является использование обычного (не volatile) указателя на volatile-переменную." Так я вам открою глаза, что использование обычного указателя на volatile является правильной практикой, а не "распространенной ошибкой".
volatile unsigned int *Port -- это тот самый обычный (не volatile) указатель на volatile переменую. Вы так сами сказали. Вот и разберитесь со своим Тимофеевым, у кого из вас двоих "распространненая ошибка" случилась.
Цитата:
И приводит ДВА примера - ошибочный и правильный. То есть квалификатор volatile должен быть и у переменной и у указателя на нее. Что не так?
Вы в курсе, что вязните все глубже? Ваше "volatile должен быть и у переменной и у указателя на нее" тогда будет выглядеть так:
Код:
volatile unsigned int * volatile Port
А теперь идите и посмотрите на "правильный пример" вашего Тихонова. Так кто из вас двоих лажает?
Цитата:
Вам стоит познакомиться с автором текста по ссылке, кстати. Заочно, конечно. Прежде чем быковать. А то ведь стыдно будет, любезный...
Я без вас разберусь, с кем мне знакомиться. И понты свои приберите дешевые. Быдлецой какой-то повеяло.
Чудовищный демагог и шулер. Сам выдумывает, сам и отрицает. Почему из моих слов вы опустили слово квалификатор, начав цитату с volatile? Что я имел ввиду вы отлично поняли, как и то, что имел ввиду Тимофеев. Но продолжаете кривляться.
Если честно, то Тимофеев допустил ляп в процитированном абзаце. Но дальше по тексту все подробно разжёвывает с правильными примерами где volatile буфер, а где volatile указатель.
При всём при этом, это никак не влияет на ненужность volatile в параметрах HAL-овской функции, с которой начиналась дискуссия. С обсуждения которой так упорно соскальзывает на личности аппонент.
Чудовищный демагог и шулер. Сам выдумывает, сам и отрицает.
Да ладно вам плакать. Я цитировал вас обоих и теперь уже дважды повторил, где и кто слажал. Что вы возразили по существу? Ничего! Только персональные наезды. Оно и понятно.
Цитата:
Почему из моих слов вы опустили слово квалификатор, начав цитату с volatile?
У вас галлюцинации? Разуйте глаза: я цитировал вас и вашего визави целиком. Причем, уже не один раз.
Цитата:
Что я имел ввиду вы отлично поняли, как и то, что имел ввиду Тимофеев. Но продолжаете кривляться.
Ваш Тимофеев сказал одно, в то время, как хотел сказать совсем другое. Такое бывает, когда недостает квалификации. Ваши отчаянные вопли ни ему, ни вам никак не помогут -- из песни слов не выкинешь.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения