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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Serzh2000
Опытный кот
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

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

Сообщение Serzh2000 »

СпойлерИзображение
с минусом десятичные числа в регистр 10h (Aging offset) нельзя записать только в формате двоичного целого числа со знаком с дополнением до 2, где бит 7 представляет бит знака числа.

помогите сделать конвертацию из десятичных в двоичное число с дополнение до двух и обратно

вот пример конвертации десятичные в двоично-десятичный код

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

// конвертируем обычные десятичные значения в двоично-десятичный код:
byte decToBcd(byte val){
  return( (val/10*16) + (val%10) );
}
// конвертируем двоично-десятичный код в обычные десятичные значения:
byte bcdToDec(byte val){
  return( (val/16*10) + (val%16) );
}
а мне нужно конвертацию из десятичных в с двоичное число с дополнение до двух и обратно

или я чета не понимаю... если вы говорите ВОТ ТАК И ЭТО ПРОСТО.
В чём неудобство? Наоборот же, никаких не нужно преобразований - складывай-вычитай-умножай-не-хочу. Положительное записать - Wire.write(12), отрицательное - Wire.write(-12).
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="Serzh2000",url="/forum/viewtopic.php?p=4669745#p4669745"]а мне нужно конвертацию из десятичных в с двоичное число с дополнение до двух и обратно[/uquote]Вы вообще читаете что вам пишут? Раз пять написали, что не надо ничего конвертировать. Переменная типа int8_t хранит в себе данные в нужном формате.
Аватара пользователя
Serzh2000
Опытный кот
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

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

Сообщение Serzh2000 »

https://dzen.ru/a/XuIx2Lo4HTaLhFKM
ААААААААААААААААААААА :shock:
Я ПОНЯЛ наверно если число int8_t 1 байт -128… 127 Целые числа
оно само как надо пишется, мая ошибка была то что я читал не все байты почему-то :dont_know:
Aging_off = (Wire.read() & 0x7f);// читаем байты

а надо все Aging_off = (Wire.read() & 0xff);// читаем байты –

Добавлено after 41 second:
да да дошло, спасибо.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

" & 0xff" - вообще лишняя "деталь". эта "маска" никак не изменяет само число.
"дополнение до 2" - это образное выражение, и не соответствует действительности.
а в общем случае, чтобы получить отрицательное число, нужно из 0 (а не из 2) вычесть положительное число.
например, есть положительное число 5.
0 - 5 = -5.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Вообще, не образное, а алгоритм получения представления отрицательного числа "на бумажке". В процессоре/контроллере оно автоматически так работает.
Аватара пользователя
Serzh2000
Опытный кот
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

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

Сообщение Serzh2000 »

позвольте еще спросить :)))
когда выставляешь врем в часах, как сделать мигание одним из значений времени. :dont_know:

в библиотеке iarduino_RTC это ест, но я не знаю где в ней искать эту
функцию gettime() с синтаксисом void blinktime(uint8_t value, float frequency = 1)
https://iarduino.ru/file/235.html?yscli ... 9488429175 //библиотека iarduino_RTC

или можно самому как то написать функцию blinktime(); :solder:
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Как и чем может мигать библиотека, работающая с микросхемой часов ?
Мигать же можно только на дисплее. Ну, или светодиодом :))
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Устанавливаете Notepad++, вставляете все файлы в программу, нажимаете CTRL+F и выполняете поиск по всем файлам.
3 секунды, 8 щелчков мыши. Файл iarduino_RTC.h, строка 76.
СпойлерИзображение
Аватара пользователя
Serzh2000
Опытный кот
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

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

Сообщение Serzh2000 »

Устанавливаете Notepad++, вставляете все файлы в программу, нажимаете CTRL+F и выполняете поиск по всем файлам.
спасибо понял. но blinktime(uint8_t value, float frequency = 1) мне не подходит он мигает с одинаковыми интервалами... :(

Добавлено after 4 hours 2 minutes 55 seconds:
решено! :))) может кому интересно.
не надо никаких функций делать просто вставляете в то место чем мигать собрались и все!!!
(millis() & 512) ? Now_Minute / 10 : '0'
Спойлерcase 2: { //= Режим установки минут

Now_Minute = PressingButton(Now_Minute, 0, 59);

//стало
DigitOut(Now_Hour / 10, Now_Hour % 10,(millis() & 512) ? Now_Minute / 10 : 'PROBEL', (millis() & 512) ? Now_Minute % 10 : 'PROBEL', 0, led_color);

// было
//DigitOut(Now_Hour / 10, Now_Hour % 10, Now_Minute / 10, Now_Minute % 10, 0, led_color); // Вывод на диоды

if (minute != Now_Minute){minute = Now_Minute; setRTC_minute();}

break;}
хотя и мигает с одним интервалом :roll:
Аватара пользователя
muravei_
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Чт май 20, 2021 13:33:05

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

Сообщение muravei_ »

