Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт мар 19, 2026 19:54:48

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 356, , , ...  
Автор Сообщение
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 23:05:02 
Друг Кота

Карма: 66
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
И это не избавит от мусора, так как strcpy сделает первый элемент пробелом и во второй элемент занесет ноль - признак конца строки. Логичнее тогда уж присвоить 0, и именно 0, не "0". Это и будет пустая строка. А в этом случае не нужна strcpy.
Но вообще, зная адрес массива и его размер, заполнить эту область чем-то можно кучей способов, например, memset. Наверное, надо конкретно по мк/компилятору смотреть, что будет оптимальней.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 23:32:09 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
Странное у тебя обнуление, строка содержащая один пробел - это типа аналог пустой строки?

да

Posted after 4 minutes 37 seconds:
Логичнее тогда уж присвоить 0, и именно 0, не "0". Это и будет пустая строка.

так не работает
компилятор avr-gcc ругается на несоответствие типов incompatible types in assignment

_________________
Tell Me The Truth


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 23:32:38 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Пустая строка - это "", содержит один завершающий ноль и в таком случае можно просто обнулить весь массив.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 23:39:46 
Друг Кота

Карма: 66
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
разве обнулит? мне думается, что просто поместит признак конца строки в начало, остальное не тронет. То есть, мусор-то всё равно будет, если потом какой-то иной доступ будет осуществляться.
FreshMan писал(а):
так не работает
компилятор avr-gcc ругается на несоответствие типов incompatible types in assignment
'\0'


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 23:43:49 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
не совсем то
в таком случае выводится мусор из незаписанных ранее полей
помогает именно пробел

Posted after 3 minutes 15 seconds:
разве обнулит? мне думается, что просто поместит признак конца строки в начало, остальное не тронет. То есть, мусор-то всё равно будет, если потом какой-то иной доступ будет осуществляться.
FreshMan писал(а):
так не работает
компилятор avr-gcc ругается на несоответствие типов incompatible types in assignment
'\0'

тоже самое, ругается на несоответствие типов

_________________
Tell Me The Truth


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 23:45:35 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
разве обнулит? мне думается, что просто поместит признак конца строки в начало, остальное не тронет. То есть, мусор-то всё равно будет, если потом какой-то иной доступ будет осуществляться.

Можно самому обнулить заполнил весь массив нулями, при помощи того же memset.

Добавлено after 57 seconds:
в таком случае выводится мусор из незаписанных ранее полей

Так нужно ошибки исправлять, а не заполнять тем с чем работает :)


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 23:47:08 
Друг Кота

Карма: 66
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
ну да, о чем я и говорил.... если уж убивать весь мусор, то это будет самый удобный вариант.

Странно, почему \0 тоже ругает. Но вполне возможно, я как-то подзабыл эти моменты.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 01:14:53 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4613
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
как элегантней проинициализировать большой массив структур ?
Если пишете на плюсах и у полей всех объектов должны быть одни и те же значения, то самый элегантный и правильный способ - это инициализация полей в конструкторе.
Если не плюсы, то пробегаемся по массиву и иним все поля необходимыми значениями. Где-нибудь вначале программы, перед использованием.
Если нужно тупо обнулить всё, то уже выше сказали - memset.

Что касается Вашего кода. Какие-то странные у Вас поля. Особенно поля id и time - зачем они строковые ? Нелогично как-то ... :dont_know:


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 01:20:49 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Если пишете на плюсах и у полей всех объектов должны быть одни и те же значения, то самый элегантный и правильный способ - это инициализация полей в конструкторе.

В таких простых случаях и конструктор не нужен, уже давно можно сами поля инитить.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 01:50:17 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4613
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Reflector писал(а):
В таких простых случаях и конструктор не нужен, уже давно можно сами поля инитить.
В принципе, да. Сам я лично так и делаю. Более наглядно получается.
Но, как-то однажды, на Киберфоруме меня отругали за такой подход :)) Посоветовали присваивать значения полям в списке инициализации конструктора. Хотя, на мой взгляд, разницы нет никакой (если не иним константы/ссылки, или более сложные объекты) :dont_know:


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 04:52:55 
Друг Кота

Карма: 29
Рейтинг сообщений: 12
Зарегистрирован: Пт янв 12, 2007 11:21:39
Сообщений: 19223
Откуда: Томск
Рейтинг сообщения: 0
как элегантней проинициализировать большой массив структур ?
имеется массив структур
каждая структура состоит из 3 полей
перед записью данных я произвожу "обнуление", записывая пробелы, дабы там небыло мусора
Код:

typedef struct{
   char  id[4];   // номер гонщика
   char car[10]; // машина гонщика
   char time[4]; // финишное время
} member_t;


member_t racer[30]; // гонщики

for (int i = 0; i < 29; ++i)
{
   strcpy(racer[i].id, " ");
   strcpy(racer[i].car, " ");
   strcpy(racer[i].time, " ");
}

