VladislavS 39 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба И вот ещё. 5-я версия ARM компилятора, знающая про __packed, вот что в её описании даёт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба Для тех, кто не боится плюсов (код для gcc, у которого нет указателя на невыровненные данные): unaligned.h Скрытый текст #ifndef UNALIGNED_H__ #define UNALIGNED_H__ template<typename T> struct unaligned { operator T() const { return Data; } void operator =(T value) { Data = value; } T Data; } __attribute__((packed)); #endif // UNALIGNED_H__ использование: void otg_core::tx_fifo::write(void const * from, uint_fast16_t size) { auto pSrc = reinterpret_cast<unaligned<uint32_t> const *>(from); size = (size + 3) / 4; // bytes -> words while(size--) FIFO = *pSrc++; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба 6 минут назад, AleksBak сказал: Я понял. Кажется понял. Спасибо. (я понял, что надо применять выравнивание - правильно да?) Не совсем. Если не уверены что значение указателя будет всегда выровненным, то нужно использовать указатель на пакованные данные. Например для IAR у меня объявлены такие типы: typedef __packed u16 u16p8; typedef __packed s16 s16p8; typedef __packed u32 u32p8; typedef __packed s32 s32p8; typedef __packed u64 u64p8; typedef __packed s64 s64p8; typedef __packed u32 u32p16; typedef __packed s32 s32p16; typedef __packed u64 u64p16; typedef __packed s64 s64p16; typedef u64 u64p32; typedef s64 s64p32; typedef __packed float floatP8; typedef __packed float floatP16; typedef __packed double doubleP8; typedef __packed double doubleP16; typedef __packed double doubleP32; В таких случаях я и использую их. Типа: u32p8 volatile *ptr = 0xC0001203; Для других компиляторов (не понимающих __packed) будет немного по-другому. Для Кейла надеюсь VladislavS нам прояснит как их описать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба 10 минут назад, jcxz сказал: Если только одно это изменение сделать. Для чистоты эксперимента..... У меня сейчас нет возможности проверить. Попозже. У меня Keil не основной, так подопытный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба 5 минут назад, Сергей Борщ сказал: Для тех, кто не боится плюсов (код для gcc, у которого нет указателя на невыровненные данные): В программах для ПК (VS) я примерно так и делаю. Но у этого метода есть существенный недостаток: При компиляции с низким уровнем оптимизации (для отладки), эти методы к сожалению не инлайнятся. Это неудобно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба 7 минут назад, jcxz сказал: Например для IAR у меня объявлены такие типы: Еще раз спасибо. OFFTOP: А как тут, на форуме, "плюс" добавляют в репутацию какого-то пользователя так и не понял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба 17 минут назад, Сергей Борщ сказал: auto pSrc = reinterpret_cast<unaligned<uint32_t> const *>(from); Это несовместимо с constexpr. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба 1 час назад, VladislavS сказал: Это несовместимо с constexpr. Не могу придумать, когда это может понадобиться. Не подскажете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба Вы наперёд знаете что будет передаваться через эту функцию? Те же дескрипторы можно генерить в constexpr контексте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба 54 минуты назад, VladislavS сказал: Вы наперёд знаете что будет передаваться через эту функцию? Ах вы про функцию целиком? Ну, это цель дальнейших исследований. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба Мне так и не ответили на главный вопрос... Как включить для SDRAM кэш в STM32H7? Без включенного кэша все работает. настройки MPU: MPU_InitStruct.Enable = MPU_REGION_ENABLE; MPU_InitStruct.Number = MPU_REGION_NUMBER0; MPU_InitStruct.BaseAddress = 0xC0000000; MPU_InitStruct.Size = MPU_REGION_SIZE_256MB; MPU_InitStruct.SubRegionDisable = 0; MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0; MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS; MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE; MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; HAL_MPU_ConfigRegion(&MPU_InitStruct); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 20 октября, 2020 Опубликовано 20 октября, 2020 (изменено) · Жалоба SCB_InvalidateICache(); SCB_EnableICache(); SCB_InvalidateDCache(); SCB_EnableDCache(); MPU в моих проектах не требовался совсем - его настройки не трогал. У вас IsBufferable - на вид самая полезное свойство кэша данных - выключено. Изменено 20 октября, 2020 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 10 minutes ago, GenaSPB said: SCB_InvalidateICache(); SCB_EnableICache(); SCB_InvalidateDCache(); SCB_EnableDCache(); MPU в моих проектах не требовался совсем - его настройки не трогал. У вас IsBufferable - на вид самая полезное свойство кэша данных - выключено. с ним тоже не работает.. и пишут что для SDRAM его надо отключать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба О... неработающая с data cache программа - известная проблема. Особенно при наличия обмена по DMA Зачем Вам нужен MPU? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AleksBak 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 3 часа назад, Realking сказал: Мне так и не ответили на главный вопрос... Как включить для SDRAM кэш в STM32H7? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться