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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для true71
 
Регистрация: 23.09.2008
Адрес: Козьмодемьянск. Это на Волге.
Сообщений: 2,368
Сказал спасибо: 5,520
Сказали Спасибо 1,042 раз(а) в 599 сообщении(ях)
true71 на пути к лучшему
По умолчанию Re: Как прервать функцию?

По любому придется запоминать в глобальных переменных, например, в массиве (структуре). При входе в функцию проверяете - это новый вход или возврат из основной функции и соответственно инициализируете локальные переменные.
true71 вне форума  
Сказали "Спасибо" true71
warel (28.06.2019)
Непрочитано 27.12.2011, 21:35  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 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.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 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,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Как прервать функцию?

Сообщение от fFerum Посмотреть сообщение
Таймеры уже заняты, их использовать не получится
Остался SYSTICK...
На его основе вполне можно замутить... целую ОС...
st_1 вне форума  
Сказали "Спасибо" st_1
warel (28.06.2019)
Непрочитано 28.12.2011, 02:03  
Eddy71
Почётный гражданин KAZUS.RU
 
Аватар для Eddy71
 
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,534
Сказал спасибо: 5,378
Сказали Спасибо 24,642 раз(а) в 5,542 сообщении(ях)
Eddy71 на пути к лучшему
По умолчанию Re: Как прервать функцию?

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

Сообщение от Eddy71 Посмотреть сообщение
Зачем переменные делать глобальными?? Чем не устраивает тип STATIC ? Все сохраняются внутри функции нетронутыми..
А по сути, чем GLOBAL от STATIC отличаются? Я имею ввиду по расходу памяти. И то и другое - суть статические переменные, отнимающие место и не допускающие затирания, в отличие от динамических, располагающихся на стеке (стеках) и существующие только на время выполнения функций.
Разве что разными способами обращения к ним, да и то, на усмотрение компиляторов...
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 28.12.2011, 07:50  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
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, время: 19:54.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot