@ru_electronics

Страница 433 из 718
Martin
14.12.2017
10:11:47
благодарствую!

kaktys
14.12.2017
10:12:18
4 digit 7 segment display (common anode)

Dmitry
14.12.2017
18:33:25
товарищи, вопрос из зала. как подручными средствами убрать трёхфазную помеху с частотника в ~200КГц и/или как это сделать правильно

Bastad
14.12.2017
18:35:25
Моторный дроссель, экранированный моторный кабель.

Google
Кирилл
14.12.2017
18:59:29
Снова вас подёргаю мелочёвкой. Объявляю структуру в основном цикле, как воспользоваться этой структурой в прерывании?

kaktys
14.12.2017
19:03:58
Никак, только глобально объявляй

Кирилл
14.12.2017
19:07:03
Глобальное объявление позволит произвести местное выделение памяти при необходимости и очистку потом?

или пойдёт статикой в прошивку?

Maxim
14.12.2017
19:07:32
Пойдет статикой

Sanchez
14.12.2017
19:08:38
никто не мешает глобально объявить только указатель

а по месту уже иф(!НУЛЛ) и дальше по смыслу

Кирилл
14.12.2017
19:11:50
стм32

никто не мешает глобально объявить только указатель
Т.е. ipdstruct *ABC; ... { ipdstruct *IPDData = malloc(sizeof(ipdstruct*)); ABC = IPDData; } { ABC->A = 0xa; } Такого рода?

kaktys
14.12.2017
19:16:16
Да

Кирилл
14.12.2017
19:18:06
В случае если ABC выбросить и сделать так ipdstruct *IPDData; { IPDData = malloc(sizeof(ipdstruct*)); } { IPDData->A = 0x0a; } результат будет тем же?

Просто я уже путаюсь в этих указателях и указателях

Google
Кирилл
14.12.2017
19:18:38
на указатели*

kaktys
14.12.2017
19:37:00
Указатель - адрес того куда он указывает

Кирилл
14.12.2017
19:38:13
Нет, это я понимаю, хехе. В любом случае, уже проверил - в дебаге всё прилично, спасибо за подсказку.

kaktys
14.12.2017
19:38:20
А там уже что другое лежит

Хоть снова указатель

Кирилл
15.12.2017
09:36:37
Я ведь не могу просто достать текущий адрес из DMA регистра, сверить его с предыдущим и проверить по нему уложенный байт?

Имею ввиду, к примеру int *i; int p; ... i = p;

Alexandre
15.12.2017
10:21:51
Имею ввиду, к примеру int *i; int p; ... i = p;
немного не понял про DMA, но код в последнем сообщении вполне легитимен

хотя стоп

*i = p

(int *) - это не int

это "адрес того места, где лежит int"

Кирилл
15.12.2017
10:27:52
p = DMA1_Channel4->SMAR //текущий адрес, на котором остановился DMA &i = p; if (i == '\r') примерное представление, офк он не работает изза несоответствия типов

Alexandre
15.12.2017
10:36:46
int *i; p = DMA1_Channel4->SMAR; i = (int *)p; if (*i == '\r') ...

если p - это указатель (адрес)

Кирилл
15.12.2017
10:48:04
р - обычная переменная, в значение которой кладется значение текущего адреса из регистра. И мне нужно воспользоваться значением переменной как адресом, по которому считать байт.

Alexandre
15.12.2017
10:55:16
byte *i; p = DMA1_Channel4->SMAR; i = (byte *)p; if (*i == '\r') ...

в С "обычная переменная" имеет тип

char *i =(char *)DMA1_Channel4->SMAR; if (*i == '\r') ...

Google
Alexandre
15.12.2017
11:03:23
если это не поможет, можно попробовать по-другому, но это посложнее... нужно определить char х[] "руками" по адресу начала памяти, а потом брать данные по х[adr], но как это сделать на конкретном МК не подскажу

Кирилл
15.12.2017
11:04:52
Весь вопрос в скорости

У меня сейчас разбор строки висит на прерывании RXNE, и занимает до 300 тактов. Это слишком много при поштучном получении данных на скоростях 8мгц/115кБод

Поэтому хотел задействовать dma, облегчив прерывания и вынеся парсер за их пределы, но для этого нужно выделить буфер примерно известной длины, не опираясь на прерывания DMA.

