реклама на сайте
подробности

 
 
> Reentrant функция, Keil, RTX
toweroff
сообщение Dec 20 2012, 10:14
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день!

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

Идея-то давно витала - сделать одну reentrant функцию, в которую в качестве параметра будет валиться только OS_TID, из которой ее вызвали. Но как это грамотно сделать - пока не разбирался, да и смущает еще такой момент. В этой функции активно используются ожидания таймаута или событий. Как эти функции RTX будут вести себя в reentrant-функциях?
Вообще Keil RTX поддерживает такие вещи?

UPD
С кейлом вроде как порядок. (тыц)

Теперь остается узнать, как правильно писать reentrant функции? sm.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение Dec 21 2012, 04:06
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



1. Не используйте статические, глобальные и иные переменные, которые могут повлиять на выполнение кода в другом потоке
2. Локальные переменные д.б. размещены в стеке (выполняется почти всегда по умолчанию)
3. Функция не должна возвращать к-либо глобальные указатели/объекты
4. И вообще, в функцию необходимо передавать только указатель на объект/структуру с данным объектом, в котором должны быть все данные, необходимые для работы, и там же необходимо сохранять все результаты работы функции над данным объектом
5. Если используете объекты синхронизации (мьютексы, семафоры и т.д.) - то необходимо детально проработать их использование - иначе деадлок

Как-то так, если своими словами.

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016