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

 
 
26 страниц V  « < 8 9 10 11 12 > »   
Reply to this topicStart new topic
> Библиотеки для STM32
Шаманъ
сообщение Apr 7 2017, 12:48
Сообщение #136


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Alechek @ Apr 7 2017, 10:18) *
Ладно, последняя попытка cool.gif
Не все пишут на С++ и С++11
Те же библиотеки stm32 написаны на С. А ему пофиг на
Код
int value = 10;
int * pointer;
....
pointer = value;


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

P.S. ИМХО, логичные и информативные названия переменных ничуть не хуже венгерской нотации работают, еще и код более "читабельный" получается.

Сообщение отредактировал Шаманъ - Apr 7 2017, 12:50
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 7 2017, 13:06
Сообщение #137


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

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



Цитата(Шаманъ @ Apr 7 2017, 17:48) *
А че, редакторы нормальные отменили? У меня только мышь подводишь к переменной и сразу видно тип переменной, ошибиться нереально.

Подгружать весь проект вместо того, чтобы в блокноте бегло глянуть на кусок кода? (когда тип определен где-то в дебрях кучи *.h)

И да, тут уже был ответ:
Цитата(Forger @ Apr 4 2017, 18:05) *
Автоматизация "мартышкиного" труда еще не отменяет самого факт такого труда )))
К тому же даже в данный момент далеко не все среды (тоже обратите на тему и раздел где мы сидим) поддерживают такие вещи.....
Речь в данном случае не про внешние редакторы, а целиком про среды проектирования (Keil, Eclipse, Crossworks и др).
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 7 2017, 13:17
Сообщение #138


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

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



Цитата(Obam @ Apr 7 2017, 17:42) *
Назад на пальму к корням в ассмы!!! Шутка…

не куда не назад. пока единственный путь.

2Alechek Где я противоречу? где я в имеми переменой в своем примере вставил хоть что-то от типа переменной?

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

void f(LPSTREADMATA pInData) - встретив такую запись не понятно что передается? вызывается ли копирющий контруктор, делается ли копия переменной/структуры типа LPSTREADMATA. вам необходимо в имя переменной воткнуть pInData, иначе не видно, что передается указатель. вам, чтоб не запутаться, нужны наверно и в имя типа вставка LPSTREADMATA, и в имя переменной вставка pInData.

я не тайпдефю указатели. не делаю LPSTREADMATA и т.п. типы. я пишу
void f(STREADMATA *inData) - по такой записи я сразу вижу, что передается указатель, и более того, я вижу, что данные по указателю inData внутри функции будут изменены. т.е. функция f() меняет структуру, указатель на которую передается в качестве аргумента, внешняя структура будет изменена. а вашем стиле, без дополнительных вставок в имена типа и переменной, не понятно... будет меняться структура или нет, т.е. не понятно передается указатель или копия структуры будет создана на стеке.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 7 2017, 13:54
Сообщение #139


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Alechek @ Apr 7 2017, 16:06) *
Подгружать весь проект вместо того, чтобы в блокноте бегло глянуть на кусок кода? (когда тип определен где-то в дебрях кучи *.h)

Используемый нынче у меня редактор умеет более-менее успешно вытягивать и без проектов такие штуки из "дебрей кучи *.h" sm.gif

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


Цитата(juvf @ Apr 7 2017, 16:17) *
я не тайпдефю указатели. не делаю LPSTREADMATA и т.п. типы. я пишу
void f(STREADMATA *inData)

Кстати да, специальные типы с указателями это зло. Как-то с libpng возился, a там любители typedefов наплодили и указателей, и указателей на указатели - жесть...
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 7 2017, 14:01
Сообщение #140


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

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



оффтоп по поводу переделки тайпдефов.... тут говнолидер - это Texas Instuments.... со своею TI-RTOS и SPL.

их код создание таска
Цитата
Void heartBeatFxn(UArg arg0, UArg arg1)
{
}

хорошо, что идэ у них на эклипсе.... что такое Void? ctrl+ЛКМ улетаем в какой-то хидер
Код
#define Void xdc_Void
ещё раз ctrl+ЛКМ, ултетаем в
Код
#define xdc_Void        void

ну да ладно.... Void интуитивно понятно что это void. А вот что такое UArg arg0? ctrl+ЛКМ (ещё раз спсибо эклипсу, чтоб я без него делал?) улетаем в хидер
Код
typedef xdc_UArg        UArg;

