Помогите понять
#define BMP_BUFF_SIZE 128 // для флехи мне надо 256 байт чтобы записать страницу
//поэтому сделал 128 ... вывод на экран использует uint16_t
uint8_t SD_BUFF[BMP_BUFF_SIZE * 3];
uint16_t BMP_BUFF[BMP_BUFF_SIZE];
uint8_t w_buf[256] = {0,};
while (BMP_SIZE > 0) //размер нашего рисунка uint32_t
{
fresult = f_read(&fil, SD_BUFF, sizeof(SD_BUFF), &bytesRead);
BMP_SIZE = BMP_SIZE - bytesRead;
j = 0;
// читаем блок 128 значений по 2 байта итого 256 байт
// создаем 2 байта цвета из 3 байтов RGB565
for (i = 0; i < BMP_BUFF_SIZE; i++)
{
BMP_BUFF[i] = Color_To_565(SD_BUFF[j + 2], SD_BUFF[j + 1],SD_BUFF[j]);
//создаем однобайтный буфер для флешки из двух байтного
// пытался привести uint16_t BMP_BUFF к однобайтному буферу что-то не вкатило
// делал (uint8_t*)BMP_BUFF
uint8_t lowByte = (uint8_t) (BMP_BUFF[i] & 0xff);
uint8_t highByte = (uint8_t) ((BMP_BUFF[i] >> 8) & 0xff);
w_buf[yi]= HighByte; yi++;
w_buf[yi]= lowByte; yi++;
j = j + 3;
}
yi=0;
//сравнивал BMP_BUFF и w_buf по значениям одинаковые .. может перепутаны младший
//байт и старший, но в данном случае неважно т.к все равно не пишет никаких... только //00. Флешка перед записью очищена до FF а при чтени 00
а вот дальше тут косяк не разберусь … запутался с указателями и размерностью
функция
void W25qxx_WritePage(uint8_t *pBuffer, uint32_t Page_Address, uint32_t OffsetInByte, uint32_t NumByteToWrite_up_to_PageSize);**
требует указатель на однобайтный массив , но почему-то его не записывает… точнее записывает 0 …
приведением буфера uint16_t BMP_BUFF[128] не получилось не знаю почему … делал так
W25qxx_WritePage((uint8_t*)BMP_BUFF,y0,0,256);
пробую отдельный буфер именно однобайтный , но тоже не записывает , хотя в в буфере нормальные данные
W25qxx_WritePage((uint8_t*)w_buf,y0,0,256);
LCD_DrawImage(0, 0, (uint16_t) BMP_INFO.bcWidth, (uint16_t) BMP_INFO.bcHeight, (const uint16_t*) BMP_BUFF, BMP_BUFF_SIZE);
y0++;
}
Сама картика рисует в норме
LCD_DrawFullScreen(RED);
uint8_t i_buf[65736] = {0,};
for (uint8_t t0=0;t0<13;t0++) //12 блоков это вся картинка по блочно (65536 байт)
{
W25qxx_ReadBlock(i_buf, t0, 0,65536); читаю из флешки блок 65536 байт
LCD_DrawImage(0, 40*(t0), 800,40,(uint16_t*)i_buf,
32768); // записываю блок в экран приведя его к uint16 поэтому 32768
//Экран окрашивает весь в белый цвет т.е читает FFFF видимо записывается в экран то что во флешки при стерании
вопрос
почему не пишет ...
почему не сработало `W25qxx_WritePage((uint8_t*)BMP_BUFF,y0,0,256);` хотя может и работает но т.к не пишет то считал что не работает
`W25qxx_WritePage((uint8_t*)w_buf,y0,0,256);`
с указателем тут запутался ... может он и не нужен у меня же не uint8_t* w_buf[256] = {0,};
спасибо