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

 
 
> Переключение задач на STM32f10x в Keil
Omnicake
сообщение May 7 2014, 02:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 12-01-14
Из: Омск
Пользователь №: 80 002



Здравствуйте, пытаюсь сделать простейший переключатель задач на миксе ассемблера и си, используя микропроцессор STM32f10x и среду Keil uVision 5, но постоянно натыкаюсь на непонятные моменты. У меня есть основная функция main, из которой инициализируется процессор и включается таймер systick, по прерыванию таймера запускается диспетчер, в котором я хочу сохранить состояние регистров и при выходе выйти уже не на main а на задачу.
Задачи оформлены в виде c-файлов task1.c task2.c и.т.д., к каждой задаче прикреплена структура(массив из 8 чисел) в который заносятся данные о статусе программы, ее длительности и значения SP и PC-регистров, а также зарезервирована величина стэка командой int Stack_task1[512];. Под все это дело организован еще один массив с указателем на массивы каждой из задач. В теории, при инициализации я должен загрузить в массив для каждой задачи значения SP и PC регистров, чтобы после сохранения/восстановления регистров загрузить в регистры SP и PC числа из массива и командой BX выйти на задачу, до следующего срабатывания таймера.
Однако здесь у меня возник вопрос: как мне узнать значения регистров SP и PC для каждой задачи, если она нигде не запускается? То есть она просто прикреплена к проекту, на нее ссылается массив но при выполнении программы она не выполняется нигде. ТАкже мне известно, что у STM32 два SP регистра, один из которых работает в прерывании, а другой в главной программе. Получается если я перед самым выходом из прерывания изменю значение SP, мне это не поможет, потому что после выхода оно все равно сбросится на то значение, которое было до входа в прерывание? В общем, возможно, вопросы глупые, но сам до додуматься до решения пока не могуЮ потому прошу совета. Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение May 7 2014, 19:25
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



С Си на Асм перейти правда 5 копеек задача, компильнул и смотри листинг, обратно муторно, а впрямую то нет проблем.

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

Единственный момент, мне казалось что переключение задач запускает все же таймер, время отведенное на задачу определяет приоритет потока, так? То есть по выходу интервала таймера он ставит флаг PendSV, и уже тот вызвавшись все делает, так?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 7 2014, 21:07
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Golikov A. @ May 7 2014, 23:25) *
Единственный момент, мне казалось что переключение задач запускает все же таймер,

Нет. Не должен таймер, но может. Задача может сама впасть в ожидание и переключить поток исполнения.

Цитата(Golikov A. @ May 7 2014, 23:25) *
время отведенное на задачу определяет приоритет потока, так?


Хотелось бы, но чему равно это время - вопрос. От схемы зависит и т.д.
И прерывания могут длится не известно сколько...

Цитата(Golikov A. @ May 7 2014, 23:25) *
То есть по выходу интервала таймера он ставит флаг PendSV

Если надо, то ставит, если не надо, то не ставит.

Цитата(Golikov A. @ May 7 2014, 23:25) *
PendSV


PendSV переключает, если вызовут...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Omnicake   Переключение задач на STM32f10x в Keil   May 7 2014, 02:17
- - Golikov A.   вроде как при написании диспетчера из прерывания н...   May 7 2014, 04:54
|- - jcxz   Цитата(Golikov A. @ May 7 2014, 10:54) вр...   May 7 2014, 06:11
- - Forger   Цитата(Omnicake @ May 7 2014, 06:17) Здра...   May 7 2014, 05:48
- - RabidRabbit   Цитата(Omnicake @ May 7 2014, 06:17) Одна...   May 7 2014, 06:54
- - adnega   Я бы посоветовал почитать "Джозеф Ю. Ядро Cor...   May 7 2014, 07:49
- - Golikov A.   ЦитатаВ реале - не совсем так. ну то есть в реальн...   May 7 2014, 07:53
|- - jcxz   Цитата(Golikov A. @ May 7 2014, 13:53) ну...   May 7 2014, 08:50
- - Omnicake   Если честно, разработка диспетчера (то самое изобр...   May 7 2014, 08:52
|- - jcxz   Так Вас и тут никуда дальше мануалов не посылали. ...   May 7 2014, 09:08
|- - Forger   Цитата(Omnicake @ May 7 2014, 12:52) Если...   May 7 2014, 09:25
- - Omnicake   Хорошо, буду искать. Спасибо. Хотя мне казалось чт...   May 7 2014, 09:13
|- - jcxz   Цитата(Omnicake @ May 7 2014, 15:13) Хоро...   May 7 2014, 09:44
|- - RabidRabbit   Цитата(jcxz @ May 7 2014, 13:44) В прерыв...   May 7 2014, 09:54
- - Omnicake   Я скачал исходники FreeRTOS и первое на что обрати...   May 7 2014, 09:50
|- - jcxz   Цитата(Omnicake @ May 7 2014, 15:50) Я ск...   May 7 2014, 10:15
|- - Forger   Цитата(Omnicake @ May 7 2014, 13:50) Я ск...   May 7 2014, 10:30
|- - jcxz   Цитата(Golikov A. @ May 8 2014, 01:25) Ед...   May 8 2014, 03:03
- - Omnicake   Прочитал в книге "Джозеф Ю. Ядро Cortex-M3 ко...   May 8 2014, 02:34
- - Omnicake   А я как раз должен разработать систему, где у зада...   May 8 2014, 03:25
|- - jcxz   Цитата(Omnicake @ May 8 2014, 09:25) А я ...   May 8 2014, 04:54
- - Omnicake   У меня в дескрипторе есть строчка Status которая м...   May 8 2014, 05:06
- - Golikov A.   А... понял где заблуждался. В моей модели реально ...   May 8 2014, 05:07
- - jcxz   Цитата(Golikov A. @ May 8 2014, 11:07) та...   May 8 2014, 06:04


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:32
Рейтинг@Mail.ru


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