[uquote="КотПротон",url="/forum/viewtopic.php?p=4736261#p4736261"]Если бы реально имели дело, то не спрашивали бы, что такое RGB888 и знали бы, что такое отрисовка линий и окружностей по алгоритму Брезенхема. Они попиксельно рисуются. Другого не придумано пока что.[/uquote]Если бы вы реально имели дело с графикой, то знали бы, что только чайники рисуют что-то (тем более - линии) попиксельно.
И потому их код не выполняется, а скорее ползает.
Когда научитесь программировать (а не только своё ЧСВ прокачивать), то сможете и линии и даже круги/окружности рисовать быстро. И проблем с невыровненным доступом не будет. И ахинею про STRB/STRH не будете нести.
[uquote="КотПротон",url="/forum/viewtopic.php?p=4736261#p4736261"]Если бы вы с этим имели дело, то понимали бы.
В мануале четко написано, какие форматы с какой скоростью на какой размер дисплея могут идти. И это вам не 320х240, а 1280х800.[/uquote]Не надо гадать тут, что я знаю или с чем имел дело - вы всё время тыкаете пальцем в небо. С DMA2D я тоже имел дело. И имею законченные проекты с ним.
[uquote="КотПротон",url="/forum/viewtopic.php?p=4736261#p4736261"]У меня графический движок уже давно написан и использует как прямое построение, так и граф.ускоритель.[/uquote]"Движок" рисующий попиксельно

, годится только в мусорку.
[uquote="КотПротон",url="/forum/viewtopic.php?p=4736261#p4736261"]Это не я взял, а производитель ST Microelectronics на своей отладочной плате Discovery так поставил. Не знаю почему. Спросите у них, если кажется, что они ошиблись.
В предыдущем сообщении вы не знали, как SDRAM адресуется, а тут вдруг заявляете обратное.

Быстро ж переобулись. Я б на вашем месте промолчал....[/uquote]Т.е. - вы не сумели правильно запрограммировать чип, из-за чего используется только половина SDRAM. Да и то запрограммировали криво. Но конечно виноваты все вокруг (и производтель платы в том числе), но конечно только не вы.
Что производитель поставил на свою плату что-то неправильно - не надо рассказывать сказок. Снимите корону и скажите правду, что не справились с инициализацией FMC/SDRAM.
[uquote="КотПротон",url="/forum/viewtopic.php?p=4736261#p4736261"]Если бы вы разбирались в теме графики, то спокойно бы реагировали, а не писали бы ерунды. Если сделать одну 32-битную запись поверх 24-битного пикселя, то соседний пиксель будет поврежден. Подумали бы хоть немного, прежде чем писать доталова букв не по делу.[/uquote]Пока наезжаете и несёте ерунду здесь только вы. Если бы вы сняли корону, умерили своё ЧСВ и хоть немного подумали бы, то поняли бы как писать 32-битными словами.
Если что: моя графическая библиотека в одном из проектов рисует линии и другие фигуры максимально используя 32-битные записи. При том что точки там занимают вообще по 4 бита. И никакой Брезенхем мне не мешает почему-то.
[uquote="КотПротон",url="/forum/viewtopic.php?p=4736261#p4736261"]И я нашел ответ - косячный модуль FMC во всей линейке.[/uquote]Плохому танцору всегда кто-то мешает: производитель платы, чип, еррата... Всегда кто угодно виноват, но только не он сам.
PS: Заходим на сайт "ARM" читаем:
SYMPTOM
If you use an STM32F7xx microcontroller with an external SDRAM, the Cortex-M7 core may unexpectedly run into the hard fault handler because of unaligned access. This may happen for example, when the frame buffer of an LCD, a RAM filesystem or any other data is located into the SDRAM address range 0xC0000000 - 0xC03FFFFF (max. 4MB). The hard fault is executed although the bit UNALIGN_TRP (bit 3) in the CCR register is not enabled.
CAUSE
In general, RAM accesses on Cortex-M7 based devices do not have to be aligned in any way. The Cortex-M7 core can handle unaligned accesses by hardware. Usually, variables should be naturally aligned because these accesses are slightly faster than unaligned accesses.
STM32F7xx devices have the external SDRAM mapped to the address range 0xC0000000 - 0xC03FFFFF (max. 4MB). According to the ARMv7-M Architecture Reference Manual chapter B3.1 (table B3-1), the area 0xC0000000-0xDFFFFFFF (32MB) is specified as Device Memory Type. According to chapter A3.2.1, all accesses to Device Memory Types must be naturally aligned. If they are not, a hard fault will execute no matter if the bit UNALIGN_TRP (bit 3) in the CCR register is enabled or not.
RESOLUTION
There are several possible solutions for the STM32F7xx:
1. Enable the MPU for this region
This is the solution we recommend and which we are using in our emWin GUI Demo for this microcontroller. This can be achieved by the following code that needs to be called before the SDRAM is accessed.
...
This code initializes the MPU so that the SDRAM memory area is considered as Normal Memory type instead of Device Memory type. This disables the access alignment restrictions.
2. Remap the SDRAM to a different address
The SDRAM could also be remapped to address 0x60000000 with the following code:
...
The data of the application needs to be linked into this area as well. The disadvantage is that this address area is usually used by external NOR Flash or PSRAM or SRAM. These external memory devices could not be used in this case.
https://developer.arm.com/documentation/ka002886/latest/
Совет "задействовать MPU" был дан мною ещё в самом первом сообщении. Но ТС его проигнорировал, вместо этого начав наезжать и прокачивать своё ЧСВ.
PPS: К сведению чайников, не знающих что такое STRH/STRB - даже если невыровненный доступ работает, то невыровненные операции доступа к памяти, всё равно выполняются медленнее. Не говоря уже о том, что запись пикселя в два приёма STRH+STRB (даже с выровненной STRH) будет гораздо медленнее одной 32-битной записи. И писать что-то графическое попиксельно, да ещё - записывая каждый пиксель в несколько приёмов - это просто днище. Это не программирование, а говнокодинг.
