|
Переключение задач на STM32f10x в Keil |
|
|
|
May 7 2014, 02:17
|
Участник

Группа: Участник
Сообщений: 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, мне это не поможет, потому что после выхода оно все равно сбросится на то значение, которое было до входа в прерывание? В общем, возможно, вопросы глупые, но сам до додуматься до решения пока не могуЮ потому прошу совета. Заранее спасибо.
|
|
|
|
|
 |
Ответов
|
May 7 2014, 09:13
|
Участник

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

|
Хорошо, буду искать. Спасибо. Хотя мне казалось что в переключении использовалось прерывания с системного таймера, дабы обеспечивать режим "реального времени", или прерывание PendSV тоже имеет ограничение по времени?
|
|
|
|
|
May 7 2014, 09:44
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Omnicake @ May 7 2014, 15:13)  Хорошо, буду искать. Спасибо. Хотя мне казалось что в переключении использовалось прерывания с системного таймера, дабы обеспечивать режим "реального времени", или прерывание PendSV тоже имеет ограничение по времени? какое ограничение по времени? В прерывании таймера обычно ставится только запрос PendSV. Это чтобы всё переключение делалось в одном месте и не нужны были блокировки. И PendSV должно иметь низший приоритет, ниже любого другого ISR, в том числе таймера, чтобы не мешать работе аппаратных прерываний (не мешать "реальному времени"). Я уже писал об этом выше. А если вы сделаете в таймере, то как раз это будет хуже с точки зрения реалтаймовости, так как переключение будет на уровне приоритета аппаратного прерывания таймера. Цитата(Forger @ May 7 2014, 15:25)  По-моему, значительно проще скачать и изучить уже готовое, под нужде переделав его под себя, чем все это изобретать с нуля  ...тем более когда вы это изобретёте, если всё сделаете правильно, то с удивлением обнаружите, что ваш код полностью совпадает с уже существующим
|
|
|
|
Сообщений в этой теме
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 Я скачал исходники 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 Golikov A. С Си на Асм перейти правда 5 копеек задача, компил... May 7 2014, 19:25 _Артём_ Цитата(Golikov A. @ May 7 2014, 23:25) Ед... May 7 2014, 21:07 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|