Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Пользователю -> Евстифеев А.В. -> "Микроконтроллеры семейства" -> 98

Микроконтроллеры семейства - Евстифеев А.В.

Евстифеев А.В. Микроконтроллеры семейства — Infineon, 2007. — 318 c.
Скачать (прямая ссылка): microkontrolleri2007.pdf
Предыдущая << 1 .. 92 93 94 95 96 97 < 98 > 99 .. 100 >> Следующая


19.1 Операции со стеком

С167 поддерживает два типа стека. Системный стек используется микроконтроллером и расположен во внутренней RAM. Пользовательский стек используется для хранения пользовательских данных в стеке во внутренней либо внешней RAM. Для обеих типов стека характерным является рост стека от больших к меньшим адресам.

Внутренний системный стек

Системный стек предназначен для хранения векторов возврата, указателей сегмента, состояния процессора при работе в подпрограммах прерываний. Текущее значение вершины стека хранится в регистре указателя стека (SP). При записи новых данных в стек значение указателя декрементируется. При чтении данных из стека значение указателя инкрементируется.

Также возможно использование системного стека для временного хранения данных или для пересылки данных между задачами или подпрограммами. Однако в большинстве случаев система хранения данных в банках регистров обеспечивает лучшую производительность при пересылки данных между задачами.

14-19 МЭИ, Центр Промышленной Электроники Фирмы Infineon

Режимы пониженного энеpгoпoтpебления/C167

Примечание: В системном стеке возможно сохранение только слов данных. Для хранения байтов данных необходимо либо произвести перевод их в формат слов, либо не обращать внимание на другой байт слова.

Для обнаружения переполнения или опустошения стека предназначены два регистра: STKOV и STKUN. При обнаружении переполнения или опустошении срабатывают соответствующие ловушки.

Примечание: В случае программного изменения значения указателя стека, не происходит сравнения с STKOV или STKUN.

Во многих случаях по адресам векторов ловушек переполнения или опустошения стека располагают команду программного RESET (SRST).

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

Циркулирующий (виртуальный) стек

Этот способ использования стека позволяет сохранять значение стека при достижении им максимального значения. В этот момент часть данных стека должна быть сохранена во внешней памяти, для того чтобы освободить пространство для последующего заполнения стека. Эта процедура называется flushing стека. После выполнения некоторого количества возвратов из подпрограмм или после выполнения нескольких команд pop стек опустошается. При этом имеет место ловушка по опустошению стека, и необходимо осуществить возврат ранее сохраненных данных в стек из внешней памяти. Эта процедура называется filling стека. Так как большое количество вложенных подпрограмм имеет место достаточно редко, то flushing и filling случаются достаточно редко. В тех программах, где данные события происходят довольно часто, не следует употреблять эту структуру, так как при этом резко замедляется выполнение основной программы.

Основной способ изменения области виртуального стека базируется на изменении значений регистров SP, STKOV и STKUN. Изменение значений этих регистров необходимо для определения физической области стека во внутренней RAM для аппаратного обеспечения. Для области виртуального стека можно указать все возможные области адреса OOCFOOOh -OOCFFFEh. При этом значения регистров STKOV и STKUN должны лежать в том же 4Кбайтном пределе.

Размер физической области стека во внутренней RAM определяется в битовом поле STKSZ регистра SYSCON.

14-4 МЭИ, Центр Промышленной Электроники Фирмы Infineon

Системное программирование /С167

<STKSZ> Размер стека Адреса во внутренней RAM Значащие биты указателя стека
0 0 0 256 00CFBFE+... 00^А00н (по умолчанию) SP.8... SP.0
0 0 1 128 00FBFE+... 00Л)В00н SP.7... SP.0
0 1 0 64 00FBFE+... 00Л)В80н SP.6... SP.0
0 1 1 32 00FBFE+... 00FBC0+ SP.5... SP.0
1 0 0 512 00FBFE+... 00^800+ SP.9... SP.0
1 0 1 — Зарезервировано. Не использ. —
1 1 0 — Зарезервировано. Не использ. —
1 1 1 1024 00FDFE+... 00^600+ (не циркулирующий стек) SP. 11. SP.0

Адреса виртуального стека преобразуются в физические адреса посредством совмещения значащих битов указателя стека SP с значащими битами верхнего предела области физического стека (00FBFE+). Это совмещение производится аппаратно.

После RESET значения всех трех регистров направлены в область физического стека и позволяют использовать без изменений область стека на 256 слов (STKOY = FCOOh, STKUN = FCOOh, SP = FCOOh, STKSZ = 000в).

FBFEl

FB7E,


1111 10 11 1 111 1110
I
|1 1 1 1 10 11 1 0 0 0 0 0 0 o|
t
1111 1011 1 0 0 0 0 0 00
After PUSH
1111 10 11 1 111 1110
і
|1 1 1 1 10 11 1 111 1110
I
1111 1011 0 111 1110

FBFEl


1111 10 1 1 1111 1110
I
1111 10 1 0 0000 0000

1111 100 0 0000 0000
After PUSH
1111 10 1 1 1111 1110
I
1111 10 1 1 1111 1110

1111 0 11 1 1111 1110
256 words

<SP> F7FE| І 64 words Stack Size
Предыдущая << 1 .. 92 93 94 95 96 97 < 98 > 99 .. 100 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100