|
Keil. Stack usage overflow, в отладчике вспыхивает красным |
|
|
|
Jul 27 2016, 07:45
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
ОС Кейловская RTX с их же надстройкой CMSIS RTOS. Задаю стеки, как в документации, некоторые размером по умолчанию, некоторые своим. Кейл заполняет их шаблоном CC для контроля размера. По моим наблюдениям, они не портятся. Здесь что-то другое. Возможно, быстродействие компа катастрофически испорчено. Есть программы, которые, практически, не работают. Надо драйверы переустановить, OpenGL... Еще попробую новый Кейл 5.20, типа, революционный.
|
|
|
|
|
Jul 27 2016, 10:52
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(jcxz @ Jul 27 2016, 05:49)  Задавайте стеки статически и не будет чудес. Зачем их на куче делать-то?? Ни на какой не на куче. Куча, вообще, девственно чиста, забита одними нулями. Основной стек, тот, что над кучей, используется слегка. Стеки задач создаются в отдельной области os_stack_mem. Но что-то не могу увидеть в ней всех задач. То есть, не вижу шаблона CC. Значит, его действительно что-то портит.
|
|
|
|
|
Jul 27 2016, 14:13
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Сделал все задачи с заданным пользователем стеком (не по умолчанию). Вижу все задачи в области os_stack_mem. Вижу, у всех задач к конце стека (младшие адреса) есть подложка из CC байтов. Достаточное количество, как минимум, половина от выделенного. Вижу, как меняются остальные байты при работе. Ничего необычного. И все равно одна задача иногда подсвечивается красным. Я уже и местами их менял, теперь она не последняя в этой области. Не помогает. Складывается, что сама задача и портит свой же стек. Лично я со стеком не балуюсь, боже упаси. Во всяком случае, не намеревался. И все так же смущает, что функция os_error не вызывается. При переполнении стека она должна вызываться, и там зависать.
|
|
|
|
|
Jul 28 2016, 05:37
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Jul 27 2016, 20:13)  Складывается, что сама задача и портит свой же стек. Лично я со стеком не балуюсь, боже упаси. Во всяком случае, не намеревался. И все так же смущает, что функция os_error не вызывается. При переполнении стека она должна вызываться, и там зависать. Ну если Вы нашли адрес, где подозреваете, что портится содержимое стека, то поставьте бряк на это место под эмулятором и увидите кто туда пишет.
|
|
|
|
|
Jul 28 2016, 07:05
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Адрес не нашел, там много функций работает. Вся память задачи "кишит", до CC. CC стоят стабильно. Я нашел, что событие (Event) для запуска задачи может устанавливаться из двух мест - прерывания и другой задачи, возможно с любым интервалом, вплоть до минимального. Может, это влияет. Буду рыть в ту сторону. Интересно, а underflow возможен? И контроль его? Но тоже не вижу.
Не так. События устанавливаются, как угодно, но задача запускается по наличию обоих событий (WAIT_AND). Так что там никаких "гонок" быть не может.
|
|
|
|
|
Jul 30 2016, 15:04
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(ViKo @ Jul 30 2016, 10:39)  Я не против совершенствования. В этом новом компиляторе выбираются разные стандарты, вплоть до С11 и С++14. Займусь в свободное от досуга время. Считайте, что полсотни ошибок на 20000 строк исходников - это и есть изредка несколько.  Не зря этот компилятор не включается по умолчанию. 1. Есть С99. 2. Не путайте ошибки и предупреждения. 3. Компилятор работает файл за файлом. Так и устраняйте и ошибки и предупреждения. Если у Вас один файл в 20000 линий, то это, извините, неизлечимо. Вообще-то, надо стремитьса чтобы файл был до 500 линий. Не берусь никого учить: научить нельзя, можно помочь научиться.
--------------------
|
|
|
|
|
Jul 31 2016, 13:06
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Код, поставляемый STM, не подлежит обсуждению ввиду очень низкого качества. Разбивать на файлы надо исходя из принципа инкапсуляции - только то, что совершенно необходимо. Никаких глобальных переменных, все или автоматические или статические. Для доступа из других файлов применяются функции. Кстати, большинство функций тоже статические. Цитата Однако, компилятор 5.06 компилирует то же без ошибок. Кто не прав? А не прав разработчик, написавший непереносимый или плохо переносимый код! Если достатпчно часто приходиться переносить разнообразные функции в совершенно другую среду - тут переносимость(portability) очень дорогого стоит.
--------------------
|
|
|
|
|
Jul 31 2016, 13:34
|
Знающий
   
Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842

|
Цитата(Timmy @ Jul 31 2016, 12:53)  Не знаю, у кого как, а у меня шестая версия C++ вываливает кучу варнингов и ошибок из заголовочных файлов CMSIS и STM32_DFP. Их тоже все исправлять?  Или надо какой-то режим компиляции правильно выбрать? Если предупреждения из-за того что включили педантичный режим, то можно например так: Код // core_cm0_wo_warn.h:
#ifndef CHIP_CORE_CM0_WO_WARN_H_ #define CHIP_CORE_CM0_WO_WARN_H_
#if defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #include "core_cm0.h" #pragma GCC diagnostic pop #elif defined(_MSC_VER) #else #error Included core_cm0_wo_warn but not __GNUC__! #endif
#endif /* CHIP_CORE_CM0_WO_WARN_H_ */ Ну и включать этот файл вместо оригинального естственно. Если всё еще вылезают предупреждения поотключать их дополнительно можно в этом же файле. Без этого лично мне работать очень некомфортно.
|
|
|
|
|
Aug 1 2016, 12:28
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(jcxz @ Jul 31 2016, 22:51)  Так он поставляется не для того, чтобы использовать в проектах, а только для примера и когда есть какие-то непонятки по даташитам и что-то не работает. К сожалению, вынужден не согласиться. Этот код существенно ускоряет создание... демошки, что по определению и есть FSH(food second hand), но часто преподносится как готовый продукт. Вы можете найти требование знания и умения использования Cube к кандидатам на работу. В самом деле, так много мозгов не надо, а за мозги приходиться платить, т.е. очевидная прямая "экономия". Ну еще можно удаленно заказать в какой-нибудь Индии - вот еще экономия. Ну то, что продукт дерьмо, так его GUI украсит и, потом, он не то, чтобы совсем не работает, а так, между изредка и частенько. Кроме того, силикон развивается быстро и за ним без Индии не угнаться, а что ожидать оттуда?! Опыт подсказывает, что миллиард населения хочет жрать, ну и надо этот миллиард создавать. А кроме шуток, я тоже использую этот продукт дле reference only - все таки он лучше их документации, написанной не по-английски, хотя английскими словами.
--------------------
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|