Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться с Keil RTx на stm32f103
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
DemonIce
Доброго дня!
Уважаемые Гуру, помогите разобраться с RTx

Изучать мк начал недавно, опыта как такового не хватает, а интерес очень огромен.
Очень хочется научится работать с операционкой.
Уже могу запускать процессы, включать таймер, но вот хоть убейте не пойму как работать с глобальными переменными.

На данный момент объявляю переменную static long count, наращиваю ее на единицу через таймер раз в секунду, вывожу на дисплей в отдельном процессе, доходит до 249 и операционка "зависает".

Насколько я понимаю - вся проблема в stack overflow, отключаю проверку в настройках и все работает, а вот как избежать этой ошибки - ума не приложу.

Или хотя бы дайте пинка в сторону описания работы с глобальными переменными в rtx. Сам ничего найти не смог (или ничего не понял ((()

scifi
Цитата(DemonIce @ Aug 14 2015, 09:03) *
Изучать мк начал недавно, опыта как такового не хватает, а интерес очень огромен.
Очень хочется научится работать с операционкой.

ИМХО, ось надо отложить на потом.
Для начала надо на простых программах шишки набить. В конце концов, язык программирования выучить. А если добавить ещё и ось, то это дополнительное поле граблей. Лучше не надо.
DemonIce
Как бы с программированием то проблем нет, стажа хватает с головой, но вот только на обычных ПК.
Да и шишек на простых програмках набил, а вот именно с ОС и хочется разобраться, не хватает мне многозадачности.
Genadi Zawidowski
Если стажа хватает, должны понять что количество инкрементнов переменной в том виде, как Вы описываете, на размер занятого стека не влияет.
Скорее всего в Вашем случае "зависнет" и само по себе через некоторое время после запуска.
Ну не сама собой, либо действительно стек портится или входите в deadlock (взаимная блокировка задач) или просто ждете события которе никогда не нступит...
DemonIce
Цитата(Genadi Zawidowski @ Aug 14 2015, 09:22) *
количество инкрементнов переменной в том виде, как Вы описываете, на размер занятого стека не влияет.


Вот как раз это в ступор то и вводит

Цитата(Genadi Zawidowski @ Aug 14 2015, 09:22) *
Скорее всего в Вашем случае "зависнет" и само по себе через некоторое время после запуска.


Нет никаких ожиданий, циклы бесконечны

Цитата(Genadi Zawidowski @ Aug 14 2015, 09:22) *
либо действительно стек портится или входите в deadlock (взаимная блокировка задач) или просто ждете события которе никогда не нступит...


Сам думаю о том же, что процесс пытается обратится к переменной в момент записи в нее значения
а как это обойти?
scifi
Цитата(DemonIce @ Aug 14 2015, 09:33) *
Сам думаю о том же, что процесс пытается обратится к переменной в момент записи в нее значения
а как это обойти?

Бессмыслица какая-то. Вы уверены, что у вас есть опыт программирования?
Вы вообще представляете, как процессор работает? Как переменные читаются и записываются? Какой такой процесс? Выбросьте эту чушь из головы.
DemonIce
Цитата(scifi @ Aug 14 2015, 09:40) *
Бессмыслица какая-то. Вы уверены, что у вас есть опыт программирования?
Вы вообще представляете, как процессор работает? Как переменные читаются и записываются? Какой такой процесс? Выбросьте эту чушь из головы.

уверен
но других объяснений найти не могу, без обращения к этой переменной диоды мигают до бескончености, а при использовании ее - 249 циклов записи

Причем код менялся, менялись интервалы, число 249 остается постоянным
scifi
Цитата(DemonIce @ Aug 14 2015, 09:42) *
но других объяснений найти не могу, без обращения к этой переменной диоды мигают до бескончености, а при использовании ее - 249 циклов записи

Надо разбираться в первопричинах сбоя. Скорее всего, сама по себе эта переменная ни при чём, просто это добавление к программе спровоцировало сбой в другом месте. Этот сбой случился бы так или иначе.
Надо собирать диагностическую информацию. Использование стеков, к примеру, и всё такое прочее. Внутрисхемный отладчик для этого оч. хорош.
DemonIce
Цитата(scifi @ Aug 14 2015, 09:47) *
Надо разбираться в первопричинах сбоя. Скорее всего, сама по себе эта переменная ни при чём, просто это добавление к программе спровоцировало сбой в другом месте. Этот сбой случился бы так или иначе.
Надо собирать диагностическую информацию. Использование стеков, к примеру, и всё такое прочее. Внутрисхемный отладчик для этого оч. хорош.

Понятно,
спасибо, буду искать отладчик
Golikov A.
Вообще глобальные переменные не есть хорошая штука для операционки....
Вроде как ее надо через маил боксы из одного процесса в другие прокидывать.
Или делать структуру с симафорами, а так это все как-то зыбко ИМХО....

а вы пробовали переменную в один поток запихать, вдруг у вас программа просто больше 249 по какой-то причине выводить не умеет?
scifi
Цитата(Golikov A. @ Aug 14 2015, 10:41) *
Вообще глобальные переменные не есть хорошая штука для операционки....
Вроде как ее надо через маил боксы из одного процесса в другие прокидывать.
Или делать структуру с симафорами, а так это все как-то зыбко ИМХО....

А давайте ещё с бубном попляшем? Ну и не забывайте помолиться перед подходом к клавиатуре. lol.gif
Golikov A.
Цитата
А давайте ещё с бубном попляшем? Ну и не забывайте помолиться перед подходом к клавиатуре.

Не понял иронии...

То есть вы считаете что стандартные методы по защите данных с совместным доступом и организация правильного потока обмена данными - это пляски с бубном?

Научите меня тогда пожалуйста, как вы правильно без бубна работаете с глобальными переменными?

scifi
Цитата(Golikov A. @ Aug 14 2015, 11:09) *
То есть вы считаете что стандартные методы по защите данных с совместным доступом и организация правильного потока обмена данными - это пляски с бубном?

То есть я считаю, что это никакого отношения к зависанию не имеет.
А так да, правильные методы - это хорошо. Ещё отступы должны быть красивые и комментарии внятные.
RabidRabbit
Цитата(Golikov A. @ Aug 14 2015, 11:09) *
Научите меня тогда пожалуйста, как вы правильно без бубна работаете с глобальными переменными?

Ну, если обращения к глобальной переменной являются атомарными, и есть один писатель и 1+ читателей, то бубен не требуется, равно как защита данных и прочие мьютексы...
Golikov A.
Пока кто-то, что-то не поправил и доступ не перестал быть атомарным, или не появился второй писатель....

ИМХО надо правильно организовывать поток данных, тогда оно всегда будет хорошо работать...
Obam
Цитата(DemonIce @ Aug 14 2015, 10:49) *
Понятно,
спасибо, буду искать отладчик

Как же вы с ARM без JTAGа работаете?
Golikov A.
Грузить его можно через встроенный бутлоадер, а отлаживать выводом в порт.
DemonIce
Цитата(Obam @ Aug 14 2015, 13:30) *
Как же вы с ARM без JTAGа работаете?

Вот так и мучаюсь crying.gif

Жду посылку с ним из поднебесной

А ошибка оказалась ну очень детской, в одном из процессов шла запись в память дисплея и почему то rolleyes.gif в этот момент и происходил сбой
Вопрос решил увеличением приоритета записи в дисплей порт и последующим понижением его после окончания.

Возможно не самое оптимальное решение.

А есть ли способы запретить передачу управления другим процессам при выполнении критических операций?
Не семафоры, а именно аналогично функции запрета/разрешения прерываний

Цитата(Golikov A. @ Aug 14 2015, 14:37) *
Грузить его можно через встроенный бутлоадер, а отлаживать выводом в порт.


через встроенный и гружу, а для тестирования использую дисплей с точскрином

Есть еще f4discovery со встроенным отладчиком и по слухам возможностью подключать отладчик к другим платам, но пока не вдавался в подробности как этот сделать
Golikov A.
надо поднять UART это первым делом делается, и слать данные в порт, раньше через переходник UART-RS232-USB, А сейчас уже полно готовых UART-USB. На всех системах всегда поднимает отладочный порт.



Цитата
Есть еще f4discovery со встроенным отладчиком и по слухам возможностью подключать отладчик к другим платам, но пока не вдавался в подробности как этот сделать

Если другие платы тоже ST процы имею, то вам для этого надо кинуть 4 проводка, и 2 джамперочка снять. А если другие платы не от st то там хитрый процесс переконфигурации прошивки, такой, что по мне возня не стоит времени....
DemonIce
Цитата(Golikov A. @ Aug 14 2015, 15:46) *
надо поднять UART это первым делом делается, и слать данные в порт, раньше через переходник UART-RS232-USB, А сейчас уже полно готовых UART-USB. На всех системах всегда поднимает отладочный порт.

Если другие платы тоже ST процы имею, то вам для этого надо кинуть 4 проводка, и 2 джамперочка снять. А если другие платы не от st то там хитрый процесс переконфигурации прошивки, такой, что по мне возня не стоит времени....


Спасибо за совет про uart - сделаю
а с подключением отладчика не буду пока заморачиваться, подожду готового, хотя по описаниям вторая плата поддерживает его вот только самого описания подключения нет
scifi
Цитата(DemonIce @ Aug 14 2015, 15:34) *
А ошибка оказалась ну очень детской, в одном из процессов шла запись в память дисплея и почему то rolleyes.gif в этот момент и происходил сбой

"Почему-то"? Интересно, почему. Поскольку объяснение не найдено, то, скорее всего, причина не устранена, и проблема отложена до следующего раза.

Цитата(DemonIce @ Aug 14 2015, 15:34) *
Возможно не самое оптимальное решение.

Это не решение, это танец с бубном, который неожиданно дал результат.
kolobok0
Цитата(DemonIce @ Aug 14 2015, 09:17) *
... стажа хватает с головой, но вот только на обычных ПК. ...не хватает мне многозадачности.


присоединяюсь к товарищам которые высказали мысль, что описание Вашего стажа не соизмерим с беззащитностью перед элементарными багами.
По поводу отладки... При большом желании и мизерном опыте - и одного пина хватает, для понимания не только где глючит но и что является причиной.
А у продвинутых товарищей вообще вываливается дебаг аут через пин, плисину и понтово на отдельный экран...

Т.к. подходы к многозадачности везде одинаковы - то любому мало-мальски разумеющему со словарём по не нашему языку, заминка составит
(да нифига не составит).... А через пару дней уже и по памяти писать все апишные вызовы...

Так, что не лохматьте бабушку, выкладывайте сырец в виде рыбы которая у Вас не машет хвостом.
Сразу гадания на кофейной гуще превратится в дельные советы соответствующие Вашему уровню знаний...


удачи вам,
она вам потребуется с таким подходом
Obam
Цитата(Golikov A. @ Aug 14 2015, 15:37) *
Грузить его можно через встроенный бутлоадер, а отлаживать выводом в порт.

И это нынче можно назвать отладкой? Впрочем, смайлик от TS всё пояснил…
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.