Переписываю библиотеку с ESP32 . В процессе обнаружилось непонимание компилятором GCC констант вида : 0b00000000, причем в main , к которому ее пытаюсь подключать проблем нет , они в .h библиотеки . Какой заголовочник надо добавить в него? Сейчас в ней stdbool.h и stdint.h.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

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

Сообщение Adrift »

[uquote="muravei_",url="/forum/viewtopic.php?p=4740306#p4740306"]В процессе обнаружилось непонимание компилятором GCC констант вида : 0b00000000[/uquote]
С++ такие префикс поддерживает начиная с С++14, а в C они появились только в С23, но на уровне GNU-расширений 0b уже очень давно работает, т.е. по идее достаточно просто добавить -std=gnu17 или какая там у вас версия стандарта...

ps. Проверил у себя на gcc 14 и ему вообще без разницы какие ключи, 0b работает всегда )
Nranddek
Вымогатель припоя
Сообщения: 598
Зарегистрирован: Сб авг 09, 2025 22:08:28

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

Сообщение Nranddek »

Adrift, вопрошающий уверяет, что не понимает именно компилятор. Учитывая, что он не прикладывает образец своего переписывания, нет повода для сомнения в его словах. И он спрашивал "Какой заголовочник надо добавить в него?" а не это вот всё ;)
Аватара пользователя
muravei_
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Чт май 20, 2021 13:33:05

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

Сообщение muravei_ »

Попробую еще раз:
[uquote="muravei_",url="/forum/viewtopic.php?p=4740306#p4740306"]причем в main , к которому ее пытаюсь подключать проблем нет , они
(проблемы) в .h библиотеке .[/uquote]
Компилятор "понимает" их в main , и не понимает в заголовочнике библиотеки. В main есть #include "biblioteka.h" (вымышлено)
Nranddek писал(а): а не это вот всё
Да ! :)
Например , если из biblioteka.h удалить stdint.h , то компилятор в ней не понимает и uint8_t , uint16_t , итд . А в маин -понимает.
Значит в ней не хватает заголовочника или макроса.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

muravei_, приведите сообщение об ошибке.
Аватара пользователя
muravei_
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Чт май 20, 2021 13:33:05

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

Сообщение muravei_ »

Не много не доглядел , это варнинг , их так много , в перемешку с ошибками.
warning: binary constants are a C23 feature or GCC extension
Хотелось бы устранить причину.

Возможно, устранил.
Библиотечный CMakeLists.txt дописал. - Ну не думал я ,что он такой тупой! :o
Nranddek
Вымогатель припоя
Сообщения: 598
Зарегистрирован: Сб авг 09, 2025 22:08:28

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

Сообщение Nranddek »

пишите в классическом стандарте Си, либо игнорируйте предупреждение, либо не используйте подобные константы (я вот не использовал, не использую и не планирую, и как-то живу ;) ) либо отключить предупреждение, правда, вряд ли его можно избирательно отключить, скорее всего, отвалятся все подобные, предупреждающие о несоответствии стандартов
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

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

Сообщение Adrift »

Muravei_, у меня такой ворнинг только с -Wpedantic появляется, можно заменить его на -Wextra или -Wall.
Аватара пользователя
muravei_
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Чт май 20, 2021 13:33:05

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

Сообщение muravei_ »

На пока последняя ощибка :

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

void init_spi(spi_inst_t *spi ,  uint baudrate);
Ругается на мою функцию так :
conflicting types for 'init_spi'; have 'void(spi_inst_t *, unsigned int)' {aka 'void(struct spi_inst *, unsigned int)'}gcc
Параметры честно скопированы из СДК , spi.h инклуден , в нем есть переопределение

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

typedef struct spi_inst spi_inst_t;
Что ему еще надо?
Пытался преобразовывать , ничего не вышло. :(

[uquote="Nranddek",url="/forum/viewtopic.php?p=4740364#p4740364"]либо не используйте подобные константы (я вот не использовал[/uquote]
Это не я , это останки переделываемоей библиотеки , глупо ими не воспользоваться. Да и битами тут нагляднее.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

muravei_, замените uint baudrate на unsigned int baudrate.
Аватара пользователя
muravei_
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Чт май 20, 2021 13:33:05

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

Сообщение muravei_ »

[uquote="JackSmith",url="/forum/viewtopic.php?p=4740862#p4740862"]на unsigned int baudrate.[/uquote]

Я так делал . Но все оказалось проще, я в двух файлах эту функцию объявил , нечаянно. :))

Но ошибки еще не кончились.
Вот еще :

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

int spi_write_buffer(int reg, const uint8_t *buffer, size_t buffer_length, spi_inst_t* spi) {
  uint8_t tx_buf[ buffer_length + 1];
  tx_buf[0] = reg & 0x80; // 
  memcpy (&tx_buf[1] , buffer, buffer_length );
Ругается на memcpy
implicit declaration of function 'memcpy' [-Wimplicit-function-declaration]gcc
Ответить

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