Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Как прервать функцию?

Непрочитано 27.12.2011, 20:54  
fFerum
Частый гость
 
Регистрация: 22.09.2008
Сообщений: 25
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 9 сообщении(ях)
fFerum на пути к лучшему
По умолчанию Как прервать функцию?

вопрос ламерский, но... Как перевать функцию не теряя ее данных?
в некой функции вызваной по прерыванию я сортирую масив. В процессе сортировки необходимо разрывать выполнение функции и передавать управление обработчику задач. потом возвращатся и продолжать обработку масива. Как разорвать функцию сортировки так, чтобы после возврата не потерять значения индексов масива, результат и .т. и (желателно) вернутся в туже точку выполнения.
Грубо говоря сделать програмный аналог прерывания. Делать все переменные глобальными не могу.
LPC1768 + Keil 4.22a
Реклама:
fFerum вне форума  
Сказали "Спасибо" fFerum
warel (28.06.2019)
Непрочитано 27.12.2011, 21:17  
true71
Почётный гражданин KAZUS.RUN
 
Аватар для true71
 
Регистрация: 23.09.2008
Адрес: Козьмодемьянск. Это на Волге.
Сообщений: 2,446
Сказал спасибо: 5,259
Сказали Спасибо 1,054 раз(а) в 614 сообщении(ях)
true71 на пути к лучшему
По умолчанию Re: Как прервать функцию?

По любому придется запоминать в глобальных переменных, например, в массиве (структуре). При входе в функцию проверяете - это новый вход или возврат из основной функции и соответственно инициализируете локальные переменные.
true71 вне форума  
Сказали "Спасибо" true71
warel (28.06.2019)
Непрочитано 27.12.2011, 21:35  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Как прервать функцию?

Сообщение от fFerum Посмотреть сообщение
вопрос ламерский, но... Как перевать функцию не теряя ее данных?
в некой функции вызваной по прерыванию я сортирую масив. В процессе сортировки необходимо разрывать выполнение функции и передавать управление обработчику задач. потом возвращатся и продолжать обработку масива. Как разорвать функцию сортировки так, чтобы после возврата не потерять значения индексов масива, результат и .т. и (желателно) вернутся в туже точку выполнения.
Грубо говоря сделать програмный аналог прерывания. Делать все переменные глобальными не могу.
LPC1768 + Keil 4.22a
Наверное, не совсем хорошо в теле обработчика выполнять сортировку. Надо стремится к минимизации обработчиков. Пусть они семафорят фоновой задаче, а та уже разложит приоритеты. И тогда проблем прерывания не будет. А в вашем случае от сохранения контента никуда не деться.
Не совсем понятно "разорвать функцию сортировки". Что ее должно разрывать? Кроме другого прерывания? Или ваша сортировка следит за какими-то флагами, и увидев флаг бегом делать что-то важнее сортировки? Непонятно.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 27.12.2011, 21:44  
fFerum
Частый гость
 
Регистрация: 22.09.2008
Сообщений: 25
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 9 сообщении(ях)
fFerum на пути к лучшему
По умолчанию Re: Как прервать функцию?

Сообщение от ut1wpr Посмотреть сообщение
Наверное, не совсем хорошо в теле обработчика выполнять сортировку. Надо стремится к минимизации обработчиков. Пусть они семафорят фоновой задаче, а та уже разложит приоритеты. И тогда проблем прерывания не будет. А в вашем случае от сохранения контента никуда не деться.
Не совсем понятно "разорвать функцию сортировки". Что ее должно разрывать? Кроме другого прерывания? Или ваша сортировка следит за какими-то флагами, и увидев флаг бегом делать что-то важнее сортировки? Непонятно.
Обработчик запускает функцию сортировки.
Да, вы правы, необходимо отслеживать ряд флагов, причем сортировка имеет не самый высокий приоритет т.е. имеет место подобие ОС. Касательно сохранения понял.. попробую конечно извратится на асме, посмотрю что получится.
(Таймеры уже заняты, их использовать не получится.)
fFerum вне форума  
Сказали "Спасибо" fFerum
warel (28.06.2019)
Непрочитано 27.12.2011, 22:33  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Как прервать функцию?

