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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> передача в ф-ю адреса массива (+)
Метценгерштейн
сообщение Sep 24 2018, 12:39
Сообщение #1


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Немного торможу.
Ф-я принимает адрес массива.
Надо передать адрес.

Код
p_req->write.p_data


это я изначально указатель разыменовываю и работаю со значением по полю структуры.
А как адрес передать этой p.data? А если еще и смещение надо передать +16, например?

Код
&p_req->write.p_data
?
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 24 2018, 13:16
Сообщение #2


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

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



Цитата(Метценгерштейн @ Sep 24 2018, 15:39) *
А как адрес передать этой p.data?

Вот так:
Код
&(p_req->write.p_data)


Цитата
А если еще и смещение надо передать +16, например??

Адрес привести к нужному типу данных и обратиться к этому адресу через новый указатель (uint16_t - тут для примера):
Код
*(((uint16_t*)&(p_req->write.p_data)) + 16) = ...

или так (если работаете на C++ и ваш компилятор это поддерживает):
Код
*(reinterpret_cast<uint16_t*>(&(p_req->write.p_data)) + 16) = ...


Понимаю, это - редкостная дичь :D
Как избежать? Да, сразу правильно строить нужные структуры данных (в т.ч. вложенные), пользуясь struct и union, минимально используя указатели.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Sep 24 2018, 14:07
Сообщение #3


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(Forger @ Sep 24 2018, 16:16) *
Вот так:
Код
&(p_req->write.p_data)



Тоже так хотел, но уже сомневаться начал, т.к. ругается компилер.

Вот вызываю ф-ю и передаю параметры:



А сама ф-я принимающая:
Код
void AES128_ECB_decrypt(uint8_t* input, const uint8_t* key, uint8_t *output)

{}


Т.е. должен просто принять указатель на массив.

Кстати, правильно, что ругается, т.к. p_req->write.p_data- это уже и есть указатель и указатель на указатель- глупо.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 24 2018, 14:07
Сообщение #4


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

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



Цитата(Метценгерштейн @ Sep 24 2018, 16:59) *
Тоже так хотел, но уже сомневаться начал, т.к. ругается компилер.

