870 views
in System Integration by

I have an application, which use embedded wizard 8.30. I dont have any problem with this. But i want to upgrade embedded wizard to 9.10. I think, i implement all necessary changes.
But my application goes hard fault after EwProcessSignals function. If i comment this function, my application work. Because of commenting EwProcessSignals function, not work correctly.
For testing purpose, i implement your Hello world example and comment EwProcessSignals function. Result; there is no text but when i touch the screen, i can see your embedded wizard logo and i can also move this logo.
Because of EwProcessSignals function is precompiled, i cant solve this problem.
My application work on Eclipse-AC6. My definitions are;

EW_CPU_LOAD_MEASURING 1
EW_FRAME_BUFFER_COLOR_FORMAT EW_FRAME_BUFFER_COLOR_FORMAT_RGBA8888
EW_MAX_GLYPH_SURFACE_WIDTH 256
EW_MAX_GLYPH_SURFACE_HEIGHT 256
EW_MAX_SURFACE_CACHE_SIZE 0x400000
EW_SURFACE_ROTATION 90
EW_USE_DMA2D_GRAPHICS_ACCELERATOR
EW_USE_DOUBLE_BUFFER 1
EW_USE_OFFSCREEN_BUFFER 0

Do you have any idea? Thanks.

1 Answer

0 votes
by

Hello,

commenting out the function EwProcessSignals() is not the solution. This function is absolutley necessary in order to run any GUI application.

Please try first to get the Hello World example up and running as it is. In case there are errors, please post the output on the console.

Best regards,

Manfred.

by
I now this function is absolutley necessary. I comment this function for testing porpuse. I didn't implement xprintf function on my application. I will try to implement, if it is helpful to understand the reason. During this time, is there any suggestion blindly? Thanks.
by
I only get this before application is stuck.

Initialize Display...                        [OK]
Initialize Touch Driver...                   [OK]
Initialize Memory Manager...                 [OK]
Initialize Graphics Engine...                [OK]
Create Embedded Wizard Root Object...        [OK]
Create Embedded Wizard Viewport...           [OK]
---------------------------------------------
Target system                                STM32F769-Evalboard
Color format                                 RGBA8888
MemoryPool address                           0xC1800000
MemoryPool size                              5316608 bytes
Framebuffer address                          0xC1E89000
Doublebuffer address                         0xC1D12000
Framebuffer size                             800 x 480
EwScreeenSize                                480 x 800
Graphics accelerator                         DMA2D
Vector graphics support                      enabled
Bidirectional text support                   enabled
Operating system                             none
External flash device                        none
Toolchain                                    GCC
C-Compiler version                           6.3.1
Build date and time                          Dec 18 2018, 14:16:53
Runtime Environment (RTE) version            9.10
Graphics Engine (GFX) version                9.10
Max surface cache size                       4194304 bytes
Glyph cache size                             256 x 256
Max issue tasks                              100
Surface rotation                             90
---------------------------------------------
by
What do you mean with stuck? Is there a hard fault or does the application run in an endless loop?

I assume that this is a modified application because of the surface rotation and the RGBA8888 color format and the disabled OS usage. Correct?

Can you try the original Hello World application without modifications - Does this run? If not, what is the difference between your hardware and the STM32F769-Evalboard?
by

Yes, stuck means hardware fault.

Yes surface rotation 90, color format RGBA8888 and OS disabled in my application.

I can't execute RGB565 in my application so i only modify color format to RGBA8888 in your hello world example. Result is same.

For reminding, my application works on 8.30 but not work on 9.10.

My hardware has lots of changes. I can't explain all of them. I think a few modification is important. I change all modification on 8.30 and my application and your hello world application work correctly.

Changes are;

  • Same SDRAM but only 1 pin change. FMC_SDNWE connected PC0. I think this is no your problem. RAM works fine for all addresses.
  • My LCD port is not DSI. I use LTDC and RGB interface.
  • I have an different touch ic.

May be you can send difference of EwProcessSignals function between 8.30 to 9.10. Or possible hard fault reasons.

Is this function has any platform depended routine or relation between TargetSpecific folder. If it is help, I can send my TargetSpecific folder with e-mail.

Thanks.

by

Hello,

there is no significant change within EwProcessSignals() - especially no change that could cause a hard fault.

I assume that not all chages that you have done within /TargetSpecific are taken to the new version. Typically, these kind of hard faults are caused by incorrect memory timings. Can you please check the SDRAM timing and refresh by using the memory test - just to be sure that the content that is read after some time is reliable.

Furthermore, changing from DSI to RGB is a bigger change - maybe you can compare your /TargetSpecific implementation with a Build Environment that already uses RGB via LTDC (e.g. STM32F746 Discovery).

Best regards,

Manfred

by

Hello,

I found problem. Hard fault caused by memory protection unit. My old application which used 8.30, run with 8MB memory protection area. Because my application run on SDRAM. Other 24MB area is not configured by MPU. MemoryPool work on this area. There is no problem on 8.30.

But after 9.10, I have to configure this 24MB area with MPU. So problem solved. I don't know why, but it works.

    MPU_InitStruct.Enable                     = MPU_REGION_ENABLE;
    MPU_InitStruct.Number                    = MPU_REGION_NUMBER0;
    MPU_InitStruct.BaseAddress            = SRDAM_START_ADDRESS;
    MPU_InitStruct.Size                         = MPU_REGION_SIZE_32MB;
    MPU_InitStruct.SubRegionDisable     = 0x0;
    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_BUFFERABLE;
    HAL_MPU_ConfigRegion(&MPU_InitStruct);

Thanks.

by
Great! Thanks for reporting the solution!

Embedded Wizard Website | Privacy Policy | Imprint

...