Вт апр 02, 2019 09:06:03
Вт апр 02, 2019 09:28:45
нет!СКАЗОЧНИК писал(а):Последние три байта он выкинет (освободит) под другие задачи. Т.е. после этой конструкции у нас останется Х с одинм байтом. ?
Вт апр 02, 2019 09:37:59
Вт апр 02, 2019 09:41:25
совершенно верно!СКАЗОЧНИК писал(а):переменная Х так и осталась 4 байтная, просто мы вытаскиваем из нее один байт?
Вт апр 02, 2019 09:44:04
Вт апр 02, 2019 09:45:46
Вт апр 02, 2019 09:46:38
Вт апр 02, 2019 09:50:53
long x = 0x12345678;
int y = x;
int y = (int*)&x;
Вт апр 02, 2019 09:57:13
Вт апр 02, 2019 10:11:27
да, если абстрактно, то скопирует неоднозначно. но в рамках одной конкретно выбранной вами платформы однозначность гарантируетсяСКАЗОЧНИК писал(а):И как я теперь понимаю
int y = (long*)&x;
Тоже неоднозначно скопирует.
конкуренция производителей... исторически так сложилось.СКАЗОЧНИК писал(а):И чего это напридумывали разную последовательность адресов?
СКАЗОЧНИК писал(а):Почему в указателях звездочку ставят то там, то там?
компилятор "помечает" идентификатором Х адрес ПЕРВОГО байта участка памяти под данные заданного типа. а то, в каком порядке байты этих данных будут там размещаться, зависит от конкретной платформы, и может быть разным.СКАЗОЧНИК писал(а):А разве компилятор не присваивает Х адрес младшего байта переменной?
Вт апр 02, 2019 10:18:51
Вт апр 02, 2019 10:27:34
хотите совет любителю от любителя? никогда не пользуйтесь такими конструкциями! пишите так, как вам понятно. современный компилятор все равно оптимизирует 99% вашей писанины в наиболее подходящий код. вы же не на конкурсе виртуозов Си пишите?СКАЗОЧНИК писал(а):Вот этой конструкцией:
z = *(((uint8_t *)(&x)) + 1);
если вместо
компилятор никогда не отслеживает и не блокирует доступ по указателю - не его это дело. в лучшем случае вы получите варнинг при компиляции.СКАЗОЧНИК писал(а):если вместо +1 поставить +6 вылетит за приделы переменной Х и запишет в Z то, что находится дальше по памяти? Или компилятор это отследит и ограничит (выдаст ошибку)?
Вт апр 02, 2019 10:35:44
Вт апр 02, 2019 10:42:00
по-моему, вы сильно преувеличиваете. либо, не совсем разобравшись, вообще все путаете.СКАЗОЧНИК писал(а):Ну и тому подобное...
Вт апр 02, 2019 10:49:04
Вт апр 02, 2019 10:51:32
да и на здоровье! для игр всегда важна синхронизация, поэтому у вас автоматически будет разделены процессы обновления данных в массиве и вывод данных из него. более того, основное время ваш код вообще будет простаивать в ожидании момента синхронизации. ну или МК спать будет...СКАЗОЧНИК писал(а):Менять массив все же буду. Ну, типа тетрис...
Вт апр 02, 2019 10:59:56
Вт апр 02, 2019 11:08:49
это уже из разряда философии выбора МК: можно взять МК, коорый в поту будет молотить, едва успевая сделать вши задумки, а можно взять МК, который все ваши задумки сделает быстро и потом ему просто нечего будет делать. а нечего делать - это либо пустой цикл, либо сходить в интернет... сон. сон имеет преимущество в том, что снижает энергопотребление. зачем снижать? не ко мне вопросСКАЗОЧНИК писал(а):Про МК и спать тоже у меня не укладывается...
Вт апр 02, 2019 11:24:42
Вт апр 02, 2019 11:52:03
YS, хочу еще ваших статей по Си в том же ключе разжевывания по железу, а не абстрактно для любого компа! С уклоном для STM32. Где-то читал ваш блог, там тоже много интересного.
Вот здесь тоже интересно почему?
y = *((uint8_t *)(&x));
И как я теперь понимаю
long y = (long*)&x;
Тоже неоднозначно скопирует. Может перевернуть все как попало.
если вместо +1 поставить +6 вылетит за приделы переменной Х и запишет в Z то, что находится дальше по памяти? Или компилятор это отследит и ограничит (выдаст ошибку)?
что будет в STM32, увы, не знаю...
а то, что в это самое время в массив можно "без DMA" писать - совсем не страшно!
Если механизм завел двигатель и стоит на светофоре, то двигатель же не глушат... А в МК мне не понятно становится, зачем его усыплять на миллисекунды, если опять будить потом для выполнения задачи, которая продлится пару миллисекунд, а потом опять усыплять.