Покраска стека (области памяти) Keil uVision
HTML-код
- Опубликовано: 16 янв 2024
- Небольшой рассказ о том, как с использованием простого цикла на языке ассемблера, "покрасить" область памяти.
; покраска стека выбранным шаблоном
LDR R0, =Stack_Mem
LDR R1, =Stack_Size
LDR R2, =0xAAAAAAAA
Fill STR R2, [R0], #4
SUBS R1,#4
BNE Fill
Не забывайте подписываться на группу в телеграмм
Канал в телеграмм - t.me/vladimir_medintsev Наука
Автор красава, чётко, лаконично, а главное понятно все объясняет.
Если кому интересно - автор покрасил память в примерно светло-серый цвет
Ахаха
Было бы интересны ролики, где вы выслеживаете какие-нибудь баги в проектах в отладке. То есть непосредственный опыт. Спасибо за ваши видео!
Очень наглядно и полезно. Спасибо
🎉😂❤Ура, ура... 🎉ДождалсяяАААа!
Очень хорошая идея. Спасибо.
Единственно, стоит паттерн менять, если в коде уже используется подобная константа 0xaaaaaaaa, на что-то менее примелькавшееся. Помнится, в MSVC используется константа 0xcсcсcсcс для заполнения кучи под отладочной сборкой. Так же где-то встречалась 0xdeadbeef.
или 0xDEADC0DE
😂@@sailtogether3236
Да. Интересный способ маркирования максимума стека.
Владимир Валентинович, Ваши видео интересны на любой вопрос в сфере микроэлектроники.
Владимир, спасибо за видео. Интересная идея, очень красивая в своей простоте.
Ещё, это способ вскрыть некоторые проблемы, когда начали использовать неинициализированную область памяти. Ну или скрыть её)
Если нк ошибаюсь freertos такой же механизм использует для hightwatermark
Здравствуйте! Как можно выделить память под программный код. Затем провести простейшую компилляцию в этой области - сформировать - вызов функций и после передать на сформированный код управление. Но или возможно подскажите ссылки по данной тематике?
У меня есть готовое видео по этой тебе ищите его на канале. Там прям все ответы на ваши вопросы.
@@VladimirMedintsev Спасибо огромное!!!! Я не так давно стал подписчиком Вашего канала. Всё очень интересно! Посмотрю обязательно.
@@VladimirMedintsevНо не так давно смотрел Ваше видео по stm32 freertos, к сожалению столкнулся с проблемой, при попытках сделать что-то сложнее чем мигание светодиодами, например параллельный ввод/вывод по прерываниям через UART, контроллер STM32F405RGT6 уходит в незавидное состояние полного не реагирования ни на что - даже светодиоды мигать перестают. В коде сомнений нет, поскольку если вывести прерывания из управления RTOS или поднять приоритет прерывания до нуля, всё работает как часы. В итоге у меня сложилось впечатление, что использовать RTOS для промышленных решений то, что делать как раз не следует. Но а после того, как с той же проблемой - полное подвисание контроллера, столкнулся и для SPI интерфейса, сейчас со всем усердием чищу код в STM32CubeIDE от любых попыток подружиться с параллельным программированием встроенного в оболочку FREERTOS. Всё что Вы показали про freertos для STM32 вне всякого сомнения очень интересно и работает, но вот область применения данной технологии, вернее полное её отсутствие, опечалила.
Давайте я уточню, ну просто чтобы исключить неправильное понимание написанного вами. Правильно ли я вас понял что:
1. Вы создали проект с использованием прерываний и FreeRTOS.
2. Не потрудились или не смогли найти (путем отладки) причину зависания микроконтроллера.
3. Сделали вывод что нет сферы применения FreeRTOS.
Потрясающе.
Причем вас ни на секунду не смутило, что большинство проектов всё-таки написаны с использованием ОСРВ.
@@VladimirMedintsev Обижаете! Именно что потрудился найти причину подвисания контроллера. Один процесс читает данные, второй пишет. Определил моменты вызвавшие его подвисания и нашёл пути устранения данной причины, описал их в предыдущем комментарии. И конечно же меня смущает как такую штуку кто-то решается использовать в реальных проектах. В недалёкой перспективе предстоит заниматься ESP32, посмотрю там реализацию FreeRTOS. Но я бы посоветовал десять раз подумать над использованием FreeRTOS встроенного в STM32, если это проект чуть сложнее, чем моргать светодиодами. От себя замечу, каким бы кривым не был код. Контроллер "на ровном месте" уходить в состояние Z по настройкам портов и прерываний, из которого его выводит только перезагрузка, не должен. В Вашем ролике, всё показано верно и концепция использования ОСРВ описана замечательно - мне всё очень понравилось.
Может кто сталкивался, в макос с arm куб иде не работает китайский st-link v2, говорит надо обновить и даже определяет его и пишет update successfully но ничего не меняется
При этом platformio прошивает через него
Ютуб не разрешает ссылки. Потому так: Али /item/32861705452.html
Бывают свистки как у вас, а бывают нормальные. По ссылке выше прошился на V2.J37.S7 и даже SWV удалось спаять.
@@rxlroman спасибо, заказал
Как вообще выставлять эти значения? Где об этом можно почитать? В общем-то интересует вопрос, как определить оптимальные значения, скажем, чтобы не выделять слишком много или наоборот чтобы не возникало переполнения, при этом же еще выбирается конкретный контроллер под задачу с определенными размерами памяти.
Ну вот об этом и речь. Как правило мы увеличиваем стек или когда имеем проблемы или путем оценки, а сколько же места там осталось.
Есть статический анализ вызовов, он позволяет оценить потребный стек для вызова конкретной функции со всему ее вложенными вызовами. Но надо учесть обработчики еще и прерываний: максимальный расход постоянных задач + максимальный расход обработчиков + немного на всякий случай.
тема не раскрыта полностью :)
в частности, отработка переполнения стэка во FreeRTOS.
Во FreeRTOS это отдельная тема. Невозможно в один ролик вместить все знания мира.
@@VladimirMedintsev , есть к чему стремится :) как минимум для новичков рассказать что кладётся в стэк, а что в кучу... почему так и чем страшно перетирание стэка...
Только я кейл перестал пользоваться...
#1Перерос...
#2 пароли генераторы😮 перестали работать.
Как по мне проблема высосана из пальца. Не совсем понятно зачем красить стек. Если хотите отследить выход за пределы стека, то измените в ld файле нижнюю границу стека на 0x20000000. Тогда сразу же при выходе за границы стека вы получите HardFault, И не нужно ничего красить и потом в отладчике на это смотреть. В реальной системе скорее всего не получится этого сделать, когда за 1 секунду приходят десятки или сотни событий которые нужно обрабатывать.
Это если задача одна, без ртос. С ртос у каждой задачи свой стек будет
@@alexandrgonzales6503 Это от RTOS зависит. Некоторые используют общий стек.
В кубе с этим проще, там и "красить" ничего не надо, там и так подсвечивается...
Мало.
у меня возник вопрос по поводу стека, возможно нубский. Если локальные переменные хранятся на стеке, то как мы тогда можем вернуть из функции указатель на локальную переменную этой функции и получить её в том же main? Функция ведь закончила свое выполнение и должна уйти из стека вместе со своей переменной
Где вы видели чтобы из функции возвращали указатель на локальную переменную? В функцию передают указатель и функция модифицирует данные по ссылке. Это разные вещи.
а все понял, прошу прощения за глупый вопрос. Я попробовал вернуть из функции указатель на переменную и был удивлен что значение вывелось корректно. Только сейчас понял что это произошло из-за того, что просто память на стеке пока не перезатерлась и поэтому я и получаю нормальное значение. Сейчас попробовал между cout и вызовом этой функцию добавить вызов другой функции и теперь это не работает)
Вопрос как раз довольно интересный. И если вы его задаете, значит уже не нуб. Вернуть указательна локальную переменную можно, но значение по указателю может быть некорректным, потому как стек разрушился уже. С позволяет таким образом выстрелить себе в ногу. Тоже самое на Rust не даст такое сделать.
Парень, с таким знанием Си ролики Мединцева Тебе очень рано смотреть. Указатель на локальную переменную функции
Зачем нужно возвращать указатель на локальную функцию при выходе из функции? Каков практический смысл указателя на мусор?
Мужчина, у Вас память кричит! Успокойте её, что-ли...
Только CMSIS только IAR только Хардкор
а вы случайно не только собственноразработанные контроллеры используете на только своих платах изготовленных из своего текстолита? 😂😂