Andy
15.12.2017
11:19:27
Поэтому хотел задействовать dma, облегчив прерывания и вынеся парсер за их пределы, но для этого нужно выделить буфер примерно известной длины, не опираясь на прерывания DMA.
В перерывах только очень простой парсер можно размешать. Как я понял у вас проблема определения необходимого объема буфера для приема всей команды. Поэтому на мой взгляд нужна очередь элементов команд

Кирилл
15.12.2017
11:21:57
У модема на каждую команду не только своя длина ответа, но и количество и длины отдельных параметров тоже разные. У двух команд так вообще массив отваливается.

Andy
15.12.2017
11:28:31
У модема на каждую команду не только своя длина ответа, но и количество и длины отдельных параметров тоже разные. У двух команд так вообще массив отваливается.
Это не страшно, вы же в очередь будете пихать отдельные элементы. Не важно какой будет длины команда. Главное выделять достаточно памяти на элемент и на всю очередь

Кирилл
15.12.2017
11:34:40
Есть хорошие статьи по оптимизации кода? Кроме объявления локальных переменных и экономии на библиотечных функциях я больше ничего не знаю.

Сергей
15.12.2017
12:20:26
Коллеги, вопрос. Есть n-е количество датчиков ds18b20 . Они запаиваются в схему и их нужно будет проинициализировать, кто где. Т.е. с помощью микросхемы GPIO отключать и подключать датчик. Вот тут вопрос: что лучше отключать. Была мысль запитать прямо от микросхемы GPIO, но потом вспомнил про паразитное питание от DATA. Может тогда лучше по земле подключить? Но тут будет сильный шум. Либо вариант через транзисторы подключать ножку data

Есть варианты?

Lord
15.12.2017
12:23:33
PNP-транзистор на питание?

Сергей
15.12.2017
12:23:52
Не получиться, т.к. будет паразитно питаться от дата

Thorn
15.12.2017
12:23:57
их же можно подключать несколько параллельно, протокол 1-wire позволяет

Lord
15.12.2017
12:24:06
ну так выключил питание, а дату в ноль положил или на вход переключил

и не будут питаться

Сергей
15.12.2017
12:24:49
как бы дату хотелось одну на все датчики

Lord
15.12.2017
12:25:16
а датчики по одному отключать хочется что ли?

Сергей
15.12.2017
12:25:30
именно

Lord
15.12.2017
12:25:47
а зачем?

Admin
ERROR: S client not available

Google
Сергей
15.12.2017
12:25:51
чтобы понять какой датчик где. В серии инициализировать

Lord
15.12.2017
12:26:04
ручками отключать что ли питание?

Сергей
15.12.2017
12:26:09
Когда у тебя десяток датчиков на плате, а плат тысячи штук, то как понять где какой?

Lord
15.12.2017
12:26:31
ну у каждого вроде уникальный адрес есть

Сергей
15.12.2017
12:26:36
Ага

Lord
15.12.2017
12:26:38
или надо именно физическое положение определить?

Сергей
15.12.2017
12:26:39
И как его узнать?

руками перед впайкой переписывать?

shadowsoul
15.12.2017
12:26:54
И как его узнать?
а ты грей их феном, при опросе)

Lord
15.12.2017
12:26:55
а, ну так там же в 1вайре есть процедура определения всех адресов!

в даташитах описана

Сергей
15.12.2017
12:27:13
а ты грей их феном, при опросе)
мсье знает толк в серийном производстве

Lord
15.12.2017
12:27:15
по 1 биту определяются все адреса и строится дерево адресов , както так

shadowsoul
15.12.2017
12:27:29
мсье знает толк в серийном производстве
это надёжнее чем ёбаная гирлянда gpio

Lord
15.12.2017
12:27:42
или надо физическое местоположение сопоставить с адресами?

Сергей
15.12.2017
12:27:43
стикеры запрещены. Фейспалм. Там отдельная микруха будет.

Физическое с адресами

именно

при чём программно

Google
shadowsoul
15.12.2017
12:28:14
но при этом они припаяны прямо на плату, а не на разьёмах?

Lord
15.12.2017
12:28:21
[из серии банальных советов] сдвиговый регистр 74HCTзабылсколько, и от его выходов питанюся датчики

shadowsoul
15.12.2017
12:28:27
какой-то страшный изврат ты задумал

Lord
15.12.2017
12:28:54
или. куча токовых ключей 74HCТ тоже забыл сколько и пропускают или нет DATу на датчики

:)

Сергей
15.12.2017
12:28:59
Готов рассмотреть варианты. Есть, положим 8 датчиков на плате. Мне надо сопоставить адресс с его физическим расположением

Как вы решите?

Страница 433 из 718