Привет Всем ! Есть вопросики. Стал опримизировать прогу на С (AVR GCC) и сталкнулся с некоторыми непонятными вещами.
- Каким образом закрепить за переменной указателем регистр? Если у нас есть переменная типа char - то все понятно - register unsigned char spiW asm("r3"). Ну а если типа указатель на char ? И я хочу закрепить за регистрами X или Y.
- следующий кусок кода: { *(spi_ptr++) = SPDR; SPDR = packCnt; ++packCnt; } ассемблируется в следующий код (с флагом оптимизации -O3) { *(spi_ptr++) = SPDR; 28e: 7f b1 in r23, 0x0f ; 15 290: 71 93 st Z+, r23 292: f0 93 61 00 sts 0x0061, r31 296: e0 93 60 00 sts 0x0060, r30 SPDR = packCnt; Хотя spi_ptr обьявлен как volatile unsigned char *spi_ptr. Почему же он не обнавляется на каждом витке цикла ? Тоесть в прерываниях я изменяю spi_ptr, а реально он не меняется :( В чём же дело ?
- В том же куске кода непонятно что будет, если произойдет прерывание между инструкциями sts 0x0061, r31 и sts 0x0060, r30 ? тоесть в ячейке