при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Код: Выделить всё
ws281x_send();Код: Выделить всё
while(1)
{
ws281x_send();
}Код: Выделить всё
memset(DMABuffer, 0, (sizeof(DMABuffer))); // очистить буфер дма для сигнала сбросКод: Выделить всё
WS2812B_DMA_CHANNEL->CNDTR = sizeof(DMABuffer);
// DMA1 Channel1 enable
WS2812B_DMA_CHANNEL->CCR |= DMA_CCR1_EN;
// clear counter for clean start
WS2812B_TIM->CNT = 0;
WS2812B_TIM->CCR1 = 0;
// Enable Timer
WS2812B_TIM->CR1 |= TIM_CR1_CEN;
Код: Выделить всё
if(isr & WS2812B_DMA_IT_HT)
{
*((uint64_t*)&DMABuffer[0]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].g]);
*((uint64_t*)&DMABuffer[8]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].r]);
*((uint64_t*)&DMABuffer[16]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].b]);
DMABuffer[24] = 0;
}
else
{
*((uint64_t*)&DMABuffer[25]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].g]);
*((uint64_t*)&DMABuffer[33]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].r]);
*((uint64_t*)&DMABuffer[41]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].b]);
DMABuffer[49] = 0;
}Код: Выделить всё
*((uint64_t*)&DMABuffer[25]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].g]);Код: Выделить всё
for (int x = 0; x < 32; x++)
{
uint8_t pixels = VRAM[pixelsOffset++];
uint8_t attr = VRAM[attrOffset++];
uint32_t index = scrTableIndex[pixels];
uint32_t addr = (uint32_t)scrTable8 + 564 * (attr & 0x7F) + index;
auto p = (volatile uint64_t*)addr;
*buf++ = p[0];
*buf++ = p[1];
}Код: Выделить всё
printf("\n");Код: Выделить всё
*((uint64_t*)&DMABuffer[0]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].g]);Код: Выделить всё
*((uint64_t*)&DMABuffer[0]) = *((uint64_t*)&tablica[pixeld[pixel_cnt].g]);но я могу таблицу выровнять __attribute__((aligned(1024))) ?Reflector писал(а):а memcpy пытается оптимизировать и должен проверять можно ли копировать по 32 бита, если нельзя, то вероятно копирует побайтно, что еще медленнее.
можно поподробнее?Reflector писал(а):Был бы у них тип uint64_t, как я предлагал сделать