STM32F411로 128x128 픽셀 짜리 oled를 가지고 놀고 있는데요.
메모리에 프레임 버퍼를 두고 갱신한 다음 통째로 올리는 식으로 쓰고 있습니다..
한 프레임 올리고 나서 다시 버퍼를 전부 0으로 갱신하고 다음 프레임을 올리는 식으로요.
그런데 memset() 이 너무 오래 걸리더라고요...
그래서 memset() 하는 동안 다른거 라도 하려고 DMA memory to memory 기능으로 수행하도록 만들었습니다.
이렇게 하면 CPU는 다른 걸 돌릴 수 있으니까요..
근데 CPU로 memset()을 했을때 12ms 걸리던게... DMA 올려 놓고 완료 될 때까지 걸리는 시간을 재 봤더니 2ms 밖에 안 걸립니다!
이거 원래 이런 건가요?
뭔가 제가 최적화 되지 않은 잘못된 memset() 을 참조하고 있는걸까요??
큐브mx가 생성한 프로젝트에 아두이노용 그래픽 라이브러리를 땡겨와서 쓰고 있습니다...
±×¸®°í ¾ÆµÎÀ̳ë¿ë ¶óÀ̺귯¸®´Â ´Ù¸¥ mcu¿¡¼ Àß ¾Èµ¹¾Æ°¡´Â ¼ö°¡ ¸¹½À´Ï´Ù. ÃÖÀûÈ°¡ ¸ñÀûÀÌ ¾Æ´Ï°í ¹ü¿ë¼º°ú °£ÆíÇÑ »ç¿ëÀÌ ¸ñÀûÀÔ´Ï´Ù.
¿ø·¡ ºü¸¥°Ô ´ç¿¬Çß±º¿ä..
memset ÀÚü°¡ ¿ø·¡ DMA¸¦ ¾²Áö ¾Ê°í CPU¸¦ ÅëÇØ ¸Þ¸ð¸®¸¦ º¹»çÇÕ´Ï´Ù.
DMA´Â °³¹ßÀÚ°¡ Á÷Á¢ ½á¾ß Çϱ⠶§¹®¿¡ Á÷Á¢ ¼¼ÆÃÇØÁÖ¼Å¾ß ÇÕ´Ï´Ù.
ÀÏÀ» »ç¶÷ÀÇ °üÁ¡¿¡¼ ÀÌÇØÇϸé 0À¸·Î ü¿ì¶ó°í ½ÃÅ°´Â°Ç ¾îµð¼ ±¸Áö 000000À» º¹»çÇؼ °Å±â ºÙ¿© ³Ö´Â°Í º¸´Ù ºü¸£°Ô ¸¸µé ¼ö ÀÖÀ»°Í °°±âµµ ÇÏ°í ±×·¹¼¿ä..
memset°¡ Àڱ⸾´ë·Î DMA Ch0À» ¾´´Ù°í ÇÏ¸é °³¹ßÀÚ°¡ DMA Ch0À» ½á¾ß ÇÏ´Â °æ¿ì¿¡ ¸ø¾²°Ô µÇ´Â°ÅÁÒ.
±×¸®°í DMA ä³Î¸¶´Ù »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ª(Æ丮Æä·²)ÀÌ ´Ù¸£±âµµ Çϱ¸¿ä.
https://m.cafe.naver.com/ca-fe/web/cafes/10750951/articles/311600
Âü°íÇØ º¸¼¼¿ä~
ÀÌ ¸Þ¸ð¸® IO¶ó´Â°Ç CPUÀÇ Ã³¸® ¼º´É¿¡µµ Á÷°áµÇ´Â ¹®Á¦´Ï±î.. CPU ÄÚ¾î ÂÊ¿¡¼µµ ÃÖ¼±À» ´ÙÇؼ °È ÇÒÅ°í
±×·³ °á±¹ °à´Ù¸®·Î ºÙÀº ÄÚ ÇÁ·Î¼¼¼ °Ý ÀåÄ¡ º¸´Ù´Â ¹¬Á÷ÇÑ Äھ ´õ »¡¸® ó¸®ÇÏÁö ¾ÊÀ»±î ÇÏ´Â ±×·± À̹ÌÁö°¡ À־ä...
½Ç»óÀº ±×³É °°Àº Ŭ·°À¸·Î Á¢±ÙÇÏ´Ï ¿À¹öÇص尡 ÀûÀº Àü¿ë ±¸Á¶°¡ ´õ ºü¸¥°¡ º¸³×¿ä.. ÂÁ...
¹Ø¹Ù´Ú ±îÁö µé¿©´Ù º¸±â´Â ³Ê¹« Çܵé°Ú´Ù ½Í¾î¼¿ä...