Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Мудрый кот
Сообщения: 1743
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение 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]Быстро только кошки плодятся.
Если будете делать это несамостоятельно, то в голове ничего не останется.
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="jcxz",url="/forum/viewtopic.php?p=4569039#p4569039"]Самый лучший способ: Всё время смотреть в листинг! Написали строчку кода, скомпилили (с макс.оптимизацией), посмотрели в листинг - что получилось? И следующая итерация. И т.д.[/uquote]
Нафига? Это смотря какие цели.) К примеру, я хочу писать красиво и лаконично. На кой мне листинг?)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6324
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

[uquote="OKF",url="/forum/viewtopic.php?p=4571314#p4571314"]К примеру, я хочу писать красиво и лаконично. На кой мне листинг?)[/uquote]
Между "я хочу" и "я умею" есть некоторая разница. :) Когда это десятки раз писалось в разных вариантах и успешно работало - можно и без листинга. Да и то: в сложных случаях непонятно - то ли компилятор дурит, то ли сам накосячил. А вид сгенерированного кода всё расставит по местам.
Изображение
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Ой. "Компилятор дурит" - это уже говорит о многом. Не обижайтесь.)
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Вера в безгрешность компилятора тоже о многом может сказать. Например, что верующий не использовал XC8/16/32, список ошибок которых достаточно большой. Не знаю, как сейчас, а раньше в фреймворке Микрочипа было явно указано не включать оптимизацию XC8.
Компилятор - это как бэ всё-таки тоже программа. Со всеми её свойствами.
Контактная информация:
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Обычно, начинающие все свои ошибки списывали на компилятор.)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6324
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

[uquote="OKF",url="/forum/viewtopic.php?p=4571486#p4571486"]Не обижайтесь.)[/uquote]
Чего мне обижаться - я же не компилятор :) А начинающим (по программному делу) я был этак в году 76-м прошлого тысячелетия. :(
А насчёт наличия ошибок в компиляторе... Когда в преферансе мне сетовали за недозаказ - я спрашиваю:
- А если 4 на 4 в двух мастях на одной руке?
- Ну, этого никогда не бывает.
- Значит, ты мало играл. У меня случалось.
То-то и оно.
© А.Пугачёва, жена иноагента.
Изображение
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Да. Я тоже находил ошибки в контроллере HDD. Но это ТАКАЯ редкость. Вы понимаете? В основном, ошибки у начинающих. Которым кажется что виноваты все, кроме них самих.)
Друг Кота
Аватара пользователя
Сообщения: 6324
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Можно сформулировать корректнее: не "компилятор глючит", а "есть разное понимание некоторых инструкций у компилятора и юзера". Юзер может считать, что "это ведь так по умолчанию", а у компиля другое мнение.
До сих пор помню,хоть прошло порядочно. Работал в старом, ещё Борландовском Си. Ввожу переменную - портится рядом лежащая! Ошибка не очевидная, трудно улавливаемая. Когда поймал, стал разбираться. Оказывается, для ввода float требовался формат %lf, без вариантов, даже если просто float, а не double. , У меня же просто %f . И получив такой формат, оно вместо предупреждения во всю дурь, на все 16 байт хряпнуло введённое значение. Мол, хрен тебя знает, какая точность тебе нужна, на всяк случай запупырю максимальную. Конечно, моей вины тут больше половины, но при анализе синтаксиса мог бы хоть предупреждение выдать.
Мне скажут: юзер может таких конструкций нагородить, что компилятору вариантов анализа мильён понадобится. А я не спорю. Нужно точно следовать описанию используемой версии языка. Но при анализе ошибки листинг ну никак не помешает - пусть не "что это компайл надурил?", а "в чём у нас между-недопонимание?" И особенно для МК - тут пользователей меньше, поколения МК меняются чаще, и степень "вылизанности" софта по определеню меньше, чем у "the language of general use"
Изображение
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение 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);
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

uint8_t eeprom_read_byte...
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

А членораздельнее?)
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

перед сдвигом влево требуется приведение к типу uint16_t
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Нафига? Результат у нас какой тип имеет?
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Результат имеет uint16_t. Но сдвиг об этом ничего не знает, его приоритет выше.
и опять же: число скобок бесконечно во вселенной. a << b | c(d) можно прочитать и как a << (b | c(d)). И да, я верю, что все знают приоритеты, но пишу так: (a << b) | c(d)
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Ну, то что для успокоения каждый пишет по своему, это дело каждого. Но, есть же правила. И им пофигу какая у вас религия.
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

у нас не религия. Правила есть, да. Почему же Вы им не следуете?
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1421
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Внимательно читаем приведение типов.
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Может, лучше про приведение типов? Или "Приведение типов"? Или тоже похуй?
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

OKF писал(а):uint16_t v = eeprom_read_byte(--i)<<8 | eeprom_read_byte(--i);
Я правильно понимаю, что у Вас результат, который попал в v, это 0x0034?
Ворнинга не было?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

Вернуться в «Разные вопросы по МК»