Например TDA7294

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





Текущее время: Пт апр 19, 2024 02:25:44

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7581 ]     ... , , , 291, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт ноя 09, 2018 15:55:59 
Вымогатель припоя

Карма: 9
Рейтинг сообщений: 155
Зарегистрирован: Сб ноя 16, 2013 23:34:34
Сообщений: 671
Рейтинг сообщения: 0
не "пишется", а вызывает ошибку в процессе компиляции. В вашей терминологии "не помещается" ;) Как вы, возможно, можете наблюдать, после явного указания типа инициализируемой переменной ошибка более не появляется. Возможно, мои объяснения - ерунда. Предложите, пожалуйста, правильное объяснение. Если для вас это по какой-то причине невозможно - просто помолчите в сторонке, пока кто-нибудь умный не объяснит.

Добавлено after 13 minutes 9 seconds:
я понял, в чём дело ;) всё действительно намного проще, чем я думал: нам нужно инициализировать структуру All_ChannelData_t, массив на 8 экземпляров ChannelData_t, и сами структуры ChannelData_t. "Просто добавь фигурные скобки" :)
Код:
   All_ChannelData_t All_ChannelData = { // All_ChannelData_t structure
      { // ChannelData[8] array
         { // ChannelData_t structure
         1000, 1000, 1000, 1000,
         },
            {
            1000, 1000, 1000, 1000,
         },
            {
            1000, 1000, 1000, 1000,
         },
            {
            1000, 1000, 1000, 1000,
         },
            {
            1000, 1000, 1000, 1000,
         },
            {
            1000, 1000, 1000, 1000,
         },
            {
            1000, 1000, 1000, 1000,
         },
            {
            1000, 1000, 1000, 1000,
         },
      }
   };
собственно, оно и ругалось на "too many initializers" - массив же один ;)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт ноя 09, 2018 19:24:08 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
AAX писал(а):
Возможно, мои объяснения - ерунда.
как вы сами доказали - таки да, ерунда

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб ноя 17, 2018 15:26:39 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0
Никто не знает почему
auto n=end(silo)-begin(silo);
Code blocks выдает int вместо ptrdiff_t.
Это от компилятора зависит?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб ноя 17, 2018 16:03:15 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Что такое end, begin и silo нам предлагается угадать?

PS: auto удаляет ссылки, квалификаторы const и квалификаторы volatile. Не в этом дело?

Догадаемся, что речь идёт о std::end и std::begin

Определение в IAR
Спойлер
Код:
// TEMPLATE FUNCTION begin
template<class _Elem> inline
constexpr const _Elem *begin(initializer_list<_Elem> _Ilist) _NOEXCEPT
{       // get beginning of sequence
  return _Ilist.begin();
}

// TEMPLATE FUNCTION end
template<class _Elem> inline
constexpr const _Elem *end(initializer_list<_Elem> _Ilist) _NOEXCEPT
{       // get end of sequence
  return _Ilist.end();
}


Определение в GCC по сути то же самое
Спойлер
Код:
  /**
   *  @brief  Return an iterator pointing to the first element of
   *          the initializer_list.
   *  @param  __ils  Initializer list.
   */
  template<class _Tp>
    constexpr const _Tp*
    begin(initializer_list<_Tp> __ils) noexcept
    { return __ils.begin(); }

  /**
   *  @brief  Return an iterator pointing to one past the last element
   *          of the initializer_list.
   *  @param  __ils  Initializer list.
   */
  template<class _Tp>
    constexpr const _Tp*
    end(initializer_list<_Tp> __ils) noexcept
    { return __ils.end(); }
}


Посмотрим что такое ptrdiff_t

В IAR
Спойлер
Код:
/* type definitions */
#ifndef _PTRDIFF_T
  #define   _PTRDIFF_T
  #define   _STD_USING_PTRDIFF_T
  typedef   __PTRDIFF_T_TYPE__ ptrdiff_t;
#endif

В GCC
Спойлер
Код:
#ifndef __PTRDIFF_TYPE__
#define __PTRDIFF_TYPE__ long int
#endif
typedef __PTRDIFF_TYPE__ ptrdiff_t;


Псевдоним на базовый тип. Думаю, компилятор вполне закономерно взял базовый тип.


Последний раз редактировалось VladislavS Сб ноя 17, 2018 17:08:13, всего редактировалось 1 раз.

Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб ноя 17, 2018 17:01:14 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0
VladislavS писал(а):
Догадаемся, что речь идёт о std::end и std::begin

Ну да.

Да черт с этими определениями.
Почему компилятор определяет неявно тип int вместо ptrdiff_t?

#include <cstddef>
#include <iterator>
using namespace std;

int main(int argc, char** argv) {
char silo[10];
auto n=end(silo)-begin(silo);
return 0;
}
тут n почему-то int


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб ноя 17, 2018 17:06:05 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
тут n почему-то int

Перед выполнением математических операций все приводится к одному типу и для целых это будет int, если его достаточно, т.е. даже 'A' + 1 дает int.
А, тут итераторы, тогда все зависит от перегрузки операторов, тем более в принципе ptrdiff_t как int и объявлен... Компилятор какой?


Последний раз редактировалось Reflector Сб ноя 17, 2018 17:14:38, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб ноя 17, 2018 17:11:17 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0
Перед выполнением математических операций все приводится к одному типу и для целых это будет int, если его достаточно, т.е. даже 'A' + 1 дает int.

да, но тут вычитаются же указатели.
Компилятор игнорит стандарт чтоли?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб ноя 17, 2018 17:15:56 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Тип то тут одинаковый. Но вступает в силу "арифметика указателей". Результат разности двух указателей это по классике будет int. Будет ли компилятор подбирать для него псевдоним ptrdiff_t ? Я бы не стал :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб ноя 17, 2018 17:40:17 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0
VladislavS писал(а):
Результат разности двух указателей это по классике будет int

Это же по классике.
VladislavS писал(а):
Будет ли компилятор подбирать для него псевдоним ptrdiff_t ?

Ну как бы в плюсах должен. Он же видит, что вычитаются указатели.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб ноя 17, 2018 18:05:04 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 2
Ну как бы в плюсах должен. Он же видит, что вычитаются указатели.

Вот как объявлен ptrdiff_t:
Код:
typedef int   ptrdiff_t;

Ptrdiff_t - это новый тип? Нет, это псевдоним для существующего типа, новый тип тут не создается, потому вполне логично, что auto выводит тип разности указателей как int. Тем более ptrdiff_t появился относительно недавно, а указатели были давно и как-то без него обходились, так что никакие стандарты тут не игнорятся.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 29, 2018 00:11:50 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0
Я правильно понимаю?:

Код:
A& Func()const{return *this;}

Можно передать константу и неконстанту. И функция может стоять слева от операторов.

Код:
const A&(){return *this;}


Можно передать только неконстанту. Слева стоять не может.

Код:
const A&()const{return *this;}


Можно передать константу и неконстанту. Слева стоять не может.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 29, 2018 00:19:57 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ничего не понятно, но.

const после метода означает, что метод не изменяет внутренние данные класса.
Код:
Func() const;

const слева от возвращаемого значения - запрет изменять данные по возвращаемой ссылке/указателю.
Код:
const A& Func();

const в аргументе - функция(метод) не имеет права менять данные по передаваемой ей ссылке/указателю.
Код:
Func(const A&);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн дек 03, 2018 08:39:12 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
Добрый день, делаю bootloader, по включению питания сравнивается CRC приложения с текущим CRC, если совпадает, значит приложение зашито и переходим в него если нет то переходим в bootloader.
Так вот теперь столкнулся с проблемой как обратно вернуть в bootloader, по программному условию? После того как делаю программный reset, он у меня
опять в приложение уходит, а передать из приложение в bootloader переменные можно только через Flash, но такой вариант, не очень нравиться. Долго, надо оперативнее перейти.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн дек 03, 2018 12:56:38 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
а передать из приложение в bootloader переменные можно только через Flash, но такой вариант, не очень нравиться.
В вашем секретном процессоре нет ОЗУ, регистров процессора и перифериии куда можно положить переменные?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт дек 14, 2018 06:31:00 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0
Народ почему то Code Blocks 17 ругается:
Код:
         const char d[]="fsd";
        string s="dfsdfsfs";
        strcpy(s,d);


Почему то не хочет конвертить string в char*. Хотя я видел код смешивающий стринги с массивами без c_str. Может где настройки есть какие?


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

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
strcpy первым аргументом указатель на char принимает, а Вы туда не пойми что передали (С++, экземпляр класса std_string ? зачем так делать?)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт дек 14, 2018 08:12:53 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0
strcpy первым аргументом указатель на char принимает, а Вы туда не пойми что передали.

Тоже показалось странным.Собственно

Нашел:
Код:
        char d[]="fsdhfghf";
        string s="dfs12";
        strcpy(d,&s[0]);


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

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Народ почему то Code Blocks 17 ругается:
Код:
         const char d[]="fsd";
        string s="dfsdfsfs";
        strcpy(s,d);


Почему то не хочет конвертить string в char*. Хотя я видел код смешивающий стринги с массивами без c_str. Может где настройки есть какие?

А чем Вам не понравился стандартный способ присваивания ?
Код:
s=d;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт дек 14, 2018 08:35:50 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0
Аlex писал(а):
А чем Вам не понравился стандартный способ присваивания ?

Все в перемешку. Вот и приходится использовать и то, и то.


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

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ну так Вы решились использовать string, значит и пользуйтесь только его функционалом. Зачем что-то изобретать ?


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

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


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27


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

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


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