далее ctrl+ЛКМ - полёт по хидерам...
Код
typedef uintptr_t       xdc_UArg;
-
uintptr_t вроде всё понятно.... u - значит unsigned, int - это int, ptr - т.е. pointer, т.е. указатель, _t - тип. делаем контрольный ctrl+ЛКМ
Код
typedef unsigned int uintptr_t;


NO COMMENT!!!

а вы говорите заглянул по быстрому в блокнот ))))


Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 7 2017, 14:06
Сообщение #141


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(juvf @ Apr 7 2017, 17:01) *
тут говнолидер - это Texas Instuments.... со своею TI-RTOS и SPL.

Оо! Зря я наехал на libpng laughing.gif
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 7 2017, 14:17
Сообщение #142


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

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



Цитата(juvf @ Apr 7 2017, 18:17) *
2Alechek Где я противоречу? где я в имеми переменой в своем примере вставил хоть что-то от типа переменной?

Вам, чтобы видеть лучше тип, надо *, но при этом вы против некоторго символа в другом месте.
Хотя и то и другое способствует повышению скорости писания кода одновременно с уменьшеним вероятности ошибки.

Цитата(Шаманъ @ Apr 7 2017, 18:54) *
Хоть в общем случае вопрос скорее не про инструменты, а про написание понятного и правильного кода, а также про организацию работ в целом - согласитесь, что "в блокноте бегло глянуть и внести изменения в проект подробности которого уже крепко забыты" это самый верный способ создания подобных проблем.

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

Цитата(juvf @ Apr 7 2017, 19:01) *
Код
Void heartBeatFxn(UArg arg0, UArg arg1)

а вы говорите заглянул по быстрому в блокнот ))))


вот и я о том же.
При:
Код
Void heartBeatFxn(UArg p_arg0, UArg p_arg1)

сразу видно. что речь идет об указателях. И не важно, как там дальше оно раскрывается.

Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 7 2017, 14:19
Сообщение #143


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

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



Цитата(Alechek @ Apr 7 2017, 15:38) *
Скорее всего, и имелось ввиду использовать вместо memcpy присвоение неких структур через указатели на них.

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

Цитата
вот, только массивы в структурах могут быть открытими... (в С)

Дык, они открыты по-умолчанию и в С++ ))

В плюсах этот кусок делается через ссылку на некий класс, которые в своих недрах содержатся нужные данные.
А через соотв. метод этого же класса "достучаться" до его данных.


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


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Alechek @ Apr 7 2017, 17:17) *
сразу видно. что речь идет об указателях. И не важно, как там дальше оно раскрывается.

Та не нифига там не видно. За очень редким исключением указатель лучше не заталкивать в тип, а каждый раз объявлять явно - намного понятнее, ибо буква р это просто символ, который может быть в разных местах по разным причинам, а вот * в этом месте это только указатель. Т.е. в первом случае надо еще подумать и быть намного более внимательному, а во втором видно сразу.
Цитата
Иногда приходится...

Я не говорю по какие-то исключения - бывает всякое, я про нормальную работу.
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 7 2017, 14:40
Сообщение #145


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

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



Цитата(Alechek @ Apr 7 2017, 19:17) *
Код
Void heartBeatFxn(UArg p_arg0, UArg p_arg1)

сразу видно. что речь идет об указателях. И не важно, как там дальше оно раскрывается.
мне не видно.... пусть я слеп. Но вам видно?! УКАЗАТЕЛИ!? Одну ногу отстрелили! ))) я же раскрыл все тайпдефы. это не указатели, это unsigned int
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 7 2017, 14:55
Сообщение #146


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

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



Цитата(juvf @ Apr 7 2017, 19:40) *
мне не видно.... пусть я слеп. Но вам видно?! УКАЗАТЕЛИ!? Одну ногу отстрелили! ))) я же раскрыл все тайпдефы. это не указатели, это unsigned int

Мне видно, что это указатель c конкретным размером в 32 бит:
Код
typedef uintptr_t       xdc_UArg;


Кстати, такое есть и в WINDOWS:
Цитата
LONG_PTR A signed long type for pointer precision. Use when casting a pointer to a long to perform pointer arithmetic.

This type is declared in BaseTsd.h as follows:
C++

