ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
42168 Топик полностью
ReAl (21.10.2005 21:06, просмотров: 1) ответил _igor_U_ на В avr gcc можно ли проще объявить ассмовую вставку, чем это сделал я?
Да вроде бы проще нельзя. А надо? :-) Я бы вообще написал 
inline uint8_t __save_interrupt(void) {
    uint8_t old_sreg = SREG;
    cli();
    return old_sreg;
}

inline void __restore_intrreupt(uint8_t old_sreg) {
    SREG = old_sreg;
}
воспользовавшись уже имеющимся в avr/interrupt.h макросом cli() Кстати, вполне недурственно и так (подсмотрено в рассылке avr-gcc-list)
#define ATOMIC_CODE(_code_) do {\
   uint8_t __atomic_code_sreg__ = SREG; \
   cli(); \
   { _code_ } \
   SREG = __atomic_code_sreg__; \
} while(0)

  ATOMIC_CODE( 
    OCR3A = TCNT3 + ocr3_step; 
    *ptr++ = TCNT1;
  );