Сообщение от fFerum Посмотреть сообщение
(Таймеры уже заняты, их использовать не получится.)
Пересмотрите концепцию таймеров. Если у вас по одному таймеру на задачу, это расточительство. Впрочем, это уже даже не мое дело.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 27.12.2011, 22:51  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Как прервать функцию?

Сообщение от fFerum Посмотреть сообщение
Таймеры уже заняты, их использовать не получится
Остался SYSTICK...
На его основе вполне можно замутить... целую ОС...
st_1 вне форума  
Сказали "Спасибо" st_1
warel (28.06.2019)
Непрочитано 28.12.2011, 02:03  
Eddy71
Гуру портала
 
Аватар для Eddy71
 
Регистрация: 22.02.2008
Адрес: Ukraine, Полтава
Сообщений: 10,454
Сказал спасибо: 5,999
Сказали Спасибо 26,913 раз(а) в 6,082 сообщении(ях)
Eddy71 на пути к лучшему
По умолчанию Re: Как прервать функцию?

Зачем переменные делать глобальными?? Чем не устраивает тип STATIC ? Все сохраняются внутри функции нетронутыми..
Eddy71 вне форума  
Сказали "Спасибо" Eddy71
warel (28.06.2019)
Непрочитано 28.12.2011, 07:26  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Как прервать функцию?

Сообщение от Eddy71 Посмотреть сообщение
Зачем переменные делать глобальными?? Чем не устраивает тип STATIC ? Все сохраняются внутри функции нетронутыми..
А по сути, чем GLOBAL от STATIC отличаются? Я имею ввиду по расходу памяти. И то и другое - суть статические переменные, отнимающие место и не допускающие затирания, в отличие от динамических, располагающихся на стеке (стеках) и существующие только на время выполнения функций.
Разве что разными способами обращения к ним, да и то, на усмотрение компиляторов...
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 28.12.2011, 07:50  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Как прервать функцию?

В прерывании устанавливайте флаг прерывания и все, в основном цикле неторопливо сортируйте все что надо
niXto вне форума  
Сказали "Спасибо" niXto
warel (28.06.2019)
Непрочитано 28.12.2011, 12:37  
fFerum
Частый гость
 
Регистрация: 22.09.2008
Сообщений: 25
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 9 сообщении(ях)
fFerum на пути к лучшему
По умолчанию Re: Как прервать функцию?

Сообщение от st_1 Посмотреть сообщение
Остался SYSTICK...
На его основе вполне можно замутить... целую ОС...
Благодарю! вроде как и пойдет даже. У нас и есть подобие ОС, только асинхронное. Проект не мой, я просто пишу его часть, потому кто, куда и зачем(!) прихоботил память и остальные таймеры - "не мое дело, мне надо было. я забрал", потому вот так
Переменные сохранил передавая указатель на них как аргумент обработчику(собрал в структуру) таская такой себе буфер туда/обратно. Тогда они не теряются, и память по окончанию сортировки будет освобождена.

Всем спасибо.
fFerum вне форума  
Сказали "Спасибо" fFerum
warel (28.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выключить функцию sdsrem Микроконтроллеры, АЦП, память и т.д 33 07.12.2010 15:23
как написать макрос-функцию в Си Winavr serb-radio Микроконтроллеры, АЦП, память и т.д 7 30.09.2008 11:08
Знатокам С! Как передать в функцию порт? arkbox Микроконтроллеры, АЦП, память и т.д 52 26.02.2008 17:06
CVAVR передача в функцию PORTА.X как переменную woroba Микроконтроллеры, АЦП, память и т.д 5 10.12.2007 12:49
Знатоки Си, помогите: Как обьявить функцию? Hoksmur Микроконтроллеры, АЦП, память и т.д 4 09.10.2007 19:36


Часовой пояс GMT +4, время: 06:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.