реклама на сайте
подробности

 
 
26 страниц V  « < 9 10 11 12 13 > »   
Reply to this topicStart new topic
> Библиотеки для STM32
Alechek
сообщение Apr 7 2017, 16:31
Сообщение #151


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Forger @ Apr 7 2017, 21:08) *
Отсюда простой вопрос: зачем в имени указателя на класс указывать тот факт, что он указатель?
Приведите пример, где без этого никак не обойтись.

Обойтись всегда можно. Вопрос в последствиях. Которые я уже приводил
Код
memcpy( WorkData, InData, sizeof( WorkData));
memcpy(&WorkData, &InData, sizeof(*WorkData));

Наличие префикса сильно помогает в поиске таких багов.

Цитата(Forger @ Apr 7 2017, 21:08) *
Какой смысл каким-то образом выделять в имени переменных класса (правильно называть "поля" класса) их расовую принадлежность?
Приведите пример, где без этого никак не обойтись.
или хотя бы приведите пример, где необходимо выделения имени глобальной переменной?


Суть в том, чтобы было видно, что изменяется такая переменная, которая может использоваться вне тела функции.
И можно было не вникая и не подгружая ВЕСЬ проект, сказать что-то типа: чувак, вот ты зуб даешь, что ЭТУ переменную можно модифицировать неатомарно?
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 7 2017, 16:44
Сообщение #152


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Alechek @ Apr 7 2017, 19:31) *
Обойтись всегда можно. Вопрос в последствиях. Которые я уже приводил
Код
memcpy( WorkData, InData, sizeof( WorkData));
memcpy(&WorkData, &InData, sizeof(*WorkData));

Неужели наличие префиксов/суффиксов в переменных сильно помогает в поиске багов в таком "коде"? wink.gif

sizeof(WorkData) = 4 - размер указателя в байтах
чесс слово никогда не сталкивался с такой необходимостью - копировать указатель побайтно! smile3046.gif

Даже по пьяни я так не сумею написать, т.к. подобный код сам по себе есть рассадник багов на пустом месте - с memcpy нужно быть предельно аккуратным!


Цитата
Суть в том, чтобы было видно, что изменяется такая переменная, которая может использоваться вне тела функции.
И можно было не вникая и не подгружая ВЕСЬ проект, сказать что-то типа: чувак, вот ты зуб даешь, что ЭТУ переменную можно модифицировать неатомарно?

Для этого сделайте соотв. функции и обращайтесь к этой глабальной переменной ТОЛЬКО через эти функции, тогда этой переменной можно добавить static.
Внутри этих функций обеспечивайте атомарность.
Какой смысл это делать по всему коду, это если можно сделать в одном месте и в одном месте это отладить и проверить?


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 7 2017, 17:57
Сообщение #153


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Forger @ Apr 7 2017, 21:44) *
Неужели наличие префиксов/суффиксов в переменных сильно помогает в поиске багов в таком "коде"? wink.gif

sizeof(WorkData) = 4 - размер указателя в байтах
чесс слово никогда не сталкивался с такой необходимостью - копировать указатель побайтно! smile3046.gif


Знаете, я тоже не сталкивался с НЕОБХОДИМОСТЬЮ копировать указатель побайтно. Но порой такое возникает вопреки желанию.
В этих 2-х строчках ошибки.

Смотрите чуть шире.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 7 2017, 18:01
Сообщение #154


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Alechek @ Apr 7 2017, 20:57) *
В этих 2-х строчках ошибки.

Это не так - ошибки во ВСЕХ 4-х строчках sm.gif
https://electronix.ru/forum/index.php?s=&am...t&p=1491902

Ответьте наконец-то на этот вопрос, который тут уже прозвучал не раз: "Неужели наличие префиксов/суффиксов в переменных сильно помогает в поиске багов в таком "коде"?"


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 7 2017, 18:41
Сообщение #155


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



ДА, помогает.

Более развернутый пример, как это случается.
Код
struct sdata
{
...
}

const struct sdata DefalutData = {1, 2};

void f(struct sdata * OutData)
{
...
//тра-ля-ля на строк 20-30 кода
...
  memcpy(OutData, &DefaultData, sizeof(DefautData); // тут сложно будеть выявить недостачу/переизбыток [?*]
  ...
  // дальнейшие манипуляции с OutData

}


повторю, это все равно упрощенный случай.
в конкретном случае можно было бы и обойтись
*OutData = DefaultData; // Хотя по мне так тоже некрасиво именовано.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 7 2017, 18:55
Сообщение #156


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Alechek @ Apr 7 2017, 21:41) *
в конкретном случае можно было бы и обойтись
*OutData = DefaultData;

Так в чем проблема сразу сделать именно так?


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 8 2017, 05:29
Сообщение #157


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Forger @ Apr 7 2017, 23:55) *
Так в чем проблема сразу сделать именно так?

3-я строчка снизу ответа выше.
Читать пока не поможет.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 8 2017, 09:59
Сообщение #158


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Я обратил внимание, что ваш код из примера по ходу развития этой темы неоднократно эволюционировал!
Прихожу к выводу, что вы все же прислушивались к постам участников, которые советовали как нужно изменить изначально кривой код. Это радует ))
В итоге пример перерос в то, чем он должен быть:
Код
*OutData = DefaultData;
(на названия переменных уже не обращаю внимание, в данном случае это не столь принципиально).

