Например TDA7294

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

Текущее время: Ср апр 01, 2026 19:16:29

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 339, , , ...  
Автор Сообщение
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 11:52:06 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
На ARM нужно 10 раз подумать прежде чем так делать, чтобы исключить невыровненный доступ там где его нет и в HardFault не улететь. Можно, но с головой!

++
Еще memcpy опасен. Я пару раз нарывался. Вроде код правильный, а в хардфолт уходит. Оказывается, пытался при помощи memcpy копировать часть строки (а memcpy, видимо, оптимизировать пытался и копировать по 4 байта "за присест"). В общем, если строки нужно копировать, то есть strcpy — она не пытается char'ы как uint32_t копировать…
И в packed-структурах приходится очень аккуратно члены располагать.
было бы конструктивно объяснить, как следует поступать, чтобы не нарваться. причем без привзяки к ARM

А смысл тогда о выравнивании думать?

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 12:21:59 
Первый раз сказал Мяу!

Зарегистрирован: Сб ноя 24, 2012 14:02:39
Сообщений: 28
Рейтинг сообщения: 0
Спасибо коллеги из помощь и советы по существу.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 12:39:20 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18543
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Eddy_Em писал(а):
А смысл тогда о выравнивании думать?
смысл в понимании ограничений С++. я, например, крайне удивлен тем фактом, что функция, копирующая заданное (любое!) количество БАЙТ может куда-то уходить в хардфаулт - она не имеет права оптимизировать что-то так, как нельзя! если это где-то оговорено в стандарте С++, то об этом и стоит говорить на публичном форуме, а не о своей печальной судьбе...

что касаетс ARM, то С++ существует для бОльшего количества платформ, и для разрядностей тоже, чем единственное семейство ARM. поэтому и говорить надо об особенностях С++ для РАЗНЫХ платформ.

я вот еще был очень сильно удивлен, что union в С++ это совсем не тот же union, что в Си. но так и не понял, из-за чего эта разница НЕ ВСЕГДА бывает. тоже хотел бы узнать от сведущих людей...

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

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


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 12:55:33 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
это чем-то отличается от предложенного мной?

Неа. Я до падения форума еще ответ написал, до того как ваш увидел.
Хотя посыл у меня был больше в том, что в таких случаях обычно делают массив структур, а не как ТЫ структуру из массивов (одинаковой размерности).

Добавлено after 5 minutes 46 seconds:
Без мемсета легко как я уже написал инициализировать нулевой локальной переменной, вроде dt = (struct rSENSORS){ 0 };.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 13:12:40 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
смысл в понимании ограничений С++. я, например, крайне удивлен тем фактом, что функция, копирующая заданное (любое!) количество БАЙТ может куда-то уходить в хардфаулт - она не имеет права оптимизировать что-то так, как нельзя!

Вообще-то, stdlib — он на то и stdlib, что там все более-менее оптимизировано, чтобы не приходилось каждому делать свой велосипед-квадратные-колеса для элементарных strcpy и т.п. А вот на микроконтроллеры, к сожалению, это не распространяется, т.к. оптимизация stdlib и других библиотек знать не знает, что есть какая-то говножелезка, разработчики которой были настолько долбанутыми ослами, что сделали обязательным требованием выравнивание переменных в памяти!

Это вам вопрос задавать надо не к разработчикам стандарта С++, а к ослам, которые заложили в архитектуру ARM такой огромный косяк!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 13:46:33 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
смысл в понимании ограничений С++.
Причём тут С++? Это вообще стандартные C-ные функции. Проблема не в языке, а в разработчике конкретной библиотеки и конкретного компилятора. Я же не просто так ему передаю параметр "-mcpu=cortex-m0" или "-mcpu=cortex-m4". Он должен это учитывать при компиляции/оптимизации. Это не ограничение языка!

Добавлено after 6 minutes:
Вообще-то, stdlib — он на то и stdlib, что там все более-менее оптимизировано, чтобы не приходилось каждому делать свой велосипед-квадратные-колеса для элементарных strcpy и т.п. А вот на микроконтроллеры, к сожалению, это не распространяется, т.к. оптимизация stdlib и других библиотек знать не знает, что есть какая-то говножелезка, разработчики которой были настолько долбанутыми ослами, что сделали обязательным требованием выравнивание переменных в памяти!
Это не так. stdlib должна правильно работать на любой железке. Библиотека оптимизируется под конкретную железку. То что в определённых условиях она сбоит - это недоработка, которую разработчик обязан исправлять, особенно если продукт платный.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 14:27:23 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18543
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
у меня вопрос на счет union в C++
Код:
typedef union{
   struct{
      uint8_t a;
      uint8_t b;
   };
   uint8_t c;
} my_type;
почему sizeof(my_type) == 3?!

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

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


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 14:48:31 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
Не верь глазам своим
Изображение


Вложения:
my_type.png [32.93 KiB]
Скачиваний: 409
Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 15:01:56 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18543
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
:oops:

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

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


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

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
VladislavS, как по мне, так главная ДИЧЬ и недоработка — это требование к выравниванию переменных в ARM.
Вот уж где рукожопы поковырялись!
И почему разрабы stdlib должны за этими лосями-рукожопами косяки исправлять?

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 19:12:02 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
И почему разрабы stdlib должны за этими лосями-рукожопами косяки исправлять?
А я это называю "не можешь срать - не мучай жопу". Есть архитектура чипа, будь добр её соблюдать, либо не берись. Вон на AVR вообще кривизна на кривизне и ничего, работает же всё.


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

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18543
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
у меня вопрос по AVR-GCC
делаю вот такие вещи
Код:
typedef const __flash char fstr[];

typedef const __flash char* pfstr;

#define FSTR(x) (fstr){x}

typedef const __flash struct {
   pfstr      name;
   prop_type_t   id;
   bool*      value;
   pfstr       items;
} prop_bool_t;            // определяет тип prop_bool_t

#define PROP_BOOL(n, v, i) &(prop_bool_t){.name = (fstr){n}, .id = PROP_BOOL, .value = &v, .items = i}
потом использую так
Код:
bool b1;

const __flash pfstr pwr_str[] = {FSTR("OFF"), FSTR("ON")};

const __flash void * const __flash prop_array[] = {
   PROP_BOOL("POWER", b1, pwr_str)
}
получаю варнинг initialization from incompatible pointer type [-Wincompatible-pointer-types] на pwr_str в макросе PROP_BOOL

не понимаю - что не так? вроде указатель на память программ... где ошибаюсь?

идея была такая: поле items структуры prop_bool_t должно содержать указатель на первый элемент находящегося во flash массива строк в памяти программ.

Добавлено after 45 seconds:
листинг показывает, что поля содержат правильные значения... но почему тип указателя не совпадает?!

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

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


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

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
ARV, ну так у вас pwr_str получился массив из 2х строковых массивов, а .items такого не ожидает. Т.е. вы даете ссылку на массив из указателей на массивы fstr, а оно ждет ссылку сразу на fstr.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 21:16:41 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18543
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
не понял... массив указателей на __flash char, и item в структуре того же типа - указатель на __flash char...

что не так?

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

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


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 21:40:14 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Не массив указателей на __flash char у вас там, а массив указателей на другие указатели, которые только уже в свою очередь указывают на __flash char.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 21:44:06 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18543
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
const __flash const __flash char* pwr_str[] - откуда массив указателей на указатели?!

точнее const __flash char * const __flash pwr_str[]

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

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


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 21:53:36 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 4
Код:
const __flash char str_on[] = "ON";
const __flash char str_off[] = "OFF";
const __flash char str_power_trm[] = "POWER_TRM";
const __flash char str_power_rcv[] = "POWER_RCV";
const __flash char __flash *strs_pwr[] = { str_on, str_off };

struct prop_bool_t{
   const char __flash *name;
   char  id;
   bool *value;
   const char __flash * __flash *items;
};

bool b1,b2;

const __flash prop_bool_t pwr[] = { { str_power_trm, 1, &b1, strs_pwr }, 
                                    { str_power_rcv, 2, &b2, strs_pwr } };


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:00:00 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18543
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
VladislavS, вот теперь понял! спасибо!

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

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


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:08:51 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
ARV, ну так вы ж его не разыменовали. PROP_BOOL("POWER", b1, *pwr_str)
Тоже самое у вас получается, без усложнений в виде флэша AVR: https://godbolt.org/z/xEwVFS


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:13:31 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
Тут весь смак как раз во __flash :) Попросил компилятор показать как он будет добираться, например, к pwr[1].items[b2]
Код:
        LDI     R30, LOW((pwr + 12))
        LDI     R31, HIGH((pwr + 12))
        LPM     R18, Z+
        LPM     R19, Z
        LDS     R16, b2
        LDI     R17, 0
        LSL     R16
        ROL     R17
        ADD     R18, R16
        ADC     R19, R17
        MOVW    R31:R30, R19:R18
        LPM     R16, Z+
        LPM     R17, Z
Ух, забористо! Это AVR.


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

Часовой пояс: 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