TolikG 0 17 июля, 2015 Опубликовано 17 июля, 2015 · Жалоба Использую эвалборд stm32F439, там на борту есть SDRAM. У куба есть пример инициализации с использованием внешней SDRAM для данных и стэка. Пытаюсь использовать этот пример в связке с библиотекой emWin. В примере из куба "simple hello world", заменил файлы startup_..xx.s, system_stm32f4xx.c и файл линкера которые взял из примера использования SDRAM. Откомпилировал, запустил - получил хардфаулт при выполнении функции GUI_Init(); Так как функция билиотечная (исходного кода нету) - понять причину не могу. Вопрос: можно ли использовать библиотеку в такой схеме или остается довольствоваться примерами работающими только с внутренней памятью? Или я неправильно что то делаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jekin 0 17 июля, 2015 Опубликовано 17 июля, 2015 · Жалоба А вы библиотеку emWin корректно настроили? GUI_Init также вызывает открытые для редактированию пользователю функции инициализации библиотеки и контроллера дисплея. В одной из них (GUI_X_Config кажется), кстати, происходит выделение памяти для библиотеки. Посмотрите мануал, там подробно описано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TolikG 0 17 июля, 2015 Опубликовано 17 июля, 2015 · Жалоба В одной из них (GUI_X_Config кажется), кстати, происходит выделение памяти для библиотеки. Посмотрите мануал, там подробно описано. Функции, описанные в мануале: GUI_ALLOC_AssignMemory(), LCD_X_Config(), LCD_X_DisplayDriver() вызываются, массив памяти для функции GUI_ALLOC виден в окне Watch - адреса 0xC00007a4...0xC00055C4, то есть внешняя память. Хардфаулт происходит где то дальше... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 19 июля, 2015 Опубликовано 19 июля, 2015 · Жалоба Подтверждаю, проблема есть. Мгновенно проявляется даже при простом переносе буфера STemWin в SDRAM (всё остальное неизменно). У Вас дисплей FSMC (SSD1289, SSD1963)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zorromen 1 26 июля, 2015 Опубликовано 26 июля, 2015 · Жалоба Есть stm32F429, вроде все из примера запустилось само и работает, скажите, а emWin использует ускоритель DMA2D по умолчанию? И какие накладываются ограничения, на работу, ну типа многослойность или еще что. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TolikG 0 27 июля, 2015 Опубликовано 27 июля, 2015 · Жалоба У Вас дисплей FSMC (SSD1289, SSD1963)? У меня RGB LCD интерфейс Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TolikG 0 27 июля, 2015 Опубликовано 27 июля, 2015 · Жалоба В примере из куба "simple hello world", заменил файлы startup_..xx.s, system_stm32f4xx.c и файл линкера которые взял из примера использования SDRAM. В примере есть функция инициализации памяти /* Init the STemWin GUI Library */ BSP_SDRAM_Init(); /* Initializes the SDRAM device */ которую я закоментировал, так как память инициализируется в startup. Возникает вопрос - зачем в простейшем примере нужна SDRAM? Если библиотека ее использует, то какие адреса? Возможно причина хардфаулта в том, что библиотека лезет в адреса, которые уже использованы линкером? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TolikG 0 28 июля, 2015 Опубликовано 28 июля, 2015 · Жалоба Мгновенно проявляется даже при простом переносе буфера STemWin в SDRAM (всё остальное неизменно). Подключил логический анализатор к шине SDRAM и обнаружил, что библиотека обращается к банку 0 (адреса 0xC0000000 - 0xC0400000). В файле GUIConf.c внес изменения // Define the available number of bytes available for the GUI // //#define GUI_NUMBYTES (1024) * 150 #define GUI_NUMBYTES (1024L * 2048) //U32 aMemory[GUI_NUMBYTES / 4]; U32 * aMemory = (U32 *)(0xC0800000); Простой пример запустился. SDRAM в качестве системной памяти запустить не удалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yanvasilij 0 28 июля, 2015 Опубликовано 28 июля, 2015 · Жалоба Использую эвалборд stm32F439, там на борту есть SDRAM. У куба есть пример инициализации с использованием внешней SDRAM для данных и стэка. Пытаюсь использовать этот пример в связке с библиотекой emWin. В примере из куба "simple hello world", заменил файлы startup_..xx.s, system_stm32f4xx.c и файл линкера которые взял из примера использования SDRAM. Откомпилировал, запустил - получил хардфаулт при выполнении функции GUI_Init(); Так как функция билиотечная (исходного кода нету) - понять причину не могу. Вопрос: можно ли использовать библиотеку в такой схеме или остается довольствоваться примерами работающими только с внутренней памятью? Или я неправильно что то делаю? 1) С внешнией памятью emWin работает точно. Я работал и не раз. 2) Зачем менять файлы startup_..xx.s, system_stm32f4xx.c. Нужно лишь указать компилятору по какому адресу размещать память для файла GUI_X_Config.c (в нем статически "забивается" место под кучу для emWin). Приведите файл линкера, я так понимаю именно в нем вы это делаете? В каком компиляторе? 3) Вы работаете с SDRAM через FSMC? Инициалзицию памяти и FSMC нужно проводить до вызова функции GUI_Init(). Функция BSP_SDRAM_Init() я так подозреваю именно этим и занимается. Возникает вопрос - зачем в простейшем примере нужна SDRAM? 4) Скорее всего у них в этом примере выделен большой размер кучи. Если изменить параметры линковки, так чтобы куча для emWin выделялась во внутренней памяти, то при компиляции появится ошибка, что мол места для нее нет. Хотя не могу точно утверждать, я не знаю что там за пример. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TolikG 0 28 июля, 2015 Опубликовано 28 июля, 2015 · Жалоба 2) Зачем менять файлы startup_..xx.s... 4) Скорее всего у них в этом примере выделен большой размер кучи. Если изменить параметры линковки, так чтобы куча для emWin выделялась во внутренней памяти, то при компиляции появится ошибка, что мол места для нее нет. Чтобы инициализация SDRAM выполнялась во время startup, до входа в функцию main(). Исходный пример - простейший "Hello world", куча для emWin выделялась во внутренней памяти #define GUI_NUMBYTES (1024) * 128 U32 aMemory[GUI_NUMBYTES / 4]; Компилятор IAR 7.30, параметры линковки редактируются при настройке проекта... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yanvasilij 0 28 июля, 2015 Опубликовано 28 июля, 2015 (изменено) · Жалоба В startup у Вас происходит инициализация FSMC? Использовать внешнюю SDRAM как свою системную можно только через FSMC. Если он проинициализрован и в настройках линковщика вы разместили кучу emWin во внешней SDRAM, то все должно работать. Не работает и хотите, чтобы Вам помогли - покажите настройки линковщика (хоть скриншотом) и инициализацию FSMS. Изменено 28 июля, 2015 пользователем IgorKossak избыточное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TolikG 0 29 июля, 2015 Опубликовано 29 июля, 2015 · Жалоба В startup у Вас происходит инициализация FSMC? Да, именно так. Я использую рабочий пример из CubeMX, в котором уже все настроено для использования SDRAM в качестве системной памяти. Проблема в том, что STemWin - это скомпилированная библиотека, а не исходный код. При выполнении функции GUI_Init() она ломится в SDRAM в неизвестные адреса, файл линкера ей побарабану (простейший пример "Hello..." - линкер настроен на внутреннюю память). А Вы используете бинарник или исходный код emWin? файл линкера для использования SDRAM /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x08000000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_end__ = 0x081FFFFF; define symbol __ICFEDIT_region_RAM_start__ = 0xC0C00000; define symbol __ICFEDIT_region_RAM_end__ = 0xC0CFFF00; define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000; define symbol __ICFEDIT_region_CCMRAM_end__ = 0x1000FFFF; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x400; define symbol __ICFEDIT_size_heap__ = 0x2000; /**** End of ICF editor section. ###ICF###*/ define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; define region CCMRAM_region = mem:[from __ICFEDIT_region_CCMRAM_start__ to __ICFEDIT_region_CCMRAM_end__]; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; initialize by copy { readwrite }; do not initialize { section .noinit }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly }; place in RAM_region { readwrite, block CSTACK, block HEAP }; файл линкера без использования SDRAM /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x08000000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_end__ = 0x081FFFFF; define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; define symbol __ICFEDIT_region_RAM_end__ = 0x2002FFFF; define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000; define symbol __ICFEDIT_region_CCMRAM_end__ = 0x1000FFFF; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x4000; define symbol __ICFEDIT_size_heap__ = 0x2000; /**** End of ICF editor section. ###ICF###*/ define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; define region CCMRAM_region = mem:[from __ICFEDIT_region_CCMRAM_start__ to __ICFEDIT_region_CCMRAM_end__]; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; initialize by copy { readwrite }; do not initialize { section .noinit }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly }; place in RAM_region { readwrite, block CSTACK, block HEAP }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 29 июля, 2015 Опубликовано 29 июля, 2015 · Жалоба Проблема в том, что STemWin - это скомпилированная библиотека, а не исходный код. а какой смысл тогда крутить дефайны и функции менять, если это библиотека уже скомпиленая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TolikG 0 29 июля, 2015 Опубликовано 29 июля, 2015 · Жалоба а какой смысл тогда крутить дефайны и функции менять, если это библиотека уже скомпиленая? Смысл в том, что на плате стоит 16 мегабайт памяти, а использовать ее нельзя. Может подскажете где взять исходники? :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sadat 0 29 июля, 2015 Опубликовано 29 июля, 2015 · Жалоба Может подскажете где взять исходники? :smile3046: В сети только исходники версии 3.98 и 3.90 видел, из-за большой массы файлов компилирование проекта занимало несколько минут - поэтому emWin стала доступна лишь в виде "больших скомпилированных фалов". Однако в открытых источниках (3.90) есть часть кода в GUICore.C : #if defined(GUI_TRIAL_VERSION) { int i; for (i = 0; i < 10; i++) { GUI_DispString("This uC-GUI library\n" "is for evaluation\n" "purpose only.\n" "A license is\n" "required to use\n" "it in a product\n\n" "www.micrium.com\n"); GUI_GotoXY(0, 0); } } И никто не даст никакой вероятности, что проработав энное время на вашем устройстве, использующем готовые файлы, не появится примерно такое же сообщение. Или это я слишком заморачиваюсь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться