-
- Это ответ "для чего", а мне интересна оценка подхода к построению кода. - teap0t(04.10.2020 16:04)
- Это код для работы с регистрами периферии (линиями внешних
прерываний) в STM32 и к CMSIS не относится. Лень и "оптимизация"
часто следуют вместе, но вопрос о правильности (допустимости)
подхода, или, наоборот, необходимости всяческого уклонения и
недопущения. - teap0t(04.10.2020 15:40)
- Поправил ответ. Вообще подход не очень, я бы записал через условие: evgeniy1294(914 знак., 04.10.2020 16:04 - 16:20)
- Такой код завернёт MISRA: у кейса должно быть не менее трёх веток.
Ассерт на входе есть. С этим там строго. - teap0t(04.10.2020 16:07)
- Тут сразу вопрос в вам. А MISRA разве не запрещает приводить число
к сырому указателю или работать с памятью через смещение от этого
указателя? Смысл моего вопроса в том, что CMSIS генерируется
машиной и позволяет работать с размеченной памятью: evgeniy1294(461 знак., 04.10.2020 16:39)
- Использование указателей должно быть ограничено. Допустимо не более одного уровня разыменования. Операторы разыменования не должны быть скрыты в макро или внутри typedef. Указатели на функции запрещены. - Бoмж(10.10.2020 21:41)
- IAR с дефолтными переключателями MISRA2004 ошибок не видит. Об
адресной арифметике я и спрашиваю. Она очень неочевидная. - teap0t(04.10.2020 17:42)
- Стандарт MISRA создан для высокоответственных применений,
указательная арифметика в нем явно запрещена, отсюда ни одно code
review (аудит) такой код не пройдет. Возможно стоит подергать
настройки, если IAR все равно не видит проблем, значит анализатор
кода в нем - говно. А ведь он сертифицирован. - evgeniy1294(04.10.2020 18:24)
- Rule 17.1 Pointer arithmetic shall only be applied to pointers
that address an array or array element . Цитируется по руководству IAR. Здесь это правило соблюдается. teap0t(04.10.2020 19:27, картинка)
- Здесь нет массива или элемента массива, просто что-то в памяти. - evgeniy1294(04.10.2020 19:35)
- Rule 17.1 Pointer arithmetic shall only be applied to pointers
that address an array or array element . Цитируется по руководству IAR. Здесь это правило соблюдается. teap0t(04.10.2020 19:27, картинка)
- Стандарт MISRA создан для высокоответственных применений,
указательная арифметика в нем явно запрещена, отсюда ни одно code
review (аудит) такой код не пройдет. Возможно стоит подергать
настройки, если IAR все равно не видит проблем, значит анализатор
кода в нем - говно. А ведь он сертифицирован. - evgeniy1294(04.10.2020 18:24)
- Я привел пример для наглядности, в библиотеках часто всречаются списки из 5, 6 и более возможных параметров, так что switch-case будет нужен, в котором обязательно должна быть ветка default. Требование не менее трех веток в чем то логично - можно заменить на условие, такой пример также приведен. - evgeniy1294(04.10.2020 16:22)
- Тут сразу вопрос в вам. А MISRA разве не запрещает приводить число
к сырому указателю или работать с памятью через смещение от этого
указателя? Смысл моего вопроса в том, что CMSIS генерируется
машиной и позволяет работать с размеченной памятью: evgeniy1294(461 знак., 04.10.2020 16:39)
- Такой код завернёт MISRA: у кейса должно быть не менее трёх веток.
Ассерт на входе есть. С этим там строго. - teap0t(04.10.2020 16:07)
- Поправил ответ. Вообще подход не очень, я бы записал через условие: evgeniy1294(914 знак., 04.10.2020 16:04 - 16:20)