Easyelectronics.ru • Просмотр темы - Книга "Beginning STM32"

Easyelectronics.ru

Электроника для всех
Текущее время: 19 авг 2018, 04:29

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 141 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:13 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2530
Откуда: КЧР, поселок Нижний Архыз
Даю пример. Все очень просто:
Код:
#include <stdio.h>
#include <stdint.h>

#define FUNC(arg) _Generic(arg, uint16_t: funcu, int32_t: funci)(arg)

void funcu(uint16_t arg){
    printf("uint16_t: %u\n", arg);
}

void funci(int32_t arg){
    printf("int32_t: %d\n", arg);
}

int main(){
    uint16_t u = 32;
    int32_t i = -50333;
    FUNC(u);
    FUNC(i);
    return 0;
}

Компилируем и получаем:
Код:
gcc main.c && ./a.out
uint16_t: 32
int32_t: -50333


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:30 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1911
Eddy_Em писал(а):
Даю пример. Все очень просто:

Какое убожество...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:34 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2530
Откуда: КЧР, поселок Нижний Архыз
Это не убожество, а очень классное решение для перегрузки функций.
И не требуется пользоваться уродством вроде крестов!!!

Хотя, хрюникодофилу этого не понять…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:45 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1911
Eddy_Em писал(а):
Это не убожество, а очень классное решение для перегрузки функций.

Это жалкое подобие левой руки, требующее лишних телодвижений и решающее только очень узкий круг задач. Попробуйте сделать тоже самое для 3-4 параметров, каждый из которых может быть разного типа и это "очень классное решение" сразу же превратится в нечитаемую кашу из макросов. Не говоря уже о том, что функции для всех этих комбинаций вам прийдется написать руками и всем дать разные (при этом понятные) имена. Это все равно что радоваться тому, что вам дали лопату вместо детского совочка, хотя вам нужно выкопать котлован и под него экскаватор в самый раз. Спору нет, лопата куда лучше, но нужен-то экскаватор...
Eddy_Em писал(а):
И не требуется пользоваться уродством вроде крестов!!!

Пользоваться уродством в виде _Generic ваша религия вам не запрещает, а вот пользоваться плюсами, где это есть отродясь и в удобной форме - запрещает.
Eddy_Em писал(а):
Хотя, хрюникодофилу этого не понять…

Та да, вам действительно не понять, что можно писать удобно и читаемо, а не так как предлагаете вы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:54 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
Цитата:
Макросы помогут в зависимости от типа вызывать нужную функцию.

причём тут это ?

я говорил о ПЕРЕГРУЗКЕ функций это подразумевает диспетчеризацию по типу и количеству аргументов

например:
Код:
    void disp(char c);
    void disp(char c, int num) ;
    void disp(char c, int num, long resp) ;


на С это выглядит Убожественно

Код:
    void disp(char c);
    void disp1(char c, int num) ;
    void disp2(char c, int num, long resp) ;


лепим горбатые имена, никакие макросы с этим не помогут


Последний раз редактировалось cheblin 07 июн 2018, 14:04, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:00 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1911
cheblin писал(а):
на С это выглядит Убожественно

Я бы сказал, что на С это (перегрузка) вообще никак не выглядит, поскольку отсутствует как явление. Корявая затычка на макросах и _Generic это не "выглядит" , а "как делать нельзя".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:11 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
на плюсах тоже свои тараканы...

есть у меня на сях структура
Код:
typedef struct _Pack
{
   Meta* meta;// метаданные о пакете
   uint8_t       data[]; //массив с данными пакета
}  Pack;

захотел я её переписать на ++

Код:
class Pack
{
   Meta* meta;
   uint8_t       data[];
}         

а теперь попробуем воспользоваться всей мощью плюсов, мы ж ради чего вариант на С++ колбасим...

пытаемся расширить свой Pack и навернуть методов.... а вот хрен! делай data указателем - тогда ОК.
ну это какой то позор! у меня каждый бит пакета на счету, а они предлагают мне указатель в пакет запихать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:18 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
Если в любом ЯП вам начинает требоваться нечто типа "замена левой руки", то вы сделали ошибку на этапе проектирования архитектуры и/или неверно выбрали ЯП.

В том же С если вам нужны функции с одинаковым именем, но разным наборов параметров стоит задуматься, а зачем оно вам понадобилось и не будет ли практичнее и/или читабельнее обойтись без таких одноименных функций.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:27 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
fr0ster писал(а):
Если в любом ЯП вам начинает требоваться нечто типа "замена левой руки", то вы сделали ошибку на этапе проектирования архитектуры и/или неверно выбрали ЯП.

у меня нет выбора. BlackBox - генерирует код обработки протокола который работает даже на 8 битных микроконтроллерах.
поищите с чего началась дискуссия: с вопроса "а чего не хватает в С-ях" ... я и ответил своим списком хотелок.

fr0ster писал(а):
В том же С если вам нужны функции с одинаковым именем, но разным наборов параметров стоит задуматься, а зачем оно вам понадобилось и не будет ли практичнее и/или читабельнее обойтись без таких одноименных функций.

Function overloading это настолько фундаментально и очевидно, даже нет желания тратить время на убеждение необходимости в этом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:38 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1911
cheblin писал(а):
на плюсах тоже свои тараканы...

Они везде есть. Нет серебрянной пули.
cheblin писал(а):
пытаемся расширить свой Pack и навернуть методов.... а вот хрен! делай data указателем - тогда ОК.
ну это какой то позор! у меня каждый бит пакета на счету, а они предлагают мне указатель в пакет запихать...

А в чем позор-то? Вы пытаетесь создать класс переменной длины. Как для него должен работать, например, new?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:51 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
evsi писал(а):
Как для него должен работать, например, new?

по идеи также как и в сях, выделяем память, приводим к необходимому типу, либо в конструкторе передаем параметр размера.
там проблема в другом. ++ навязывает внутреннее устройство памяти (layout) объекта. вероятно из-за необходимости поддерживать наследования и проч...


Последний раз редактировалось cheblin 07 июн 2018, 14:56, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:55 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2530
Откуда: КЧР, поселок Нижний Архыз
cheblin писал(а):

На том же SO полным-полно решений этой проблемы. А вообще, C позволяет заводить функции с переменным количеством аргументов, почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным?
Но чаще всего если грамотно спроектировать, никаких проблем не будет: ни с перегрузкой, ни с разным количеством аргументов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:58 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
cheblin писал(а):
Function overloading это настолько фундаментально и очевидно, даже нет желания тратить время на убеждение необходимости в этом.


Во первых в это не настолько фундаментально и очевидно, так что спорить не стоит.
Во вторых, если без этого можно обойтись, это уже не необходимо, и это как раз очевидно.
В третьих всегда можно использовать некое подмножество С++, как это в линуксовом ядре делается.
Тогда у вас будет и перегрузка функций, и параметры по умолчанию, но без нежелательного конкретно вам оверхеда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:01 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
Eddy_Em писал(а):
почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным?
Но чаще всего если грамотно спроектировать, никаких проблем не будет: ни с перегрузкой, ни с разным количеством аргументов.

напомнило анекдот.

Цитата:
Решили провести такой тест. В темной комнате поставили табуретку, вбили гвоздь, чтобы торчал острой частью вверх, и по очереди посадили на эту табуретку русского, украинца и белоруса.
Русский сел на гвоздь, вскочил и давай матом ругаться.
Украинец сел на гвоздь, вскочил, нащупал гвоздь, вытащил его и положил в карман: "В хозяйстве пригодится".
Белорус сел на гвоздь, подскочил...постоял, подумал и со словами "А можа, так и трэба?" снова сел.

так вот, я утверждаю - гвозди из табурета торчать не должны


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:09 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
Eddy_Em писал(а):
А вообще, C позволяет заводить функции с переменным количеством аргументов, почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным?


Чаще всего такое решение небезопасно и неоптимизируемо компилятором.
Когда количество параметров заранее известно, параметры можно через регистры передать в ряде случаев.
С переменным числом параметров не прокатит. Плюс так или иначе нужно анализировать число параметром, проверять тип и тд.
Короче оверхед налицо, уж лучше С++ тогда взять.

Eddy_Em писал(а):
Но чаще всего если грамотно спроектировать, никаких проблем не будет: ни с перегрузкой, ни с разным количеством аргументов.


Тут однозначно согласен :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:12 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
cheblin писал(а):
так вот, я утверждаю - гвозди из табурета торчать не должны


Анекдот не в тему, хотя за комплимент спасибо.

Тут скорее не табуретка, а шило, и не проблема шила, если ты на него сел, а не им дырку сделал.
По сути предмет использован правильно, дырка сделана.
Но что в попе, а не в бумаге, это не к шилу вопрос.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:17 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1911
Eddy_Em писал(а):
На том же SO полным-полно решений этой проблемы. А вообще, C позволяет заводить функции с переменным количеством аргументов, почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным?

Шикарный способ огрести пачку проблем.
Eddy_Em писал(а):
Но чаще всего если грамотно спроектировать, никаких проблем не будет: ни с перегрузкой, ни с разным количеством аргументов.

Ну да, ну да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:17 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
я ж писала выше, мои пожелания к С не ломают самого языка. все компиляторы работают как обычно.
все вполне реализуемо в пределах IDE.
совсем немного "сахарку" и программировать станет намного приятнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:20 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
Цитата:
не сделать одну с переменным

даю справку. они ВСЕ должны быть одного типа. если пользоваться стандартным va_arg
это не соответствует действительности. а все почему, потому что все примеры по использованию va_arg выглядят так
Код:

double add( int n, ... )
{
   int i = 0;
   double sum = 0.0;
   va_list argptr;
   va_start( argptr, n ); // Initialize argptr; that is,
       for ( i = 0; i < n; ++i ) // for each optional argument,
          sum += va_arg( argptr, double ); // read an argument with type
   // double and accumulate in sum.
   va_end( argptr );
   return sum;
}


а оказывается можно делать и вот так

Код:

double add( int n, ... )
{
   int i = 0;
   double sum = 0.0;
   va_list argptr;
   ....
    sum += va_arg( argptr, double ); // read an argument with type double
    sum += va_arg( argptr, int); // read an argument with type int
    sum += va_arg( argptr, byte); // read an argument with type byte
   ....
   va_end( argptr );
   return sum;
}


вот!


Последний раз редактировалось cheblin 07 июн 2018, 16:38, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:21 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1911
fr0ster писал(а):
Во вторых, если без этого можно обойтись, это уже не необходимо, и это как раз очевидно.

Обойтись много без чего можно. Можно самому огород сажать, поле пахать, коров доить, например. И обойтись без магазинов.
fr0ster писал(а):
В третьих всегда можно использовать некое подмножество С++, как это в линуксовом ядре делается.
Тогда у вас будет и перегрузка функций, и параметры по умолчанию, но без нежелательного конкретно вам оверхеда.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:28 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
evsi писал(а):
Это куда более рациональный подход, чем религиозная ненависть к плюсам.

нет никакой ненависти, лично я антагонист. знай плюсы и минусы того, что есть и используй с умом.

И чем больше знаешь, тем чаще при программировании, всплывают мысли, а как бы это можно было написать на X ,...или ой, как не хватает в этом месте Y который есть в X и было бы красиво...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:32 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1911
cheblin писал(а):
нет никакой ненависти, лично я антагонист. знай плюсы и минусы того, что есть и используй с умом.

Это был камень не в ваш огород.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:42 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2530
Откуда: КЧР, поселок Нижний Архыз
cheblin писал(а):
Цитата:
не сделать одну с переменным

даю справку. они ВСЕ должны быть одного типа. если пользоваться стандартным va_arg

Пример с printf совершенно опровергает ваши слова.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:48 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
Eddy_Em писал(а):
cheblin писал(а):
Цитата:
не сделать одну с переменным

даю справку. они ВСЕ должны быть одного типа. если пользоваться стандартным va_arg

Пример с printf совершенно опровергает ваши слова.

мы ведь обсуждаем это?
Цитата:
почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным

Пример с printf ? я что то опять не догоняю.... поясните.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:52 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
В printf можно передать переменное число разнотипных параметров.
Реализовано все именно на va_arg.
Но с точки зрения безопасности это просто праздник какой то :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 141 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB