Аппаратные и программные средства встраиваемых систем



Pdf көрінісі
бет219/268
Дата07.01.2022
өлшемі3,23 Mb.
#18255
1   ...   215   216   217   218   219   220   221   222   ...   268
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 
 


Достарыңызбен бөлісу:
1   ...   215   216   217   218   219   220   221   222   ...   268




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет