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

 
 
> Как урезать exception stacking для Cortex-M4F
jcxz
сообщение Apr 24 2015, 04:31
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Подскажите: где в M4F устанавливается размер сохраняемого контекста при exception stacking-е?
У M3 и M4 (без F) он фиксированный и равен 8 словам. Но для M4F он опционально (вроде как опционально?) может включать регистры FPU (дополнительно 18 слов).
У меня сейчас в стэкинг пишутся регистры FPU. Мне это не нужно (FPU в ISR не нужен, а для задач ОС есть своё сохранение регистров FPU при переключении задачи).
Что-то навскидку не могу найти по мануалу - где конфигурится размер стэкинга. Ткните носом плиз!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Apr 24 2015, 07:35
Сообщение #2


Гуру
******

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



что-то из этой фразы не очевидно что место под регистры будет всегда выделено...
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 24 2015, 07:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Apr 24 2015, 10:35) *
что-то из этой фразы не очевидно что место под регистры будет всегда выделено...

Ну да, был не прав. Там написано, что в зависимости от состояния 3-х битов в 2-х регистрах может быть выделено, а может и нет.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 24 2015, 07:58
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Везде в мануале так пишут, что как будто место под FPU-регистры может выделяться, а может и нет. Но как это переключить - не понятно.
В порту uCOS для M4F тоже кстати при описании фрейма стека при переключении задач так описывают, как будто можно не выделять место под FPU.
Ниже выдержка из описания стековых фреймов задач в uCOS. Как раз верхние 8 слов соответствуют стэкингу в M3 (картинки a и cool.gif.
Порт использует сохранённые стэкингом значения регистров не перемещая их, а просто программно дописывает R4-R11. Видно на картинке (a).
На картинке ( b ) для M4F то же самое как будто, а снизу после дописываются программно регистры FPU S0-S31, FPSCR (в коде этот кусок есть - так и есть).
CODE
* (3) There are two different stack frames depending on whether the Floating-Point(FP)
* co-processor is enabled or not.
*
* (a) The stack frame shown in the diagram is used when the FP co-processor is not present and
* OS_TASK_OPT_SAVE_FP is disabled. In this case, the FP registers and FP Status Control
* register are not saved in the stack frame.
*
* ( b ) If the FP co-processor is present but the OS_TASK_OPT_SAVE_FP is not set, then the stack
* frame is saved as shown in diagram (a). Moreover, if OS_TASK_OPT_SAVE_FP is set, then the
* FP registers and FP Status Control register are saved in the stack frame.
*
* (1) When enabling the FP co-processor, make sure to clear bits ASPEN and LSPEN in the
* Floating-Point Context Control Register (FPCCR).
*
* +------------+ +------------+
* | | | |
* +------------+ +------------+
* | xPSR | | xPSR |
* +------------+ +------------+
* |Return Addr | |Return Addr |
* +------------+ +------------+
* | LR(R14) | | LR(R14) |
* +------------+ +------------+
* | R12 | | R12 |
* +------------+ +------------+
* | R3 | | R3 |
* +------------+ +------------+
* | R2 | | R0 |
* +------------+ +------------+
* | R1 | | R1 |
* +------------+ +------------+
* | R0 | | R0 |
* +------------+ +------------+
* | R11 | | R11 |
* +------------+ +------------+
* | R10 | | R10 |
* +------------+ +------------+
* | R9 | | R9 |
* +------------+ +------------+
* | R8 | | R8 |
* +------------+ +------------+
* | R7 | | R7 |
* +------------+ +------------+
* | R6 | | R6 |
* +------------+ +------------+
* | R5 | | R5 |
* +------------+ +------------+
* | R4 | | R4 |
* +------------+ +------------+
* (a) | FPSCR |
* +------------+
* | S31 |
* +------------+
* .
* .
* .
* +------------+
* | S1 |
+------------+
* | S0 |
* +------------+
* ( b )

Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 24 2015, 08:01
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(jcxz @ Apr 24 2015, 10:58) *
Везде в мануале так пишут, что как будто место под FPU-регистры может выделяться, а может и нет. Но как это переключить - не понятно.

Чего там непонятного? Вы мануал пробовали читать? Я даже ссылку давал.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 24 2015, 08:05
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(scifi @ Apr 24 2015, 14:01) *
Чего там непонятного? Вы мануал пробовали читать? Я даже ссылку давал.

Непонятно как включить или отключить выделение места под регистры FPU при стэкинге.
Если Вы так хорошо умеете читать мануал, то скажите как мне получить состояние 4-го бита EXC_RETURN равное ==1 ???
Вы мануале вроде как указано, что он может принимать разные значения.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:50
Рейтинг@Mail.ru


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