|
Переключение задач на 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, 19:25
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
С Си на Асм перейти правда 5 копеек задача, компильнул и смотри листинг, обратно муторно, а впрямую то нет проблем.
Пользуясь случаем выражаю благодарность за расписание работы диспетчера, мне сейчас не надо, но для общего развития полезно, такое объяснение на пальцах - хорошее подспорье, если вдруг понадобится.
Единственный момент, мне казалось что переключение задач запускает все же таймер, время отведенное на задачу определяет приоритет потока, так? То есть по выходу интервала таймера он ставит флаг PendSV, и уже тот вызвавшись все делает, так?
|
|
|
|
|
May 7 2014, 21:07
|
Гуру
     
Группа: Свой
Сообщений: 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 переключает, если вызовут...
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|