WiseLord, насколько я понимаю то wav_header является сам по себе указателем на нулевой байт структуры ? как правильно понимать (uint8_t*)&wav_header) ?
wav_header - структура &wav_header - указатель на неё (uint8_t*)&wav_header - приводим указатель к типу (uint8_t*) *(uint8_t*)&wav_header - читаем по этому указателю число типа uint8_t *((uint8_t*)&wav_header + 5 ) - читаем по (этому указателю + 5 байтов смещение) число типа uint8_t
как обратится, считать данные, к примеру, с 0 или 5 или 30 байта данной структуры ?
нахрена иметь структуру, чтобы потом обращаться к ее данным мимо поименованных полей?! ну берите тогда сырой массив, и обращайтесь, если с указателями траблы или при помощи union совместите массив со структурой и ковыряйтесь там хоть так, хоть эдак
Код:
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;
wav_hader.raw_bytes[15] = 0; // обнуляем 15-й байт в структуре, наплевав на ее поля wav_header.struc_data.audioFormat = 12; // а теперь делаем бяку через поле
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
нахрена иметь структуру, чтобы потом обращаться к ее данным мимо поименованных полей?!
требуется значение полей структуры вывести на LCD 16х2 как я понимаю надо последовательно байт за байтом превращать в строку и выводить на экран если знаете что-то попроще - поправте
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
компилятор начинает ругатся что тип массива str не соответствует выводимому полю структуры
str - это массив символов, т.е. строка. тип выводимого поля должен соответствовать формату вывода, но и только! компилятор не будет ругаться. главное - в str должно быть достаточно места, чтобы влезло полное представление соответствующего числа в виде символов, т.е. для unsigned long не менее 11 байтов.
FreshMan писал(а):
под кажое поле надо свою выводную строку создавать ?
я понятия не имею, как вы планируете выводить на ЖКИ 2х16 кучу полей из заголовка WAV-файла... и зачем это вообще делать... вы правы в одном: каждое поле придется выводить отдельным форматом, соответствующим этому полю, а вот строка-результат, которая будет хранить символьное представление полей, может быть одна и та же.
чтобы меньше ломать голову с выводом на ЖКИ, раз уж вы решили это делать при помощи стандартных функций вывода, я рекомендую воспользоваться моими рекомендациями и работать примерно так:
А какая разница? Какого бы типа ни было поле, приведя его к long, а потом отформатировав sprintf-ом, получите в любом случае строковое представление этого поля.
где-то читал что он в таком случае должен сам определить его размер
Если имелись ввиду конструкции типа:
Код:
char str[] = "фгчтрчгтр";
размер массива будет исчислен с учётом \0 терминатора. Если использовать его как целевой для sprintf, нужно быть уверенным, что его размера хватит, чтобы вместить результат с учётом терминатора. В противном случае переменные, имевшие несчастье быть объявленными за str будут перезаписаны "мусором" без их на то желания.
_________________ Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
Нужно загрузить картинку с флешки, преобразовать контур и сохранить обратно. Лабораторка такая у сестры. В визуал студии с помощью библиотеки CImg мы научились преобразовывать контур Подключаем флешку по этой инстструкции (используя модуль FatFs) https://nagits.wordpress.com/2010/10/18/avr_sd/ И вообщем такие вопросы: 1) Возможно ли подключить CImg к проекту Atmel Studio? 2) Как загрузить bmp картинку в микроконтроллер atmega32? 3) Если 1 или 2 никак не получится сделать (или не целесообразно), то как можно решить задачу по-другому?
1. При большом желании да. Надо учесть отличия компиляторов. При необходимости внести изменения в коды библиотеки. 2. Подключить к проекту для атмеги можно преобразованные файлы через bmp2c или bin2c. Если картинка на внешней флешке, то побайтовым считыванием картинки в ОЗУ контроллера. Затем делайте с картинкой что хотите если вообще памяти контроллера для хранения хватит. Но я бы взял для графики хотя бы атмега64 с внешней микросхемой ОЗУ. 3. CImg похоже для компьютеров без дефицита памяти и производительности. При необходимости можно подсмотреть реализацию нужного алгоритма и написать своё с учётом ресурсов системы.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения