Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Знатокам asm'а: в thumb'е можно как-нибудь "ручками" изменить биты в cpsr I & F?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
abcdefg
В arm-режиме есть соответствующие команды, а в thumb'е ничего не нашел... sad.gif
scifi
В режиме THUMB невозможно прочитать или записать CPSR. Надо переключаться в режим ARM.
abcdefg
Цитата(abcdefg @ Jun 7 2007, 20:23) *
В arm-режиме есть соответствующие команды, а в thumb'е ничего не нашел... sad.gif


Ок, а как бы переключится из user в supervisor, чтобы изменить биты I & F ?
Другими словами, надо глобально включать/выключать прерывания в user mode
zltigo
Цитата(abcdefg @ Jun 8 2007, 09:47) *
Ок, а как бы переключится из user в supervisor,

Только SWI
VslavX
Цитата(abcdefg @ Jun 8 2007, 09:47) *
Ок, а как бы переключится из user в supervisor, чтобы изменить биты I & F ?
Другими словами, надо глобально включать/выключать прерывания в user mode

Из user в supervisor - средствами только процессора - никак. Это и есть основополагающий принцип разделения привилегий. Если код исполняется в режиме user, то это предполагает наличие операционной системы или хотя бы некоторого управляющего монитора. Эти компоненты должны предоставлять хотя бы минимальные сервисы синхронизации - их и следует использовать вместо запрещения прерываний "напрямую".
abcdefg
Цитата(VslavX @ Jun 8 2007, 10:58) *
Это и есть основополагающий принцип разделения привилегий.


Красиво, как в книжке smile.gif
Подскажите тогда как по-правильному сделать семафор для программного FIFO, который заполняется из FIFO UART'а. Uart висит на irq
Задача: блокировать прерывание на время доступа к soft FIFO.
Как было сделано ранее: отлючение битов разрешения прерывания U0IER
Проблема: во время блокировки могут возникнуть другие прерывания irq, и пока контроллер их обрабатывает аппаратный fifo переполняется (16 байт на 115200 ~ 1.3мс)

Сейчас Uart перекинул на fiq (звучит!), но есть какой-то осадок, что "не айс"

Принимаю предложения
vet
а есть ли смысл блокировать программный FIFO?
в случае его реализации двумя указателями чтение модифицирует только указатель на хвост буфера, запись - только указатель на голову, т.е. чтение и запись друг другу не мешают.
Сергей Борщ
Цитата(abcdefg @ Jun 8 2007, 09:47) *
Ок, а как бы переключится из user в supervisor, чтобы изменить биты I & F ?
Другими словами, надо глобально включать/выключать прерывания в user mode
Из User Mode, как заметил zltigo, только SWI. Но если вам в User Mode все равно надо дергать CPSR, то может стоит работать не в User Mode, а в System Mode? В System Mode в режиме ARM доступен CPSR и вы можете включать/выключать прерывания следующим образом: командой BX переход из THUMB в ARM, в режиме ARM запрет/разрешение, командой BX переключение обратно в THUMB.
abcdefg
Цитата(vet @ Jun 8 2007, 13:16) *
а есть ли смысл блокировать программный FIFO?
в случае его реализации двумя указателями чтение модифицирует только указатель на хвост буфера, запись - только указатель на голову, т.е. чтение и запись друг другу не мешают.


Эээ, чего то я перемудрил 07.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.