#if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 7 2017, 15:05
Сообщение #147


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(juvf @ Apr 7 2017, 19:01) *
uintptr_t вроде всё понятно.... u - значит unsigned, int - это int, ptr - т.е. pointer, т.е. указатель, _t - тип. делаем контрольный ctrl+ЛКМ
Код
typedef unsigned int uintptr_t;


NO COMMENT!!!

Отличный пример того, как буковки в префиксах имён могут быть неверно истолкованы.
(Но вообще-то uintptr_t - это стандартный тип (из stdint.h), и его название означает "беззнаковое целое, размер которого достаточен для хранения указателя").

Цитата(Alechek @ Apr 7 2017, 19:17) *
При:
Код
Void heartBeatFxn(UArg p_arg0, UArg p_arg1)

сразу видно. что речь идет об указателях. И не важно, как там дальше оно раскрывается.

Совершенно не видно. Может, p_ - это от слова "parameter". А может, просто автор любит писать p_. Или имя осталось от прошлой версии интерфейса функции, когда этот параметр был указателем, а в нынешней версии он уже давно не указатель. В любом случае придётся проверять.
Ещё один момент. Вы же в своих проектах используете сторонние библиотеки? И наверняка среди них есть такие, которые не придерживаются привычного вам соглашения о префиксах. Так что вам, с вашим подходом придётся всё время отслеживать, в каком вы сейчас коде - в своём (с привычными вам префиксами имён) или в стороннем (который, не использует таких соглашений).
Поэтому сейчас есть тенденция отказа от таких префиксов.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 7 2017, 15:05
Сообщение #148


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

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



Цитата(Alechek @ Apr 7 2017, 19:55) *
Мне видно, что это указатель c конкретным размером в 32 бит:
Код
typedef uintptr_t       xdc_UArg;
Выстрел!!! Вторую ногу отстрелили. в си/с++ нет типа uintptr_t, где-то должно быть определение... в каком-нить хидере. И оно у TI есть

Код
typedef unsigned int uintptr_t;
- т.е. uintptr_t определйн как беззнаковое целочисленное, а не указатель. причем.... как может указатель быть c конкретным размером в 32 бит? указатель может быть на 32-х битное... на структуру, на void. а так-то размер любого указателя одинаковый.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 7 2017, 15:59
Сообщение #149


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

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



Цитата(AHTOXA @ Apr 7 2017, 20:05) *
Совершенно не видно. Может, p_ - это от слова "parameter". А может, просто автор любит писать p_. Или имя осталось от прошлой версии интерфейса функции, когда этот параметр был указателем, а в нынешней версии он уже давно не указатель. В любом случае придётся проверять.

Соглашусь. Сразу не видно. Но заставит задуматься.
Но, если стиль будет одинаков по всему этому однотипному коду (сторонняя библиотека), и с ним уже знаком, то и думать не придется.

Вообще, когда-то пытался использовать принцип FreeRTOS, во времена ее освоения. Понял, что бездумное повальное присвоение префиксов типа в имени переменной и, особенно, функций - путь к граблям и траблам. Поплевался достаточно при рефакторинге своего кода. wacko.gif

Но вот выделение указателей, глобальных переменных (в т.ч. переменных класса) - это святое. Походил уже по граблям безликих переменных, набил шишек. twak.gif

Каждый выбирает свои грабли. smile3046.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 7 2017, 16:08
Сообщение #150


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

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



Цитата(Alechek @ Apr 7 2017, 18:59) *
Но вот выделение указателей, глобальных переменных (в т.ч. переменных класса) - это святое.

Скажем, имеем указатель на класс.
Компилятор не позволит присвоить ему абы что и не позволит присвоить сам указатель чему-то левому.
Попытка неправильного разыменования полей такого класса тоже невозможна - не получится использовать "." вместо "->"...
Отсюда простой вопрос: зачем в имени указателя на класс указывать тот факт, что он указатель?
Приведите пример, где без этого никак не обойтись.

Какой смысл каким-то образом выделять в имени переменных класса (правильно называть "поля" класса) их расовую принадлежность?
Приведите пример, где без этого никак не обойтись.

Приведите пример, где без глобальных переменных невозможно обойтись
или хотя бы приведите пример, где необходимо выделения имени глобальной переменной?

Цитата
Походил уже по граблям безликих переменных, набил шишек.

Безликость переменной лечится нормальным и осмысленным именем, но никак не префиксами-суффиксами-аппендиксами-подчеркиваниями.

Цитата
Каждый выбирает свои грабли
С этим трудно не солгаситься sm.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

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

 


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


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