Страница 380 из 386
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт апр 16, 2024 09:11:21
jcxz
[uquote="iD-audio",url="/forum/viewtopic.php?p=4568559#p4568559"]У меня немного другой сейчас интерес. Например, тот же самый светодиод - как лучше и эффективнее работать с периферией, какими способами?[/uquote]Самый лучший способ: Всё время смотреть в листинг! Написали строчку кода, скомпилили (с макс.оптимизацией), посмотрели в листинг - что получилось? И следующая итерация. И т.д.
[uquote="iD-audio",url="/forum/viewtopic.php?p=4568559#p4568559"]Можно, конечно, пробовать разные варианты и смотреть, во что это разворачивается в ассемблере.[/uquote]Так и следует делать.
[uquote="iD-audio",url="/forum/viewtopic.php?p=4568559#p4568559"]Но самостоятельно это довольно долгий путь.[/uquote]Быстро только кошки плодятся.
Если будете делать это несамостоятельно, то в голове ничего не останется.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс апр 21, 2024 16:13:19
OKF
[uquote="jcxz",url="/forum/viewtopic.php?p=4569039#p4569039"]Самый лучший способ: Всё время смотреть в листинг! Написали строчку кода, скомпилили (с макс.оптимизацией), посмотрели в листинг - что получилось? И следующая итерация. И т.д.[/uquote]
Нафига? Это смотря какие цели.) К примеру, я хочу писать красиво и лаконично. На кой мне листинг?)
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс апр 21, 2024 21:41:46
Jack_A
[uquote="OKF",url="/forum/viewtopic.php?p=4571314#p4571314"]К примеру, я хочу писать красиво и лаконично. На кой мне листинг?)[/uquote]
Между "я хочу" и "я умею" есть некоторая разница.

Когда это десятки раз писалось в разных вариантах и успешно работало - можно и без листинга. Да и то: в сложных случаях непонятно - то ли компилятор дурит, то ли сам накосячил. А вид сгенерированного кода всё расставит по местам.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс апр 21, 2024 21:46:02
OKF
Ой. "Компилятор дурит" - это уже говорит о многом. Не обижайтесь.)
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс апр 21, 2024 21:52:47
Martian
Вера в безгрешность компилятора тоже о многом может сказать. Например, что верующий не использовал XC8/16/32, список ошибок которых достаточно большой. Не знаю, как сейчас, а раньше в фреймворке Микрочипа было явно указано не включать оптимизацию XC8.
Компилятор - это как бэ всё-таки тоже программа. Со всеми её свойствами.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс апр 21, 2024 21:56:24
OKF
Обычно, начинающие все свои ошибки списывали на компилятор.)
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс апр 21, 2024 22:29:21
Jack_A
[uquote="OKF",url="/forum/viewtopic.php?p=4571486#p4571486"]Не обижайтесь.)[/uquote]
Чего мне обижаться - я же не компилятор

А начинающим (по программному делу) я был этак в году 76-м прошлого тысячелетия.
А насчёт наличия ошибок в компиляторе... Когда в преферансе мне сетовали за недозаказ - я спрашиваю:
- А если 4 на 4 в двух мастях на одной руке?
- Ну, этого никогда не бывает.
- Значит, ты мало играл. У меня случалось.
То-то и оно.
© А.Пугачёва, жена иноагента.
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн апр 22, 2024 16:51:57
OKF
Да. Я тоже находил ошибки в контроллере HDD. Но это ТАКАЯ редкость. Вы понимаете? В основном, ошибки у начинающих. Которым кажется что виноваты все, кроме них самих.)
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 11:59:24
Jack_A
Можно сформулировать корректнее: не "компилятор глючит", а "есть разное понимание некоторых инструкций у компилятора и юзера". Юзер может считать, что "это ведь так по умолчанию", а у компиля другое мнение.
До сих пор помню,хоть прошло порядочно. Работал в старом, ещё Борландовском Си. Ввожу переменную - портится рядом лежащая! Ошибка не очевидная, трудно улавливаемая. Когда поймал, стал разбираться. Оказывается, для ввода float требовался формат %lf, без вариантов, даже если просто float, а не double. , У меня же просто %f . И получив такой формат, оно вместо предупреждения во всю дурь, на все 16 байт хряпнуло введённое значение. Мол, хрен тебя знает, какая точность тебе нужна, на всяк случай запупырю максимальную. Конечно, моей вины тут больше половины, но при анализе синтаксиса мог бы хоть предупреждение выдать.
Мне скажут: юзер может таких конструкций нагородить, что компилятору вариантов анализа мильён понадобится. А я не спорю. Нужно точно следовать описанию используемой версии языка. Но при анализе ошибки листинг ну никак не помешает - пусть не "что это компайл надурил?", а "в чём у нас между-недопонимание?" И особенно для МК - тут пользователей меньше, поколения МК меняются чаще, и степень "вылизанности" софта по определеню меньше, чем у "the language of general use"
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 16:18:46
OKF
Припоминаю последнюю ошибку компилятора:)
Код: Выделить всё
eeprom_write_byte(0, 0x34); //litle-endian
eeprom_write_byte(1, 0x12);
uint8_t i = 2; //всё плохо: 3412
uint16_t v = eeprom_read_byte(--i)<<8 | eeprom_read_byte(--i);
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 17:08:34
Martian
uint8_t eeprom_read_byte...
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 17:22:41
OKF
А членораздельнее?)
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 17:29:18
Martian
перед сдвигом влево требуется приведение к типу uint16_t
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 18:12:57
OKF
Нафига? Результат у нас какой тип имеет?
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 18:17:24
Martian
Результат имеет uint16_t. Но сдвиг об этом ничего не знает, его приоритет выше.
и опять же: число скобок бесконечно во вселенной. a << b | c(d) можно прочитать и как a << (b | c(d)). И да, я верю, что все знают приоритеты, но пишу так: (a << b) | c(d)
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 18:33:38
OKF
Ну, то что для успокоения каждый пишет по своему, это дело каждого. Но, есть же правила. И им пофигу какая у вас религия.
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 18:39:18
Martian
у нас не религия. Правила есть, да. Почему же Вы им не следуете?
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 19:01:13
OKF
Внимательно читаем приведение типов.
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 19:07:36
Martian
Может, лучше про приведение типов? Или "Приведение типов"? Или тоже похуй?
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт май 02, 2024 19:15:51
Z_h_e
OKF писал(а):uint16_t v = eeprom_read_byte(--i)<<8 | eeprom_read_byte(--i);
Я правильно понимаю, что у Вас результат, который попал в
v, это 0x0034?
Ворнинга не было?