
Dr
15.01.2017
15:00:05
pwm=0x20001fc8;
memset(*pwm, 0, size * sizeof(PWM_t));
это неверно
сча найду кусок кода
p* pwm = (p (*))0x20001fc8;
memset(pwm, 0, size * sizeof(PWM_t));

Google

Dr
15.01.2017
15:02:27
что-то около

Ruslan
15.01.2017
15:02:36
я понял про что ты
типо я устанавливаюсь на указатель на указатель и стираю его, а не сам буфер, очень похоже

Dr
15.01.2017
15:03:33
нет, ты вот тут
pwm=0x20001fc8;
не делаешь указатель
ты записываешь в ячейку памяти значение 0x20001fc8
и потом в мемсете берешь указатель на это значение
а по какому оно адресу лежит на самом деле - фиг знает

Ruslan
15.01.2017
15:05:14
щас, надо с новыми силами подумать

Dolphin
15.01.2017
16:00:29
Судя по этому:
SrcFilterNull(NULL, &pwm, NULL, end - pwm);
передается указатель *PWM_t,
и тогда мемсет - без звездочки.
я не пойму, почему указатель, на указатель-то? там двумерный массив светиков?!

Ruslan
15.01.2017
16:01:18
как раз со звёздочкой он указывает куда надо, на начало DMA буфера

Dolphin
15.01.2017
16:01:35
то есть адрес правильный?
так работает
Со звездочкой - заполняет таблицу регистров

Google

Dolphin
15.01.2017
16:09:44
И это правильно, что в регистры пишет, потому что *pwm, это адрес указателя на массив

Ruslan
15.01.2017
16:10:00
ага

Dolphin
15.01.2017
16:10:33
А нужен адрес массива
он - pwm

Ruslan
15.01.2017
16:12:10
а что ты туда передаёшь?

LexsZero
15.01.2017
16:12:16
нихрена не понял, зачем там столько указателей второго уровня

Ruslan
15.01.2017
16:12:32
у меня null_filter(NULL, &pwm, NULL, START_SIZE)
да код вообще странно написан, вычищаю понемногу

Dolphin
15.01.2017
16:12:51
они короче унифицировали параметры функций так
и сами запутались

Ruslan
15.01.2017
16:13:00
просто давно в руки си не брал

Dolphin
15.01.2017
16:13:09
я тоже

LexsZero
15.01.2017
16:13:38
не помню когда последний раз юзал двойной поинтер, не считая передачи argv в main

Dolphin
15.01.2017
16:13:41
в той же либе - ниже есть вызов этой лабуды
посмотри туда

Ruslan
15.01.2017
16:14:12
а без * мне в memset приходит (PWM_t **) 0x20001fc8, что как раз указывает на переменную, а не на массив, который находится по адресу 0x20000080

Dolphin
15.01.2017
16:14:26
PWM_t *pwm = DMABuffer;
SrcFilterNull(NULL, &pwm, NULL, end - pwm);
они адрес указателя на массив передают
указатель на указатель на массив

LexsZero
15.01.2017
16:16:18
наркоманы

Google

Dolphin
15.01.2017
16:16:26
пиздец )

Dr
15.01.2017
16:17:33

Ruslan
15.01.2017
16:18:01
хочешь сделать что-то хорошо, сделай это сам (с) злодей из пятого элемента

Dolphin
15.01.2017
16:18:29
++
ну это с двумерными массивами удобно, или в многосвязных списках
void main(){
MyClass*** v = new MyClass**[7];
for (int i = 0; i != 7; i++){
v[i] = new MyClass*[3];
for (int j = 0; j != 3; j++){
v[i][j] = new MyClass(i*j);
}
}
}
экстрим )

Dr
15.01.2017
16:20:19
и нет проблем

Dolphin
15.01.2017
16:20:56
а с объектами как?

Ruslan
15.01.2017
16:21:36
char *original = "awesomeness";
char **pointer_to_original = &original;
(*pointer_to_original) = "is awesome";
printf("%s", original); //is awesome
http://stackoverflow.com/questions/4318881/in-c-what-does-a-variable-declaration-with-two-asterisks-mean

Dolphin
15.01.2017
16:28:37
ну и?

Dolphin
15.01.2017
16:28:40
все верно
только в функцию мемсет нужно передавать указатель
а не указатель на указатель

Ruslan
15.01.2017
16:29:27
ну и в коде все верно, а не пашет, вот я и туплю

Dolphin
15.01.2017
16:29:42
не верно бля! )

Ruslan
15.01.2017
16:30:06
я смотрю в gdb
и вижу, что начальный адрес передаётся в memset верный

LexsZero
15.01.2017
16:30:32
перепиши этот говнокод чтоб там не было двойных указателей, для начала

Google

Dolphin
15.01.2017
16:30:42
ты попробуй не нолем заполнять, а 255 например
и удали эту *
после этого в дебуг смотри

LexsZero
15.01.2017
16:31:06
алсо при чем тут ватчдог? если бы проблема была в вылазе за память, проц валился бы в экзепшон.
и там сидел, если экзепшон не криво написан

Dolphin
15.01.2017
16:31:21
у него вылаз за память

Ruslan
15.01.2017
16:31:24
до рефакторинга говно кода я его пытаюсь запустить, чтобы иметь оригинал

Admin
ERROR: S client not available

Dolphin
15.01.2017
16:31:30
мемсетом
во втором случае, по адресу 0 запись

Dr
15.01.2017
16:45:39

Dolphin
15.01.2017
16:45:46
точнее наоборот, по адресу, который образуют первые элементы массива

Dr
15.01.2017
16:45:55
нет, ты вот тут
pwm=0x20001fc8;
не делаешь указатель
ты записываешь в ячейку памяти значение 0x20001fc8
и потом в мемсете берешь указатель на это значение
а по какому оно адресу лежит на самом деле - фиг знает

Dolphin
15.01.2017
16:45:56

Dr
15.01.2017
16:46:14
p* pwm = (p (*))0x20001fc8;
memset(pwm, 0, size * sizeof(PWM_t));
и написал как делать правильно

Google

Dolphin
15.01.2017
16:46:40
А че он не делает? ))

Dr
15.01.2017
16:47:46
Я не знаю.

Dolphin
15.01.2017
16:48:14
?
Мне просто тоже стала интересна эта либа, тем, что там реализована гаммакорекция
надо буит проверить ее качество

LexsZero
15.01.2017
17:51:04
гаммакоррекция же пишется в две минуты
вообще для ледов нужна не классическая гамма, а логарифмическое преобразование, няп
потому что количество высранных фотонов в секунду зависит от скважности шима линейно, а воспринимаемая человеком яркость от количества фотонов в секунду - логарифмически

Dolphin
15.01.2017
17:56:14
Логарифмическая, судя по таблице

Dmitry
15.01.2017
18:09:06
пока в анархии небывалое оживление, спрошу тут.
а как на схемах буквенно обозначаютя мезонины?
тот же DFPlayer или шилд на Ардуину.
не IC же

LexsZero
15.01.2017
18:10:11
как квадратик с ногами?

Dr
15.01.2017
18:11:31

LexsZero
15.01.2017
18:11:34
http://dump.lexs.blasux.ru/files/nogicah/2017-01-15-201124_400x371_scrot.png это адафруктовская либа

Th0r
15.01.2017
18:11:41
если на разъемах - то как разъемы обозначаются XXconXX например

Dmitry
15.01.2017
18:12:11
а если впаивается? вот как ESP, например

LexsZero
15.01.2017
18:12:21
а, буквенно как разъемы, да.