-
- Вот прекрасный пример как надо писать программы FDA(305 знак., 26.01.2019 23:31)
- По поводу ворнингов - вспомнил, как меня Кейл курощал. Я обычно в ИАРе сижу, но как-то достался мне чужой проект в Кейле, и он ворнинг выдавал, что main имеет тип void, а по стандарту int. Кто тот стандарт придумал, про эмбеддед не слыхал, но йцукен(392 знак., 27.01.2019 12:15)
- так ведь int main(void). Я и не задумывался. Мне как CubeMX настрогал, так и есть. Ничего не возвращает. - Лагунов(27.01.2019 20:13)
- Кейл писали немцы, они педантичны ;-) - misyachniy(27.01.2019 13:25)
- Там в комментах п.0 есть, самый главный. s_h_e(70 знак., 27.01.2019 11:39)
- По мне самое главное - это культура разработки и желание организации делать надёжный и качественный продукт. Если такое есть, то разработка будет вестись соответственно. - FDA(27.01.2019 12:03)
- "Не использовать динамическое распределение памяти после инициализации." - так это всякие int x и прочее в циклах и функциях? - Лагунов(27.01.2019 08:24)
- Это не использовать malloc/free в рантайме. Допускается инициализировать объекты на куче во время старта, но после запуска железки - никакой динамической памяти - lloyd(27.01.2019 08:44)
- Именно так! - FDA(27.01.2019 10:42)
- Это не то - VLLV(27.01.2019 08:38)
- Это не использовать malloc/free в рантайме. Допускается инициализировать объекты на куче во время старта, но после запуска железки - никакой динамической памяти - lloyd(27.01.2019 08:44)
- Мне в космос нельзя, три пункта нарушаю - тотальный контроль параметров, препроцессор и указатели на функции. Но одиночки и не летают в космос :) - VLLV(27.01.2019 00:20)
- Таких не берут в космонавты!(с) :)) - MBedder(27.01.2019 00:31)
- По поводу ворнингов - вспомнил, как меня Кейл курощал. Я обычно в ИАРе сижу, но как-то достался мне чужой проект в Кейле, и он ворнинг выдавал, что main имеет тип void, а по стандарту int. Кто тот стандарт придумал, про эмбеддед не слыхал, но йцукен(392 знак., 27.01.2019 12:15)
- В IAR ARM есть возможность скомпилировать программу со встроенной проверкой границ массивов. misyachniy(75 знак., 25.01.2019 13:56 - 21:12)
- Обращения по указателю тоже контролирует? - AlexBi(25.01.2019 16:02)
- 11 месяцев назад контролировал - misyachniy(25.01.2019 21:11, ссылка)
- Вот это здорово! Жаль, что я изначально к Кейлу прилип. Но будем посмотреть. :-) - Лагунов(25.01.2019 15:51)
- Обращения по указателю тоже контролирует? - AlexBi(25.01.2019 16:02)
- Желательно использовать так же статические анализаторы кода. Часто они могут прогнать функцию при граничных значениях переменных и понять сразу, что будет обращение за пределы массива. - fk0(25.01.2019 11:49)
- Если вы не проверяете границы массивов, то так вам и надо - lloyd(24.01.2019 23:08)
- Я вот тоже никогда границы массивов не проверяю, но со мной ничего такого не случается. Почему? Да потому, что прежде чем что-то программировать, сперва надо разработать алгоритм! И кто на "вылизывание" алгоритма своего времени не пожалеет, то Ксения(464 знак., 25.01.2019 00:00)
- здесь я виноват тем, что тупо перенес именно старый алгоритм вычисления номера пистолета колонки. В новом протоколе надо было это учесть. Так что всё дело именно в алгоритмах. - Лагунов(25.01.2019 11:54)
- Полностью поддерживаю. Если не говнокодить, не заниматься глупой экономией байтов, структурировать программу, то и проблем не будет. KISS = Keep It Simple Stupid VLLV(345 знак., 25.01.2019 10:46)
- Ну, собсно гря, ошибка не в назначении индекса как флага, а в неициализации индекса до его возможного использования. - mse homjak(26.01.2019 20:59)
- Если бы индекс не был проинициализирован вообще, он был бы равен нулю, что не привело бы к порче памяти. - VLLV(26.01.2019 23:15)
- Первый раз. - mse homjak(26.01.2019 23:45)
- Вы на c89 пишете, что нельзя инициализировать переменную по месту использования? (и объявлять там же) lloyd(133 знак., 26.01.2019 22:08)
- Почему "нельзя"? объявил переменную, инициализировал, использовал. mse homjak(491 знак., 26.01.2019 22:19 - 22:40)
- Если бы индекс не был проинициализирован вообще, он был бы равен нулю, что не привело бы к порче памяти. - VLLV(26.01.2019 23:15)
- Говорят, есть static assert. - evgeniy1294(25.01.2019 11:46)
- Это в С++11. В C++03 можно эмулировать. В C89, C99 -- никак. В C11 есть _Static_assert, но самого C11 ни у кого нет в 2019 году. - fk0(25.01.2019 12:17)
- На сях через макросы прекрасно работает. - evgeniy1294(25.01.2019 15:58)
- В С++11/14 научились уже даже TI (для ARM и MSP430) и IAR, не говоря про гыцэцэ - lloyd(25.01.2019 12:50)
- в IAR для AVR поддержки не замечал, правда я пользуюсь не самой последней версией - AlexG(25.01.2019 16:08)
- Это в С++11. В C++03 можно эмулировать. В C89, C99 -- никак. В C11 есть _Static_assert, но самого C11 ни у кого нет в 2019 году. - fk0(25.01.2019 12:17)
- Это за всё хорошее и против всего плохого. Проверка индекса (как и другие проверки) полезна на этапе отладки. Зато в поле велика ли польза от этой проверки? "У вас индекс плохой, идите лесом" - едва ли сильно лучше, чем тихий глюк. - SciFi(25.01.2019 10:52)
- Сильно лучше. Ибо memory corruption может обрушить карточный домик и породить лавину вторичных глюков, концов не найдёшь. Лучше громкий ассерт. Не во всех случаях, но именно в этом, когда очевидно, что операцию нужно откатить, но уже никак. Вообще fk0(334 знак., 25.01.2019 11:47)
- Мы немного про разное говорим. Я - да, про то, чтобы быть умным и не ошибаться :) А если уж не повезло, то те случаи "тихого глюка", что я говорю, оказались убойными, лучше бы проигнорировали данные. - VLLV(25.01.2019 11:20)
- Ну, собсно гря, ошибка не в назначении индекса как флага, а в неициализации индекса до его возможного использования. - mse homjak(26.01.2019 20:59)
- TDD ваше всё. Причём не только в алогоритмах. VVB_(72 знак., 25.01.2019 10:30)
- положил книгу по ссылке в upload - AlexG(26.01.2019 19:48)
- Что использовать size_t или ptrdiff_t ? Границы у них разные... - Говорите громче(24.01.2019 23:58,
)
- Я вот тоже никогда границы массивов не проверяю, но со мной ничего такого не случается. Почему? Да потому, что прежде чем что-то программировать, сперва надо разработать алгоритм! И кто на "вылизывание" алгоритма своего времени не пожалеет, то Ксения(464 знак., 25.01.2019 00:00)
- Не так уж и сложно проверять индекс массива перед записью в массив, тем более что он всегда положительный (всего одну границу проверить). Но чаще всего, такой симптом бывает по другой причине - из-за нехватки стека. - Ксения(24.01.2019 19:24)
- Проблема не в том, что трудно проверить, а в том, что мест, где написано x = arr[i]; arr[j] = y; arr[k] *= z; может быть 100500. Сишный подход требует перелопатить весь код, а плюсовый позволяет поменять только объявление массива. - йцукен(24.01.2019 19:54)
- Это средство... барабанная дробь... C++. В плюсах написать массив, реализующий проверку выхода индекса за границу - как два пальца. В голом C это можно сделать, объявив структуру, содержащую массив и его размер, и обращаться к элементам массива йцукен(60 знак., 24.01.2019 18:38)
- учиться, учиться и еще раз учиться ... мне. :-) - Лагунов(24.01.2019 18:42)
- Не хотите учиться... ладно. Тогда откройте в ИАРе Project->Options->Runtime Checking, и поставьте там какие-нибудь галки. - йцукен(24.01.2019 18:55)
- да я вроде как раз наоборот - признаю, что надо учиться :-) - Лагунов(25.01.2019 11:55)
- Не хотите учиться... ладно. Тогда откройте в ИАРе Project->Options->Runtime Checking, и поставьте там какие-нибудь галки. - йцукен(24.01.2019 18:55)
- учиться, учиться и еще раз учиться ... мне. :-) - Лагунов(24.01.2019 18:42)
- Есть такое средство! Паскаль называется. - Крок(24.01.2019 18:03)
- Как всё запущено.. - Лагунов(24.01.2019 18:41)
- Тогда Ada ;) - Гудвин(24.01.2019 19:26)
- Как всё запущено.. - Лагунов(24.01.2019 18:41)
- Вот прекрасный пример как надо писать программы FDA(305 знак., 26.01.2019 23:31)