Все правильно ругается компилятор - вы пытаетесь ему сунуть адрес указателя (указатель на указатель), а нужно дать лишь сам указатель.
Причем его стоит привести к такому типу, который ожидает получить ваша функция. Ведь вы не указали тут содержимое структуры "write", поэтому, как обычно - играем в экстрасенсов wacko.gif
Вот так сделайте:
Код
AES128_ECB_decrypt((uint8_t*)(p_req->write.p_data) ...



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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Sep 24 2018, 14:11
Сообщение #5


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Код
typedef struct
{
    uint8_t  /*const*/ * p_data; //!< Data.
    uint16_t         len;    //!< Length of data in @ref nrf_dfu_request_write_t::p_data.
} nrf_dfu_request_write_t;


Это структура write. Она структура в структуре
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 24 2018, 14:17
Сообщение #6


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

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



Цитата(Метценгерштейн @ Sep 24 2018, 17:11) *
Это структура write. Она структура в структуре

Если "const" действительно закомментирован, то тогда должно работать даже так:
Код
AES128_ECB_decrypt(p_req->write.p_data, ...


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


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



const- это я и закомментил.
Не работает. Ругается уже на линковщике.
Может я не так смещение делаю?

Задача в ф-ю шифрования по 16 байт подавать.

Код
                for (int i = 0; i < p_req->write.len; i+=16)
                {
                    AES128_ECB_decrypt ((uint8_t *)p_req->write.p_data + i, key, (uint8_t *)p_req->write.p_data + i);
                }


Ругань что не хватает места (125 ошибок)
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 24 2018, 14:23
Сообщение #8


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

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



Цитата
Не работает. Ругается уже на линковщике.

Вы по ходу путаете компилятор и линковщик. Приведенные выше были ошибки компилятора.
А ошибки линковщика - это уже совсем другая история...

Цитата
AES128_ECB_decrypt ((uint8_t *)p_req->write.p_data + i, key, (uint8_t *)p_req->write.p_data + i);

Что-то мне подсказывает, что передавать в одну и ту же функцию в качестве указателя источника и получателя данных одну и ту же область - это очень подозрительно и может привести к этому: smile3046.gif
Особенно, если вы понятия не имеете, как работает внутри эта самая функция.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Sep 24 2018, 14:35
Сообщение #9


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Из прошлого сообщения была ругань компилятора. Сейчас ругается так:


Линковщик?

Дело в том, что на прошлом SDK я такой финт проделывал(с передачей в ф-ю эту источника и выходного массива, куда писать данные одного массива)- все работало. Т.е. ф-я работоспособна в таком виде.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 24 2018, 14:41
Сообщение #10


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

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



Цитата(Метценгерштейн @ Sep 24 2018, 17:35) *
Линковщик?

Да, линковщик. Об этом явно говорит буковка "L" перед кодом ошибки.
Кстати, этот код ошибки можно вбить в строку поиска гугля и там найти подробности wink.gif
В данном случае у выбранного контроллера тупо не хватает места под данные или код.

Цитата
Дело в том, что на прошлом SDK я такой финт проделывал(с передачей в ф-ю эту источника и выходного массива, куда писать данные)- все работало. Т.е. ф-я работоспособна в таком виде.

Профи найдет источник проблемы, комментируя целые куски кода, пытаясь локализовать виновника.
Дилетант будет ссылаться на то, что "ведь раньше все работало"...

Не будьте дилетантом, ищите. Ведь кроме вас никто в вашем коде не разберется sm.gif


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


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



По ходу банально места уже нет, не может линковщик огромный кусок кода впихнуть в маленькую память контроллера rolleyes.gif
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Sep 24 2018, 14:54
Сообщение #12


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(Forger @ Sep 24 2018, 17:41) *
Не будьте дилетантом, ищите. Ведь кроме вас никто в вашем коде не разберется sm.gif


Да понятно) Спасибо за помощь. Отпишусь тут - что получилось в результате.

Цитата(toweroff @ Sep 24 2018, 17:42) *
По ходу банально места уже нет, не может линковщик огромный кусок кода впихнуть в маленькую память контроллера rolleyes.gif


По мне, так странно. Я же не прошу его впихивать весь блок. Я прошу его по 16 байт заменить один кусок кода другим.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 24 2018, 14:54
Сообщение #13


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

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



Цитата(Метценгерштейн @ Sep 24 2018, 17:51) *
Спасибо за помощь.
beer.gif


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


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Метценгерштейн @ Sep 24 2018, 17:54) *
По мне, так странно. Я же не прошу его впихивать весь блок. Я прошу его по 16 байт заменить один кусок кода другим.

я про то, что компилятор накомпилил такой объём кода, что линковщик хватается за голову и говорит, что в секции ANY, в выделенном ей пространстве, не хватает места, чтобы этот код туда запихать
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Sep 25 2018, 07:00
Сообщение #15


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(toweroff @ Sep 24 2018, 21:47) *
я про то, что компилятор накомпилил такой объём кода, что линковщик хватается за голову и говорит, что в секции ANY, в выделенном ей пространстве, не хватает места, чтобы этот код туда запихать

И как выйти из положения можно? Увеличить чего-нибудь? Или просто сам код написан так, что рекурсия получилось и вызывается как матрешка друг за другом?
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 25 2018, 07:14
Сообщение #16


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

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



Цитата(Метценгерштейн @ Sep 25 2018, 10:00) *
И как выйти из положения можно? Увеличить чего-нибудь?


Цитата(Forger @ Sep 24 2018, 17:41) *
Профи найдет источник проблемы, комментируя целые куски кода, пытаясь локализовать виновника.


Или вы ожидаете, что за Вас тут будут делать Вашу работу?


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 25 2018, 07:33
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Метценгерштейн @ Sep 25 2018, 10:00) *
И как выйти из положения можно? Увеличить чего-нибудь? Или просто сам код написан так, что рекурсия получилось и вызывается как матрешка друг за другом?

