Код: Выделить всё
*((uint8_t*)&wav_header)
*((uint8_t*)&wav_header + 5)
*((uint8_t*)&wav_header + 30)Код: Выделить всё
*((uint8_t*)&wav_header)
*((uint8_t*)&wav_header + 5)
*((uint8_t*)&wav_header + 30)нахрена иметь структуру, чтобы потом обращаться к ее данным мимо поименованных полей?! ну берите тогда сырой массив, и обращайтесь, если с указателями траблыFreshMan писал(а):как обратится, считать данные, к примеру, с 0 или 5 или 30 байта данной структуры ?
Код: Выделить всё
typedef struct{
char chunkId[4];
char format[4];
char subchunk1Id[4];
unsigned short audioFormat;
unsigned short numChannels;
unsigned long sampleRate;
unsigned long byteRate;
unsigned short blockAlign;
unsigned short bitsPerSample;
char subchunk2Id[4];
unsigned long subchunk2Size;
}HEADER;
typedef union{
unsigned char raw_bytes[sizeof(HEADER)];
HEADER struct_data;
} COMMON_HEADER;
COMMON_HEADER wav_header;
wav_hader.raw_bytes[15] = 0; // обнуляем 15-й байт в структуре, наплевав на ее поля
wav_header.struc_data.audioFormat = 12; // а теперь делаем бяку через полетребуется значение полей структуры вывести на LCD 16х2ARV писал(а):нахрена иметь структуру, чтобы потом обращаться к ее данным мимо поименованных полей?!
Код: Выделить всё
sprintf(str, "SampleRate = %lu", wav_header.SampleRate);согласен, ноARV писал(а):ну так и выводите поля структуры! нафига побайтно-то?
Код: Выделить всё
sprintf(str, "SampleRate = %lu", wav_header.SampleRate);str - это массив символов, т.е. строка. тип выводимого поля должен соответствовать формату вывода, но и только! компилятор не будет ругаться.FreshMan писал(а):компилятор начинает ругатся что тип массива str не соответствует выводимому полю структуры
я понятия не имею, как вы планируете выводить на ЖКИ 2х16 кучу полей из заголовка WAV-файла... и зачем это вообще делать... вы правы в одном: каждое поле придется выводить отдельным форматом, соответствующим этому полю, а вот строка-результат, которая будет хранить символьное представление полей, может быть одна и та же.FreshMan писал(а):под кажое поле надо свою выводную строку создавать ?
Код: Выделить всё
printf_P(PSTR("поле1=%d\nполе2=%d"), поле1, поле2);Код: Выделить всё
sprintf(str, "SampleRate = %lu", (unsigned long)wav_header.SampleRate);так вообще нельзя! str должен быть заведомо бОльшего размера, чем самая длинная строка, формируемая sprintf-ом!FreshMan писал(а):вот только char str[];
а почему компилятор выдает предуприждение когда я делаю безразмерный массив ?ARV писал(а): должно быть char str[24];
я думаю, если вы вспомните, где это читали и найдете ту книжку, ее надо будет бросить в печку - компилятор никому ничего не должен.FreshMan писал(а):где-то читал что он в таком случае должен сам определить его размер
Здесь не так радостно принимают людей как их деньги. © Общаясь с программируюшими на их любимые темы говорите сразу кодом. В противном случае, до наработки вами общей с ними терминологии, будете терять время на выяснение того, что же вы имели ввиду, и того что вы сказали им на самом деле.FreshMan писал(а):а почему компилятор выдает предуприждение когда я делаю безразмерный массив ?
Если имелись ввиду конструкции типа:FreshMan писал(а):где-то читал что он в таком случае должен сам определить его размер
Код: Выделить всё
char str[] = "фгчтрчгтр";1. При большом желании да. Надо учесть отличия компиляторов. При необходимости внести изменения в коды библиотеки.vitalekmail писал(а):Нужно загрузить картинку с флешки,
Только для двухмерного массива.sn = {255, 255, 0, 0},
.gw = {192, 168, 0, 0},
Код: Выделить всё
flash const long int array[2][7]={
.[0]={123,1,2,3,......},
.[1]={123,1,2,3,......}
};
pokk писал(а): На такое компилятор ругается.
Код: Выделить всё
flash const long int array[2][7] = {
{ 123, 1, 2, 3, },
{ 123, 1, 2, 3, }
};
можно ли про инициализировать массив не по порядку
flash const long int array[2][7] = {
{ 123, 1, 2, 3, }, // Эта первая строка
{ 123, 1, 2, 3, } // Это нулевая строка
};