cancel
Showing results for 
Search instead for 
Did you mean: 

Azure RTOS - Will there be full support (i.e. GUIX)?

NTipp.1
Associate II

I notice that ST has announced it's roll out of licenses for Azure RTOS on specific STM32 devices during 2021:

https://www.st.com/content/ccc/resource/sales_and_marketing/presentation/product_presentation/group1/5b/4f/89/bf/8f/18/4e/83/Microcontrollers_STM32Cube_AzureRTOS/files/Microcontrollers_STM32Cube_AzureRTOS.pdf/jcr:content/translations/en.Microcontrollers_STM32Cube_AzureRTOS.pdf

The limited documentation so far makes reference to ThreadX, FileX, NetX/NetX Duo and USBX. The only component not mentioned is GUIX. So my question is:

Will there be graphics driver support from ST for GUIX?

I know there is TouchGFX, but it would be a pity not to support the entire Azure infrastructure.

29 REPLIES 29

@SLimi.1 when I look at your function guix_thread_entry() vs my function tx_cm7_lcd_thread_entry() I notice that I define the canvas_memory field in the display table, but I fail to see where you define the canvas memory in your code, and so I wionder if maybe the GUIX system is trying to allocate that memory itself somewhere, and thus use your internal RAM rather than the expected external SDRAM.

@CIsel.1 

Good catch. I added the following to the thread, and double checked the Buffer address location to be 0xD0000000

extern GX_STUDIO_DISPLAY_INFO hello_world_display_table[];
hello_world_display_table[MAIN_DISPLAY].canvas_memory = (GX_COLOR *) Buffers[0];

The build still hits a RAM overrun.

The .MAP file doesn't provide much information either. My board used the MB1166-A09 LCD daughter board, which uses the nt35510 LCD controller.

Ah, I think this is the culprit in your file named H747-GUIX/CM7/Core/Src/hello_world_specifications.c you have this :

ULONG main_display_canvas_memory[192000];

which is used in the following hello_world_display_table[1]

In my case I have a GX_NULL, in the file H747-WeighingStation/CM7/Core/Src/H747_WeighingStation_specifications.c

I do not remember offhand how this is defined, probably in the GUIX studio somewhere

@CIsel.1  Thank you!

That was it. In GUIX Studio, Configure-> Project / Displays are the settings to set the Target CPU, Toolchain, and uncheck allocate canvas memory.

@SLimi.1 
You are welcome, glad it worked eventually 🙂

@CIsel.1  It is not working yet. I got past this issue Canvas issue, but I am getting a hardware fault when the buffer 0xD0000000 is being cleared.

SLimi.1
Associate III

@CIsel.1 

I cannot figure out why the code is crashing at clearing the memory area in gx_canvas_create.c. The buffer is pointing to the correct SRAM address, but the code faults on the memory clear as if there it was the wrong memory address.

I see your init code of the SDRAM (lines starting with + below) is quite different from mine (lines starting with -), are you convinced your parameters are ok ?

 

/* hsdram1.Init */
hsdram1.Init.SDBank = FMC_SDRAM_BANK2;
- hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9;
- hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
+ hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
+ hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_32;
hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
- hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
+ hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_1;
hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
- hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
- hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
+ hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_DISABLE;
+ hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
/* SdramTiming */
- SdramTiming.LoadToActiveDelay = 2;
- SdramTiming.ExitSelfRefreshDelay = 7;
- SdramTiming.SelfRefreshTime = 4;
- SdramTiming.RowCycleDelay = 7;
- SdramTiming.WriteRecoveryTime = 3;
- SdramTiming.RPDelay = 2;
- SdramTiming.RCDDelay = 2;
+ SdramTiming.LoadToActiveDelay = 16;
+ SdramTiming.ExitSelfRefreshDelay = 16;
+ SdramTiming.SelfRefreshTime = 16;
+ SdramTiming.RowCycleDelay = 16;
+ SdramTiming.WriteRecoveryTime = 16;
+ SdramTiming.RPDelay = 16;
+ SdramTiming.RCDDelay = 16;

@CIsel.1 

I thought I made those changes, but the failure remains even after setting them correctly. TouchGFX is working so I am going to move on at this point. Thanks.

@SLimi.1 

No worries.  Good luck