Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Можно просто привести к тому типу, что в формате заявлен:

Код: Выделить всё

sprintf(str, "SampleRate = %lu", (unsigned long)wav_header.SampleRate);
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

согласет
вот только char str[];
а поля структуры имеют тип намного больше char
Tell Me The Truth
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

А какая разница? Какого бы типа ни было поле, приведя его к long, а потом отформатировав sprintf-ом, получите в любом случае строковое представление этого поля.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

FreshMan писал(а):вот только char str[];
так вообще нельзя! str должен быть заведомо бОльшего размера, чем самая длинная строка, формируемая sprintf-ом!

т.е. для sprintf(str, "SampleRate = %lu", (unsigned long)wav_header.SampleRate); должно быть char str[24];
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

понемного начинает приходить понимание :)
ARV писал(а): должно быть char str[24];
а почему компилятор выдает предуприждение когда я делаю безразмерный массив ?
где-то читал что он в таком случае должен сам определить его размер
Tell Me The Truth
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

FreshMan писал(а):где-то читал что он в таком случае должен сам определить его размер
я думаю, если вы вспомните, где это читали и найдете ту книжку, ее надо будет бросить в печку - компилятор никому ничего не должен.

массив "пустого размера" - это обычный УКАЗАТЕЛЬ. память, на которую он будет указывать - это проблема программиста.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Сообщение Siarzhuk »

FreshMan писал(а):а почему компилятор выдает предуприждение когда я делаю безразмерный массив ?
Здесь не так радостно принимают людей как их деньги. © Общаясь с программируюшими на их любимые темы говорите сразу кодом. В противном случае, до наработки вами общей с ними терминологии, будете терять время на выяснение того, что же вы имели ввиду, и того что вы сказали им на самом деле. :) Иными словами: -"Какой код, и что сказал компилятор?"
FreshMan писал(а):где-то читал что он в таком случае должен сам определить его размер
Если имелись ввиду конструкции типа:

Код: Выделить всё

char str[] = "фгчтрчгтр";
размер массива будет исчислен с учётом \0 терминатора. Если использовать его как целевой для sprintf, нужно быть уверенным, что его размера хватит, чтобы вместить результат с учётом терминатора. В противном случае переменные, имевшие несчастье быть объявленными за str будут перезаписаны "мусором" без их на то желания. ;)
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Родился
Сообщения: 6
Зарегистрирован: Вс янв 29, 2017 20:16:32

Сообщение vitalekmail »

Нужно загрузить картинку с флешки, преобразовать контур и сохранить обратно. Лабораторка такая у сестры. В визуал студии с помощью библиотеки CImg мы научились преобразовывать контур :)
Подключаем флешку по этой инстструкции (используя модуль FatFs) https://nagits.wordpress.com/2010/10/18/avr_sd/
И вообщем такие вопросы:
1) Возможно ли подключить CImg к проекту Atmel Studio?
2) Как загрузить bmp картинку в микроконтроллер atmega32?
3) Если 1 или 2 никак не получится сделать (или не целесообразно), то как можно решить задачу по-другому?
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

vitalekmail писал(а):Нужно загрузить картинку с флешки,
1. При большом желании да. Надо учесть отличия компиляторов. При необходимости внести изменения в коды библиотеки.
2. Подключить к проекту для атмеги можно преобразованные файлы через bmp2c или bin2c. Если картинка на внешней флешке, то побайтовым считыванием картинки в ОЗУ контроллера. Затем делайте с картинкой что хотите если вообще памяти контроллера для хранения хватит. Но я бы взял для графики хотя бы атмега64 с внешней микросхемой ОЗУ.
3. CImg похоже для компьютеров без дефицита памяти и производительности. При необходимости можно подсмотреть реализацию нужного алгоритма и написать своё с учётом ресурсов системы.
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Подскажите, можно ли про инициализировать массив не по порядку, а выборочно указать элементы инициализации
примерно как в структуре
.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,......}
};
На такое компилятор ругается.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

pokk писал(а): На такое компилятор ругается.

Код: Выделить всё

	flash const long int array[2][7] = {
			{ 123, 1, 2, 3, },
			{ 123, 1, 2, 3, }
	};
«И всё-таки она вертится!»
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Apparatchik, это и так понятно. акцент был
можно ли про инициализировать массив не по порядку
flash const long int array[2][7] = {
{ 123, 1, 2, 3, }, // Эта первая строка
{ 123, 1, 2, 3, } // Это нулевая строка
};
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Нельзя.
Инициализируйте в начале программы, в лоб.
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

А почему в структуре так можно ?
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Не знаю. Это, скорее, вопрос к авторам языка, почему они разрешили :)
Они наверняка даже и не думали, что кто-нибудь спросит "почему можно ?" :)
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Если компилятор - GCC, то есть разные интересные способы инициализации вроде

Код: Выделить всё

int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

WiseLord писал(а):Если компилятор - GCC, то есть разные интересные способы инициализации
в том числе и не по порядку

Код: Выделить всё

int widths[] = { [10 ... 99] = 2, [100] = 3, [1 ... 9] = 1, [0] = 123 };
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Сообщения: 289
Зарегистрирован: Пт мар 20, 2009 12:25:47
Откуда: Ivanovo

Сообщение spongebob »

A[0]={1,2,3...} ?
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Посоветуйте С/С++ редактор с автозавершением

Codevision и AVRStudio4 как таковых плюшек не имеют, ну разве что примитивная подсветка синтаксиса.
Keil 4 уже лучше, но с перечислениями в битовых полях структур тоже что-то не так.

Например код в заголовочном файле:

Код: Выделить всё

typedef enum{ 
	ADPS_DIV2=1,
	ADPS_DIV4=2,
	ADPS_DIV8=3,
	ADPS_DIV16=4,
	ADPS_DIV32=5,
	ADPS_DIV64=6,
	ADPS_DIV128=7
}ADPS_t;

typedef struct{
	ADPS_t ADPS:3;
	char ADIE:1;
	char ADIF:1;
	char ADATE:1;
	char ADSC:1;
	char ADEN:1;	
}ADCSRA_t;

#define ADCSRAs ((__IO ADCSRA_t *) 0x26)
Я в программе пишу

Код: Выделить всё

void main(void)
{
	ADCSRAs->[вот тут должен вывалиться список ADPS...ADEN]=[тут тоже должен появиться список значений ADPS_DIV];
}
В идеале хотелось бы что-то легкое и простое типа Notepad++. И вообще что сейчас годное есть?
Вложения
autocompletion.PNG
(12.54 КБ) 348 скачиваний
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

uk8amk писал(а):Посоветуйте С/С++ редактор с автозавершением
Уже на протяжении многих лет применяю и всем советую IDE Eclipse. Это, конечно, редактором назвать можно с определенной натяжкой, это 100% IDE, и не очень легковесная... Но по сравнению с MS Visual Studio просто перышко.

Сам пользуюсь Eclipse Mars 2, более новые стали сильнее ориентироваться на Java-разработчиков и имеют всякие странные эффекты при работе с Си.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Ответить

Вернуться в «Разные вопросы по МК»