Initialization Overview (Xilinx BSP Repository)

razed11 wrote on Saturday, September 26, 2015:


I took some time to take a Xilinx Zynq example project (two tasks + queue) and strip away everything to understand how the source files are integrated. Then I tried the BSP repository approach. I generally don’t like to give up too much control to these automated tools but it is quite nice and cleaner. Nice work.

Can I get a rough overview of how the RTOS is initialized under these conditions? Where is the timer tick configured and the vectors configured. Do these things happen before main? They seem to as my application just creates the queue and two tasks and it works just fine. I noticed that the FreeRTOS vector table symbol is in play so that table must be relocated at some point.



rtel wrote on Saturday, September 26, 2015:

The start up sequence when using a stand alone BSP and when using a FreeRTOS BSP are in fact identical - its just that the callback functions which have to be provided by the application when using a standalone BSP are included in the port layer when using the FreeRTOS BSP.

The batch file you elude to in your other post copies the FreeRTOS source file, and the Zynq (Cortex-A9) port layer, into the repo directory, but if you look in the repo directory you will find it already contains some files before the stanard FreeRTOS files are copied across. You will find these in the \FreeRTOS\Demo\Xilinx_FreeRTOS_BSP\repo\bsp\freertos822_xilinx_v1_0\src\Source\portable\GCC\ARM_CA9 directory.

The Zynq uses the standard Cortex-A9 FreeRTOS port layer. The files that are already contained in the repo directory are portZynq7000.c and port_asm_vectors.S - these two files provide the additional information required to configure and run the standard Cortex-A9 port layer on the Zynq.