Да причём тут рекурсия? У контроллера банально исчерпалось место во флеш-памяти
Оптимизировать код, изменить уровень оптимизации кода, менять контроллер на более "жирный"
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Sep 25 2018, 12:34
Сообщение #18


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(toweroff @ Sep 25 2018, 10:33) *
Да причём тут рекурсия? У контроллера банально исчерпалось место во флеш-памяти
Оптимизировать код, изменить уровень оптимизации кода, менять контроллер на более "жирный"

Вы были правы. Достаточно было увеличить память под прошивку, чтобы впихнуть новый файл aes.c и проблема линковщика ушла.
Все заработало.
Всем спасибо за консультации.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 25 2018, 12:41
Сообщение #19


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

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



Цитата(Метценгерштейн @ Sep 25 2018, 15:34) *
Достаточно было увеличить память под прошивку

Просто поменяли цифры в настройках проекта или все-таки еще и заменили чип на более емкий?




--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 25 2018, 13:46
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Forger @ Sep 25 2018, 15:41) *
Просто поменяли цифры в настройках проекта или все-таки еще и заменили чип на более емкий?

я так понимаю, что изначально неверно были выставлены размеры памяти устройства в проекте. Ибо как же можно впихнуть в реальный камень то, что в него не влезет физически? laughing.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 25 2018, 14:02
Сообщение #21


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

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



Цитата(toweroff @ Sep 25 2018, 16:46) *
я так понимаю, что изначально неверно были выставлены размеры памяти устройства в проекте.
Скорее - изначально был выбран неправильный камень.

Цитата
Ибо как же можно впихнуть в реальный камень то, что в него не влезет физически?
очень просто - ничего не прошивать в него, т.к. речь шла лишь про сборку проекта laughing.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Sep 25 2018, 14:42
Сообщение #22


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



у чипа nRF52 512 флеша. Камень, соответственно, тот же остался. Но проект бутлоадера (его пилю) был ограничен стартом адреса и размером. Его и увеличил. Я вклячил файл aes.c туда и он банально не влазил в отведенную область.
Просто не сталкивался с таким, поэтому потерялся. Сейчас все работает. Всем еще раз спасибо.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 25 2018, 15:29
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Судя по названию фукнции у вас Tiny AES128. Его не сложно ужать в размерах, свернув развернутый цикл по блокам, за примерно 3% падение производительности.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 25 2018, 15:42
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Кстати, здесь Zltigo выкладывал AES128 под 32-разрядные процессоры. У меня вышло ужать это всё в ~4КБ + 256 байт оперативки. Итого бут с сериалом получался вполне себе в две страницы в 8КБ (всего)
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 26 2018, 07:11
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



А смысл так много?. У меня аеs+ecdsa+ecdh упихнуты в 2.5. Причем по замерам на армах все эти высокоуровневые раскрутки циклов дают считанные %.
Цитата(Kabdim @ Sep 25 2018, 18:29) *
Судя по названию фукнции у вас Tiny AES128. Его не сложно ужать в размерах, свернув развернутый цикл по блокам, за примерно 3% падение производительности.

Прошу прощения, я вас обманул, попутал по памяти с гостовым вариантом.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Sep 28 2018, 06:56
Сообщение #26


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Kabdim @ Sep 26 2018, 10:11) *
У меня аеs+ecdsa+ecdh упихнуты в 2.5.

Не покажете?

У меня AES decrypt занимает килобайт. (+ таблички в ОЗУ). Полный вариант (encrypt + decrypt) - полтора. Таблички поместить во флеш - ещё пол-кило (но у загрузчика ОЗУ и так с избытком).

Код чужой, с минимальными допиливаниями.
Код
    @file   Aes.c
    @brief  Handles AES computation.
    @author Andrew Gorczyca
    @date   2012/5/25


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 28 2018, 11:24
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



https://github.com/kokke/tiny-AES-c
https://github.com/kmackay/micro-ecc

Естественно в EC скомпилирована версия со статическим связыванием только с одной кривой. Режим блочного шифрования - сделан руками, а не в библиотеке, ну он может добавляет еще сотню байт. У меня тоже только расшифровывание. Ключи компиляции - ничего необычного, на оптимизацию следующее: -flto -Os -mcpu=cortex-m0 -mthumb

0xA50 или 2640 байт кода
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 13:57
Рейтинг@Mail.ru


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