поскольку поля всего 3 то сделать это легко а как быть если полей за сотню и более ?


Код:
memset(racer, 0, sizeof(racer));

Забъет нулем весь массив.

Если вместо 0 поставить 32, то забьет массив пробелами.

http://cppstudio.com/post/673/

Не забудь в начало файла вставить

Код:
#include <string.h>


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 12:53:15 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4613
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
SfS, да вроде уже несколько раз ему про memset сказали. Думаю, он уже понял :)

SfS писал(а):
Если вместо 0 поставить 32, то забьет массив пробелами.
Ага, и без нулей в конце строк :)))


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 13:30:18 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Ага, и без нулей в концах строк :)))
Там же не указано что все эти id,car,time - в формате ASCIIZ. А значит 0 в конце возможно и не нужен. А если массивы большие (много элементов), то выкидывание ненужных нулей позволяет хорошо экономить память. Я обычно так и делаю.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 13:37:08 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4613
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
jcxz писал(а):
Там же не указано что все эти id,car,time - в формате ASCIIZ
Судя по strcpy в коде автора - можно предположить.
Ну, а вообще, там совсем всё как-то мутно. И автор молчит на вопросы :dont_know:


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 13:45:43 
Друг Кота

Карма: 29
Рейтинг сообщений: 12
Зарегистрирован: Пт янв 12, 2007 11:21:39
Сообщений: 19223
Откуда: Томск
Рейтинг сообщения: 0
SfS, да вроде уже несколько раз ему про memset сказали. Думаю, он уже понял :)

SfS писал(а):
Если вместо 0 поставить 32, то забьет массив пробелами.
Ага, и без нулей в конце строк :)))


Ну это уж как ему угодно. Строки могут храниться и не в asciiz формате:)


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 07, 2022 13:50:23 
Друг Кота

Карма: 66
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Тут, похоже, проблема не в хранении, а в доступе. Раз = "" не помогает, а = " " - да, то это намекает, что в дальнейшем проверка строк идет как-то не совсем так.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 08, 2022 10:52:22 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 04, 2019 09:58:29
Сообщений: 104
Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения: 0
Добрый день. В целом с библиотекой от Adafruit Industries разобрался - spi hardware. Далее намерен привести весь код к стандарту С++14. Наперво - дефайны. (их там как тараканов за баней) Т.е. заменить это:
#define SSD1306_LCDWIDTH 128
#define SSD1306_LCDHEIGHT 64
#define sizeBuff (SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH /8 ) ;

на это, с безопасным приведением типов:
static constexpr uint8_t SSD1306_LCDWIDTH = 128;
static constexpr uint8_t SSD1306_LCDHEIGHT = 64;
static constexpr uint8_t sizeBuff = static_cast<uint8_t>(SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH /8 ) ;

Максимум вычислений на этапе компиляции и не тратить память по пустякам.
(монстр изрядно покоцан и моя лапа у него на груди) :tea: :sleep:


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 08, 2022 11:45:19 
Друг Кота

Карма: 29
Рейтинг сообщений: 12
Зарегистрирован: Пт янв 12, 2007 11:21:39
Сообщений: 19223
Откуда: Томск
Рейтинг сообщения: 0
Добрый день. В целом с библиотекой от Adafruit Industries разобрался - spi hardware. Далее намерен привести весь код к стандарту С++14. Наперво - дефайны. (их там как тараканов за баней) Т.е. заменить это:
#define SSD1306_LCDWIDTH 128
#define SSD1306_LCDHEIGHT 64
#define sizeBuff (SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH /8 ) ;

на это, с безопасным приведением типов:
static constexpr uint8_t SSD1306_LCDWIDTH = 128;
static constexpr uint8_t SSD1306_LCDHEIGHT = 64;
static constexpr uint8_t sizeBuff = static_cast<uint8_t>(SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH /8 ) ;

Максимум вычислений на этапе компиляции и не тратить память по пустякам.
(монстр изрядно покоцан и моя лапа у него на груди) :tea: :sleep:


А зачем? Выигрыша в скорости нет. Дефайны и так на этапе препроцессора выполняются.

Разве что для красоты.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 08, 2022 17:27:34 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 04, 2019 09:58:29
Сообщений: 104
Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения: 0
Гуглил я по этому вопросу. Но честно говоря однозначного ответа не нашел. Напр. здесь(ссылка). Пока оставлю этот вопрос как не столь актуальный.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 08, 2022 17:43:59 
Друг Кота

Карма: 29
Рейтинг сообщений: 12
Зарегистрирован: Пт янв 12, 2007 11:21:39
Сообщений: 19223
Откуда: Томск
Рейтинг сообщения: 0
Гуглил я по этому вопросу. Но честно говоря однозначного ответа не нашел. Напр. здесь(ссылка). Пока оставлю этот вопрос как не столь актуальный.


constexpr хорош с функциями.

Но в данном случае вроде просто константы и выигрыша от него нет. ИМХО. Могу чегото не доглядеть.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 356, , , ...  

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y