aaarrr 69 31 марта, 2019 Опубликовано 31 марта, 2019 · Жалоба 37 minutes ago, Grizzly said: А для невыровненного случая будет дополнительная инструкция в dasm? Я правильно понимаю, что ничего даром не даётся?) Выше код приведен. Задействован NEON. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 31 марта, 2019 Опубликовано 31 марта, 2019 · Жалоба 25 минут назад, aaarrr сказал: Выше код приведен. Спасибо. Не увидел сразу, что это для моего случая. UPD.: А NEON задаействован именно из-за того, что источник не выровнен? То есть в таком случае будут всегда использоваться регистры сопроцессора или возможны доп. инструкции с целочисленными регистрами, когда у VFP все занято? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 марта, 2019 Опубликовано 31 марта, 2019 · Жалоба 1 hour ago, Grizzly said: А NEON задаействован именно из-за того, что источник не выровнен? То есть в таком случае будут всегда использоваться регистры сопроцессора или возможны доп. инструкции с целочисленными регистрами, когда у VFP все занято? 1. Да. 2. Возможно, тут все на откуп компилятору. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 31 марта, 2019 Опубликовано 31 марта, 2019 · Жалоба @aaarrr ясно, спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 8 сентября, 2021 Опубликовано 8 сентября, 2021 · Жалоба Не могу устранить Warning: L6918W: Execution region RW_IRAM2 placed at 0x20000000 needs padding to ensure alignment 4 of emac_stm32f7xx.o(.bss.ARM.__at_0x2000C000). Подскажите как подойти к вопросу. Спасибо. Desc 0x2000c000 Data 9412 emac_stm32f7xx.o(.bss.ARM.__at_0x2000C000) [Anonymous Symbol] 0x2000c000 Section 0 emac_stm32f7xx.o(.bss.ARM.__at_0x2000C000) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 136 8 сентября, 2021 Опубликовано 8 сентября, 2021 · Жалоба Скрипт линкера покажите и объявление Desc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба /* Ethernet DMA Descriptor/Buffer memory */ static struct { RX_Desc rx[NUM_RX_BUF]; TX_Desc tx[NUM_TX_BUF]; uint32_t rx_buf [NUM_RX_BUF][ETH_BUF_SIZE>>2]; uint32_t tx_buf [NUM_TX_BUF][ETH_BUF_SIZE>>2]; } Desc __MEMORY_AT(EMAC_DMA_MEMORY_ADDR); ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00080000 { ; load region size_region ER_IROM1 0x08000000 0x00080000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_IRAM1 0x20010000 0x00040000 { ; RW data .ANY (+RW +ZI) } RW_IRAM2 0x20000000 0x00010000 { .ANY (+RW +ZI) } } файл EMAC_STM32F7xx.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба 41 minutes ago, smk said: __attribute__((packed) Выстрел в ногу. 42 minutes ago, smk said: __MEMORY_AT(EMAC_DMA_MEMORY_ADDR) Лучше в секцию определить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба Как это сделать? тут еще такое есть: /* DMA TX Descriptor */ typedef struct tx_desc { uint32_t volatile CtrlStat; uint32_t Size; uint8_t *Addr; struct tx_desc *Next; #if ((EMAC_CHECKSUM_OFFLOAD != 0) || (EMAC_TIME_STAMP != 0)) uint32_t Reserved[2]; uint32_t TimeLo; uint32_t TimeHi; #endif } TX_Desc; /* DMA RX Descriptor */ typedef struct rx_desc { uint32_t volatile Stat; uint32_t Ctrl; uint8_t const *Addr; struct rx_desc *Next; #if ((EMAC_CHECKSUM_OFFLOAD != 0) || (EMAC_TIME_STAMP != 0)) uint32_t ExtStat; uint32_t Reserved[1]; uint32_t TimeLo; uint32_t TimeHi; #endif } RX_Desc; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 9 сентября, 2021 Опубликовано 9 сентября, 2021 (изменено) · Жалоба On 9/14/2018 at 7:04 PM, aaarrr said: Пруф. Нельзя вызывать memcpy абы как. Ну и обратный пруф - memcpy спасает мир С опасностями memcpy имел дело на Cortex-A7 + GCC. Без указания нужного флага и spec подключается либа, не учитывающая выравнивание. Подробно здесь + решение : https://gamedev.ru/flame/forum/?id=262348&page=10&m=5434017#m149 cо 149-го сообщения Изменено 9 сентября, 2021 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 136 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба 1 час назад, aaarrr сказал: Выстрел в ногу. А где у него упаковка? Или он уже поправил сообщение... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба посмотрел. У меня кейл. Якобы автоматом выравнивать должно. Но когда включаю кеш программа уходит в ошибку. поправил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба 1 hour ago, smk said: когда включаю кеш программа уходит в ошибку 1. Включать кэш в области IRAM смысла нет 2. За когерентностью при работе с DMA нужно следить самому - инвалидировать перед чтением Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andreas1 1 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба 6 минут назад, aaarrr сказал: 2. За когерентностью при работе с DMA нужно следить самому - инвалидировать перед чтением И тогда уже надо выравнивать по странице кеша 32 байта, иначе могут пропасть нужные данные. Или в некешируемой области размещать буфера ДМА. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться