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

Easyelectronics.ru

Электроника для всех
Текущее время: 15 авг 2018, 05:58

Часовой пояс: 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, 16:08 
Старожил

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

Показываю:
Код:
printf("arg %d = %g\n", d, g);

В printf чтобы узнать тип аргумента используется char* fmt, но никто не заставляет вас делать так же. Указываете первым аргументом количество остальных, а дальше все просто, т.к. тип очередного аргумента известен.
Но это извращение какое-то — делать функции с разным количеством аргументов.

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

fr0ster писал(а):
Но с точки зрения безопасности это просто праздник какой то :)

Поэтому я и предлагаю делать количество аргументов фиксированным, как это принято в стандартной практике, а ненужное или дефолтное заменять на NULL.


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
fr0ster писал(а):
В printf можно передать переменное число разнотипных параметров.
Реализовано все именно на va_arg.
Но с точки зрения безопасности это просто праздник какой то :)

о! точно. там же при каждом вызове в va_arg можно разные типы подсовывать! во, узнал полезное! спасибо!
Цитата:
Везде в С именно так и делают, посмотрите на большинство функций libc с кучей аргументов!!!

вот это и есть убожество. понять в какие комбинации переменных допустимы без документации невозможно.


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

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

Нормальные люди пишут самодокументированный код! А ССЗБ либо не пишут комментариев вообще, либо пишут их где попало.


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

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

Нормальные люди пишут самодокументированный код! А ССЗБ либо не пишут комментариев вообще, либо пишут их где попало.

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

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


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

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

Какой неописуемо удобный в работе вариант :-/


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1897
Eddy_Em писал(а):
Нормальные люди пишут самодокументированный код! А ССЗБ либо не пишут комментариев вообще, либо пишут их где попало.

Самодокументированный код по определению не содержит никаких комментариев. И да, это правильный подход, правда не во всех случаях.


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

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

а вот с возвращением массива, ничего информационного нет.
ну и ? фигня же.


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

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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
cheblin писал(а):
но оверлорд функций - это и есть тот самый инструмент который позволяет сделать код самодокументированным.


Не делают. Механизм перегрузки не ограничивает в каких случаях его можно использовать, а в каких нужно.
Неправильное использование инструмента не проблема инструмента.
А наличие перегрузки очень часто выглядит по пословице, что если у тебя в руках молоток, то все вокруг для тебя начинает выглядеть как гвоздь.

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

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


В большинстве случаев это таки следствие косяка при проектировании.


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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
cheblin писал(а):
а вот с возвращением массива, ничего информационного нет.
ну и ? фигня же.


А в С++ как?


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

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


А в С++ как?

в JAVA например так
Код:
public static int[] numbers(){
        int[] A = {1,2,3};
        return A;
    }

только Вы про JAVA почему то не спрашиваете, а всё про С++ ... интересно почему?


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1897
fr0ster писал(а):
В большинстве случаев это таки следствие косяка при проектировании.

Или неудобство использования штатных средств. Функции с большим количеством параметров это сигнал о том, что передавать их нужно в виде структуры. Если делать это средствами С, то получается очередной SPL/HAL.


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1897
fr0ster писал(а):
А в С++ как?


Например так:
Код:
struct TestContainer {
    int x;
    int y;
};

using TestBundle = TestContainer[2];

TestBundle&& myfunction(int x, int y) {
    TestBundle bundle {{x, y}, {x, y}};

    return std::move(bundle);
}


Правда, пользы от этого не очень много, массивы при попытке использовать компилятор ругается на то, что массывы не присваиваются. Тем не менее, в С++, например char*, char[1], char[3] - три разных типа (хотя в некоторых случаях делается type decay и эти три типа могут оказаться совместимы). В С это не так.


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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
evsi писал(а):
fr0ster писал(а):
А в С++ как?


Например так:


Я так понял имелось в виду такое
Код:
int[] numbers()
, что cheblin и подтвердил.


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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
cheblin писал(а):
только Вы про JAVA почему то не спрашиваете, а всё про С++ ... интересно почему?


До сих пор в основном примеры были из С с/без плюсов/крестов.
А так то и обджектив си и свифт и руби и питон можно вспоминать, и шкалу, почему нет то, если джаву вспомнили?


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1897
fr0ster писал(а):
Я так понял имелось в виду такое
Код:
int[] numbers()
, что cheblin и подтвердил.

Собственно, это тоже самое. Просто на тип возвращаемого значения вида "int[3]" ругается компилятор. Через using это дело обходится.


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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3157
Тогда уж проще возвращать указатель в С.
Сомневаюсь что такие пляски с бубном в С++ стоят выделки.
А Джаву не везде будешь использовать.
Джава на СТМ32... это почти наброс на вентилятор :)


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

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

Возвращать указатель привычнее, но не проще. На плюсах можно сделать куда удобнее (к тому же эффективнее) - возвращать rvalue ссылки и дать компилятору возможность со всем этим хозяйством разбираться. А "снаружи" пользоваться так, как будто это обычные переменные. Причем за счет return value optimization и copy elision все это будет весьма эффективно передаваться в-из вызываемых функций. С на такое не способен в принципе.
fr0ster писал(а):
А Джаву не везде будешь использовать.
Джава на СТМ32... это почти наброс на вентилятор :)

Она, кстати, существует. Правда, я не слышал, что бы она пользовалась большой популярностью.


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
а что плохого если б в С бы в дефиниции возвращаемого аргумента функции были бы такие же НИЧЕГО не значащие скобочки [] массива как и в передаваемом аргументе сейчас? (аля JAVA). в чем трагедия?
Цитата:
Джава на СТМ32... это почти наброс на вентилятор :)

почему? вполне реализуемо

правда усилий это потребует достаточно много. да и при наличии RUST-а не очень то и нужно.


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

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2527
Откуда: КЧР, поселок Нижний Архыз
fr0ster писал(а):
Джава на СТМ32... это почти наброс на вентилятор :)

Я сейчас с STM32F0 бьюсь, там тупо добавление double увеличивает размер прошивки на 8кБ!!!
А без double, на fixed point, приходится 64-битные целые вводить, что увеличивает код почти на те же 8кБ...

Что же будет в случае жабки?


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

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

будет тоже самое...или даже лучше

по моей ссылке проект трансляции (кодогенерации) JAVA кода в С.
выходной С шный код будет насколько хорош, насколько будет хорошо будет написан транслятор.
написав на JAVA
Код:
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Prints the string to the console.
    }
}

получаем
Код:
#include <stdio.h>

int main(void)
{
    printf("Hello World!\n");
}

и никаких компромиссов!
Сейчас много высокоуровневых языков транслируются в JavaScript, для того чтобы в вебе пыщь-пыщь

BlackBox похожим образом, по спецификации, которая по сути представляет собой обычный JAVA код описывающий протокол, генерирует исходники на С, C# и JAVA.
кодогенерация очень интересная тема, по которой к сожалению крайне мало информации.


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1897
Eddy_Em писал(а):
Что же будет в случае жабки?

У жабы толстый рантайм, но бинарник весьма компактен и растет достаточно медленно. Это при том, что в бинарнике есть куча сугубо текстовой информации (типа названий полей/методов/пакета).


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

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


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1897
cheblin писал(а):
кодогенерация очень интересная тема, по которой к сожалению крайне мало информации.

Информации много, просто она, в основном, относится к 70хх годам, когда была написана основная масса книжек на эту тему. И привычно найти в сети нужную книжку часто просто не получается. Скажем, есть такая "Грис Д. Конструирование компиляторов для цифровых вычислительных машин". Там разобраны все этапы, включая кодогенерацию.


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

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


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

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2527
Откуда: КЧР, поселок Нижний Архыз
Генерировать код на каком-то ЯП — самый большой бред, который только можно придумать! Потому что результат все равно будет нечитаемым, как тот же XML…
Вон, любители калокуба сильно могут поковыряться в той жести, что им этот самый калокуб нагенерирует?


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

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


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

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


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

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

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