Аппаратные и программные



Download 3,23 Mb.
Pdf ko'rish
bet145/179
Sana24.02.2022
Hajmi3,23 Mb.
#234030
TuriУчебное пособие
1   ...   141   142   143   144   145   146   147   148   ...   179
5.2.7 Критические секции 
Внутри критической секции SDCC генерирует код, который запрещает (в 
начале секции) и восстанавливает в исходное состояние (в конце) все 
прерывания. Необходимо помнить, что в большинстве случаев запрещать все 
прерывания слишком накладно. 
int foo () __critical 

... 
... 

Ключевое слово __critical может использоваться совместно с ключевым 
словом reentrant. 
Ключевое слово __critical может использоваться для защиты отдельных 
переменных. 
__critical { i++; } 
5.2.8 Семафоры 
Архитектура MCS51 позволяет проводить атомарные действия над 
битовыми переменными, что позволяет успешно реализовать простой 
бинарный семафор. SDCC генерирует такой код, если используется 
приведенный ниже шаблон исходного текста. 
volatile bit resource_is_free; 
if (resource_is_free) 

resource_is_free=0; 
... 
resource_is_free=1; 

Пример использования бинарного семафора. 


228 
char x = 0; 
volatile bit resource_is_free; 
void sem( void ) 

if (resource_is_free) 

resource_is_free = 0; 
x = 10; 
resource_is_free = 1; 


Генерируемый SDCC код. 
jbc _resource_is_free,00106$ 
ret 
00106$: 
mov _x,#0x0A 
setb _resource_is_free 
ret 
5.2.9 Ассемблерные вставки 
Компилятор SDCC позволяет использовать ассемблерные вставки. 
Попробуем оптимизировать программу, представленную ниже. 
unsigned char __far __at(0x7f00) buf [0x100]; 
unsigned char head, tail; 
void to_buffer( unsigned char c ) 

if( head != (unsigned char)(tail-1) ) buf [ head++ ] = c; 

В примере оптимизированной функции хорошо видно, что для прямого 
включения ассемблерного кода необходимо использовать директивы _asm и 
_endasm. 
void to_buffer_asm( unsigned char c ) 

_asm 
mov r2,dpl 
;buffer.c if( head != (unsigned char)(tail-1)
mov a,_tail 
dec a 
mov r3,a 
mov a,_head 
cjne a,ar3,00106$ 
ret 
00106$: 
;buffer.c buf [ head++ ] = c; 
mov r3,_head 
inc _head 
mov dpl,r3 
mov dph,#(_buf >> 8) 
mov a,r2 
movx @dptr,a 
00103$: 
ret 


229 
_endasm; 

Внутри ассемблерной вставки возможно использование любых директив, 
понятных ассемблеру. 

Download 3,23 Mb.

Do'stlaringiz bilan baham:
1   ...   141   142   143   144   145   146   147   148   ...   179




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish