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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

Сообщение Eddy_Em »

VladislavS, как по мне, так главная ДИЧЬ и недоработка — это требование к выравниванию переменных в ARM.
Вот уж где рукожопы поковырялись!
И почему разрабы stdlib должны за этими лосями-рукожопами косяки исправлять?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3833219#p3833219"]И почему разрабы stdlib должны за этими лосями-рукожопами косяки исправлять?[/uquote]А я это называю "не можешь срать - не мучай жопу". Есть архитектура чипа, будь добр её соблюдать, либо не берись. Вон на AVR вообще кривизна на кривизне и ничего, работает же всё.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

у меня вопрос по 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:
листинг показывает, что поля содержат правильные значения... но почему тип указателя не совпадает?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

ARV, ну так у вас pwr_str получился массив из 2х строковых массивов, а .items такого не ожидает. Т.е. вы даете ссылку на массив из указателей на массивы fstr, а оно ждет ссылку сразу на fstr.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

не понял... массив указателей на __flash char, и item в структуре того же типа - указатель на __flash char...

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Не массив указателей на __flash char у вас там, а массив указателей на другие указатели, которые только уже в свою очередь указывают на __flash char.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

const __flash const __flash char* pwr_str[] - откуда массив указателей на указатели?!

точнее const __flash char * const __flash pwr_str[]
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

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

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 } };
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

ARV, ну так вы ж его не разыменовали. PROP_BOOL("POWER", b1, *pwr_str)
Тоже самое у вас получается, без усложнений в виде флэша AVR: https://godbolt.org/z/xEwVFS
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Тут весь смак как раз во __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.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

NStorm, не, разыменовывать и не надо! я не понял из ваших слов, где ожидать указателя на указатель на чар - VladislavS нарисовал пример, и я увидел, что это item должен быть указателем на указатель! а я думал, массив неверно описан.
VladislavS писал(а):Ух, забористо!
не понял - это хорошо или плохо? ;) ясен пень, с указателми из флеша не так-то просто... но зато в сишном виде красиво, и ОЗУ не тратится :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Ну правильно, вы передавали указатель на указатель. А теперь item сделали таким. Я предложил просто с другой стороны подойти - разыменовывать при передаче.

[uquote="VladislavS",url="/forum/viewtopic.php?p=3833363#p3833363"]Тут весь смак как раз во __flash
...
Ух, забористо! Это AVR.[/uquote]
Ну забористо конечно, но варнинг как я понимаю всё-таки из-за неверного типа по указателю был, о чем я говорил и что в моем примере (ссылка на godbolt ранее) я показал в обычном x86_64. Или я что-то не так понял?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Это ни хорошо, ни плохо, это так еать. И вообще, там не варнинг должен быть, а смачный такой error. ARV, переходите уже на компилятор С++. Можно не пользоваться С++, но одно то что он не пропускает такие вольности с типами уже больше чем ++.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

нет, не тупею! или не совсем :)

дело в том, что разыменовывание дает не константное значение, которое не попадает на этапе компиляции во флешь

Добавлено after 1 minute 6 seconds:
VladislavS писал(а):переходите уже на компилятор С++
и не просите! я от его синтаксиса классов (не говоря про шаблоны) просто умираю. уж лучше руками на Си...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=3833390#p3833390"]и не просите! я от его синтаксиса классов (не говоря про шаблоны) просто умираю. уж лучше руками на Си...[/uquote]Вы читать умеете? Не пользуйтесь классами, если не нравится. Он обычный Си более строго компилирует. Уж подобный варнинг для него точно смачный еррор будет.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18835
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

поиметь кучу неожиданных проблем при переходе - зачем?! мне и так хорошо. тем более что единственный реальный смысл применять С++ - это как раз классы и шаблоны. но раз от них меня тошнит - то других смыслов нет :)))

классами я в free pascal балуюсь. и шаблонами тоже немножко - хватает :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="ARV",url="/forum/viewtopic.php?p=3833390#p3833390"]дело в том, что разыменовывание дает не константное значение, которое не попадает на этапе компиляции во флешь[/uquote]
Ну вроде только указатель попадет в раму, а сама строка во флэше остается. Вы ведь разыменовываете только первый указатель. Если я сам на ночь глядя тупить не начал.
В принципе объявив item как указатель на указатель во флэше, вопрос решен как я понимаю. Ну хотя теперь адрес указателя тоже из флэша загружается.
Ответить

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