В этом случае при присвоении одной структуры другой неявно вызывается оператор копирования, внутри которого как раз и вызывается та самая memcpy, но вызывается с правильными параметрами.
Ошибиться в этом случае уже не получится - компилятор заругается. Цель достигнута! Бинго!

Однако, я никак не пойму вашего упорства .... впрочем, догадываюсь ))
Но это уже отдельный разговор и не для этой темы.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 18 2017, 06:03
Сообщение #159


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



раз тут пошло обсуждение стилей.... спрошу тут...
в абдурино есть представление чисел в двоичной форме. например 0х82 выглядит в коде как-то так "b10000010". можно что-нибудь подобное макросами в си/с++ замутить?
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 18 2017, 06:16
Сообщение #160


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(juvf @ Apr 18 2017, 09:03) *
раз тут пошло обсуждение стилей.... спрошу тут...
в абдурино есть представление чисел в двоичной форме. например 0х82 выглядит в коде как-то так "b10000010".

Это - анахронизм, оставшийся в наследство от ассемблера или некоторых с-компиляторов (я сам таким грешил на PIC-контроллерах, в свое время).
Лишь еще один способ представления "магических чисел".
В чистом коде не должно быть "магических" чисел!
Их все заменяют осмысленными #define, которые стараются размещать в одном месте.
Битовые же поля удобно упаковывать в структуры. Все современные компиляторы поддерживают безымянные union. Это позволяет к одним и тем же полям в структуре обращаться побитово или сразу словом.

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

з.ы С одной стороны хорошо, что существует Arduino - значительно легче влиться в эту профессию, а с другой - он тянет кучу вредных привычек, от которых потом сложно переучиваться.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 18 2017, 06:24
Сообщение #161


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Есть одно место, где двоичная кодировка рулит - нарисовать свой шрифт для ЖКИ. Я так делал. Еще и в четверичной системе делал, когда одна точка была представлена двумя битами. В данном форуме этих макросов выкладывалось не однажды.
Читая форум, копирую интересующие меня куски программ в файл. Кое от чего уже можно и избавиться. Можно еще и ссылки копировать.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 18 2017, 06:46
Сообщение #162


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(ViKo @ Apr 18 2017, 09:24) *
Есть одно место, где двоичная кодировка рулит - нарисовать свой шрифт для ЖКИ. Я так делал.

В настоящее время и в этом нет нужды - существует масса прог, которые сами формируют С-файл из нужного или нового/подправленного шрифта.
Тоже самое касается картинок.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Reflector
сообщение Apr 18 2017, 06:50
Сообщение #163


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 15-07-06
Пользователь №: 18 836



Цитата(juvf @ Apr 18 2017, 09:03) *
в абдурино есть представление чисел в двоичной форме. например 0х82 выглядит в коде как-то так "b10000010". можно что-нибудь подобное макросами в си/с++ замутить?

В C++ можно писать 0b10000010, если компилятор не сильно старый.
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 18 2017, 07:05
Сообщение #164


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(Forger @ Apr 18 2017, 11:16) *
Это - анахронизм
я б так не сказал.... в современном verilog он есть.

Цитата
все заменяют ... #define
а может действительно, сгенерировать хидер и там 256 (или 2^16) дефайнов определить. сп за идею

Цитата
Все современные компиляторы поддерживают безымянные union. Это позволяет к одним и тем же полям в структуре обращаться побитово или сразу словом.
да, но только это обращение "долгое". гораздо быстрее с константами работать, чем из юниона вытаскивать битики.

Цитата(Reflector @ Apr 18 2017, 11:50) *
В C++ можно писать 0b10000010, если компилятор не сильно старый.
Вкатило. То что нужно. СПАСБО!!!!
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 18 2017, 07:17
Сообщение #165


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Код
/* Макро для использования двоичного формата чисел */
#define _BITSET(bits) \
  ((uint16_t) ( \
  (bits % 010) | \
  (bits / 010 % 010) << 1 | \
  (bits / 0100 % 010) << 2 | \
  (bits / 01000 % 010) << 3 | \
  (bits / 010000 % 010) << 4 | \
  (bits / 0100000 % 010) << 5 | \
  (bits / 01000000 % 010) << 6 | \
  (bits / 010000000 % 010) << 7 | \
  (bits / 0100000000 % 010) << 8 | \
  (bits / 01000000000 % 010) << 9 | \
  (bits / 010000000000 % 010) << 10 | \
  (bits / 0100000000000 % 010) << 11 | \
  (bits / 01000000000000 % 010) << 12 | \
  (bits / 010000000000000 % 010) << 13 | \
  (bits / 0100000000000000 % 010) << 14 | \
  (bits / 01000000000000000 % 010) << 15))
#define BIN(bits) _BITSET(0##bits)

/* Макро для использования четверичного формата чисел */
#define _PAIRSET(digits) \
  ((uint16_t) ( \
  (digits % 010) | \
  (digits / 010 % 010) << 2 | \
  (digits / 0100 % 010) << 4 | \
  (digits / 01000 % 010) << 6 | \
  (digits / 010000 % 010) << 8 | \
  (digits / 0100000 % 010) << 10 | \
  (digits / 01000000 % 010) << 12 | \
  (digits / 010000000 % 010) << 14))
#define QUAD(digits) _PAIRSET(0##digits)
Go to the top of the page
 
+Quote Post

26 страниц V  « < 9 10 11 12 13 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th August 2025 - 22:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016