Чт апр 29, 2021 20:21:28
Чт апр 29, 2021 21:33:40
Чт апр 29, 2021 23:02:29
Пт апр 30, 2021 05:47:22
*(volatile uint8_t *)&CRC32->DI32 = *ptr++;
Пт апр 30, 2021 06:59:01
Вс май 02, 2021 11:08:31
extern uint32_t _sidata[], _sdata[], _edata[];
for(uint32_t *pSrc=_sidata, *pDst=_sdata; pDst!=_edata; *pDst++=*pSrc++);
extern uint32_t _sbss[], _ebss[];
for(uint32_t *pDst=_sbss; pDst!=_ebss; *pDst++=0);
extern uint8_t _sidata[], _sdata[], _edata[];
memcpy(_sdata, _sidata, _edata-_sdata);
extern uint8_t _sbss[], _ebss[];
memset(_sbss, 0, _ebss-_sbss);
for(volatile uint32_t *pSrc=_sidata, *pDst=_sdata; pDst!=_edata; *pDst++=*pSrc++);
for(volatile uint32_t *pDst=_sbss; pDst!=_ebss; *pDst++=0);
Ср май 19, 2021 22:18:22
Пт май 28, 2021 20:26:55
Пт май 28, 2021 21:26:28
или подключить к земле, - используя параметр INPUT_PULLUP?
или может все незадействованные ноги ардуино посадить на минус, чтобы не ловили помехи какие-нибудь
3 метра подключен к ардуине, может из за этого виснуть?
Вт июн 08, 2021 11:10:31
Вт июн 08, 2021 14:09:31
Вт июн 08, 2021 15:29:21
Ср июн 09, 2021 13:44:20
Ср июн 09, 2021 15:11:12
Пн июн 14, 2021 10:33:50
ISR(TIMER1_OVF_vect){
static uint8_t entry;
static uint8_t pos;
static pos_t *scr = screen;
regs_t regs;
// считаем входы
if(++entry >= IND_RPT){
entry = 0;
// каждые 2 мс
two_ms++;
// смена разряда
scr++;
if(++pos >= POS_CNT){
pos = 0;
scr = screen;
}
regs.word = _BV(11+pos);
}
// готовим один из двух символов для вывода
regs.word &= 0xf800;
regs.word |= digs[scr->symbol[entry >= scr->bright]];
// выдача в сдвиговые регистры через SPI
SPDR = regs.bytes[1];
while(bit_is_clear(SPSR, SPIF));
SPDR = regs.bytes[0];
while(bit_is_clear(SPSR, SPIF));
// строб для защелкивания данных
PORTB |= LOAD_PIN;
PORTB &= ~LOAD_PIN;
}
typedef union{
uint8_t bytes[2]; // 2 байта для выдачи в регистры
uint16_t word;
} regs_t;
Пн июн 14, 2021 12:32:02
Пн июн 14, 2021 12:42:13
да, но что в таком случае может происходить? только то, что основной цикл станет выполняться очень медленно, а динамическая индикация продолжится, хоть и с некоторыми артефактами вроде разной яркости разрядов.WiseLord писал(а):Но не может ли быть так, что доступ к "статической" структуре получается с точки зрения ассемблера более длинным, что в итоге является той каплей, что прерывание не успевает выполниться за нужное время?
Пн июн 14, 2021 13:41:43
Пн июн 14, 2021 16:13:51
а вы посмотрите внимательно:jcxz писал(а):Что тут непонятного?
SPI работает на частоте вдвое меньше тактовой, т.е. передача 1 байта требует 16 тактов - пока исполнится код, организующий ожидание, пройдет половина этого интервала.jcxz писал(а):Ожидание завершения передачи по SPI в while() внутри ISR - это конечно верх быдлокодинга
Вт июн 15, 2021 07:06:30
regs.word &= 0xf800;
regs.word |= digs[scr->symbol[entry >= scr->bright]];