Size: a a a

2021 July 08

RZ

Ruslan Zuckerbrin in Embedded Group
Просто библиотечная функция принимает указатель uint32_t *, а другая передаёт uint8_t *
источник

RZ

Ruslan Zuckerbrin in Embedded Group
С размером чекнул, хватает как минимум для одного uint32_t точно. Да и это не Windows/Linux, тут никто не следит за памятью
источник

I

Igor in Embedded Group
да невыровненный доступ по-любому
источник

RZ

Ruslan Zuckerbrin in Embedded Group
0x4000CC65
источник

RZ

Ruslan Zuckerbrin in Embedded Group
Понятно
источник

PB

Petr Belyaev in Embedded Group
Как кратный 4 точно не выглядит
источник

GZ

Genadi Zawidowski in Embedded Group
Переработайте функцию для Вашего случая
/* получить 32-бит значение */
/* Big endian memory layout */
uint_fast32_t
USBD_peek_u32_BE(
 const uint8_t * buff
 )
{
 return
   ((uint_fast32_t) buff [0] << 24) +
   ((uint_fast32_t) buff [1] << 16) +
   ((uint_fast32_t) buff [2] << 8) +
   ((uint_fast32_t) buff [3] << 0);
}
источник

GZ

Genadi Zawidowski in Embedded Group
/* записать в буфер для ответа 32-бит значение */
/* Big endian memory layout */
unsigned USBD_poke_u32_BE(uint8_t * buff, uint_fast32_t v)
{
 buff [3] = LO_BYTE(v);
 buff [2] = HI_BYTE(v);
 buff [1] = HI_24BY(v);
 buff [0] = HI_32BY(v);

 return 4;
}
источник

GZ

Genadi Zawidowski in Embedded Group
В этих функциях порядок байт НЕ ТАКОЙ КАК У STM32 (а какой проц у Вас?)
источник

RZ

Ruslan Zuckerbrin in Embedded Group
У меня Миландр 1986VE3 (cortex m1/0). А можно ли каким либо образом заставить FreeRtos выделить память,  начиная выровненного адресса?
источник

RZ

Ruslan Zuckerbrin in Embedded Group
Тут,  мне кажется, будут дополнительные временные затраты. Попробую запрашивать выделять памяти на 3 байта  больше, а там уже выравнивать указатель по необходимости
источник

GZ

Genadi Zawidowski in Embedded Group
Ну пускай... Зато работать будет.
источник

GZ

Genadi Zawidowski in Embedded Group
Суд по текусту Вы приспосабливались к заданной снаружи структуре? Иди сами писали?
источник

RZ

Ruslan Zuckerbrin in Embedded Group
Одна библиотечная функция принимает uint32_t *, другая библиотечная возвращает uint8_t *, который мне и надо передать в качестве аргумента
источник

GZ

Genadi Zawidowski in Embedded Group
Тут я вижу заполнение некоего буфера, библиотечных функций не видать.
Та что принимает uint32_t * скорее всего тоже вылетит по выравниванию если ей Ваше 0x4000CC65 передать
источник

RZ

Ruslan Zuckerbrin in Embedded Group
Да, я изолировал пример, там выше происходит получение uint8_t и ниже его передача
источник

GZ

Genadi Zawidowski in Embedded Group
Ой быстре-медленнее... Давно бы сделали функцию и забылиэ\
источник

AK

Andrew Kharitonov in Embedded Group
Выровнить можно вроде через #pragma align(4)
Но где гарантии того, что не придет другой невыровненный адрес?
источник

AK

Andrew Kharitonov in Embedded Group
Очень не безопасно разыменовывать указаиели не кратные 1 байту на вашем ядре) Выше подсказали надежное решение)
источник

Г

Георгий Торопов... in Embedded Group
источник