RTOSDemo on MicroZed with SDK 2015.4

raymadigan wrote on Thursday, March 24, 2016:

I am working to get the demo working on my Microzed. I imported the demo project without copying and I get an error for the include “xparameters.h” The file is in the standalone_bsp project and I cannot find a way to include it. I have added the include path both using a workspace directive and a filepath workspace and I can’t figure it out. Has anyone run across this problem?

Sorry I just failed to read all of the instructions.

heinbali01 wrote on Friday, March 25, 2016:

Hi Sting,

Try the following steps:

Unpack the entire ZIP in e.g. c:\temp\xilinx

Start 2015.4

File -> Switch -> Other -> enter e.g. “c:\temp\xilinx\workspace”

File -> Import -> General -> Existing project into workspace

Root directory enter:


and press TAB

The box will fill with three projects. Select them all and press OK.

When I press “Project -> Build All”, indeed I get mentioned error, a missing xparameters.h


Press File -> New -> Board support package (BSP)

Do not use the default but this location for the BSP :

  • Hardware platform: MicroZed_hw_platform
  • CPU: ps7_cortexa9_0
  • standalone (because the project already contains FreeRTOS kernel)

Press Finish
Choose libraries (none are needed) and press OK

Now right-click in “Project Explorer” on RTOSDemo, select Project references and make sure that these are selected:


It makes the main project (RTOSDemo) dependent on these 2 sub-projects, they will be included when building.

Now try “Project->Build All” again. RTOSDemo.elf will be created.

And also this file will be present:


Have a look at the attachment of this post: ‘MicroZed_debug.png’, it might answer your next questions :slight_smile:


raymadigan wrote on Monday, March 28, 2016:

Thanks for your help. I solved the problem in both ways now. I really appreciate your help.

I have the application running and I can ping it at the address that I set in the FreeRTOSConfig.h and I can ping the address. I for some reason can’t get the logging to the UDP to work. I probably have the addresses mixed up for some reason or some switch not set correctly and I will continue to grock through the config files to see what I missed.

I have xxxUDP_LOGGING_xxx setup at and the Microzed xxxIP_ADDRx setup at the source is supposed to output some debugging but I can’t track it.

I setup the Udp_Term at sendPort= 50000 recvPort at 1500

raymadigan wrote on Monday, March 28, 2016:

I am starting to understand the issue here, but barely. The hw_platforms that ship with the demo do not have bit files associated with them.

When I ‘Program FPGA’ a bitfile is installed in the fpga. I created a bitstream for processor 0 and program the fpga with that bitstream. When this is successful the MicroZed blue light comes on and is ready for the software. However when I try to run the software I believe, just a guess, that the hardware platform I am using is incompatible with the hardware platform that is shipped with the demo and the blue light goes off.

rtel wrote on Tuesday, March 29, 2016:

This is Xilinx tools specific stuff, rather than FreeRTOS specific stuff.

The demos ship with a hardware description in the form of a hardware project, from which the Xilinx tools auto-generate a BSP project, which in turn is used by the application project. The instructions on the documentation page give detailed information on how this is down - but the demo does not use anything outside of the hard wired ARM processor, the FPGA is not programmed so no bitstream is required [by the demo].

heinbali01 wrote on Tuesday, March 29, 2016:

Sting, about the UDP logging.

Here are all config parameters that influence the UDP logging:

/* Make this non-zero if your terminal needs CR+LF in stead of LF. */
#define configUDP_LOGGING_NEEDS_CR_LF  ( 0 )

/* The UDP port to which the UDP logging facility sends messages.
Open a UDP socket on this port number on your laptop: */
#define configUDP_LOGGING_PORT_REMOTE		2403

/* The local UDP port to which messages can be sent.
If you want to send messages to the UDP logging socket,
send them to the following port number: */
#define configUDP_LOGGING_PORT_LOCAL		2402

/* You can define configUDP_LOGGING_ADDR[0-3] which will be
used as a fixed target IP address.
As defined here, all UDP logging will be sent to on port 'configUDP_LOGGING_PORT_REMOTE' */
#define configUDP_LOGGING_ADDR0  192
#define configUDP_LOGGING_ADDR1  168
#define configUDP_LOGGING_ADDR2  1
#define configUDP_LOGGING_ADDR3  115

/* If you do not define configUDP_LOGGING_ADDR[0-3], the program
will look at your network address and netmask, and (in your case)
all logging will be sent to port 'configUDP_LOGGING_PORT_REMOTE' */

If you are able to PING, I don’t think you have a hardware problem and ALL UDP and TCP communication should be possible.

About the hardware initialisation: in the examples that I sent, another platform ZC02 was used, sorry about that.

I attached a new PGN file that shows the settings for MicroZed_hw_platform.


raymadigan wrote on Wednesday, March 30, 2016:

Thank you for your help. I couldn’t figure out why it wasn’t working so I turned off the Windows Firewall and ran Wireshark to check out what was happening on the network. Once I reasserted how brain dead I really am and fixed my addresses I can now get udp debug messages.

I however cannot get the HTTP functionality of the demo working. I disabled all demo but udp and http as follows:

#define mainCREATE_FTP_SERVER					0
#define mainCREATE_HTTP_SERVER 					1
#define mainCREATE_UDP_CLI_TASKS				0
#define mainCREATE_UDP_LOGGING_TASK 			1

and when I go to either a windows machine or a linux machine on the network and attempt to look at the http page I get the following:

   3.527.848 [SvrWork   ] Socket 80 -> State eCLOSED->eTCP_LISTEN
  24.731.194 [IP-task   ] Gain: Socket 80 now has 1 / 12 child
  24.731.218 [IP-task   ] prvSocketSetMSS: 1460 bytes for
  24.731.327 [EMAC      ] Network buffers: 62 lowest 62
  24.731.360 [IP-task   ] Socket 80 -> State eCLOSED->eSYN_FIRST
  24.731.394 [IP-task   ] Socket 80 -> State eSYN_FIRST->eSYN_RECEIVED
  24.731.452 [IP-task   ] Gain: Socket 80 now has 2 / 12 children
  24.731.474 [IP-task   ] prvSocketSetMSS: 1460 bytes for
  24.731.501 [IP-task   ] Socket 80 -> State eCLOSED->eSYN_FIRST
  24.731.546 [IP-task   ] Socket 80 -> State eSYN_FIRST->eSYN_RECEIVED
  24.731.598 [IP-task   ] TCP: passive 80 => set ESTAB (sock 2820e0)
  24.731.630 [IP-task   ] Socket 80 -> State eSYN_RECEIVED->eESTABLISHED
  24.731.685 [IP-task   ] TCP: passive 80 => set ESTAB (sock 1fc4f8)
  24.731.716 [IP-task   ] Socket 80 -> State eSYN_RECEIVED->eESTABLISHED
  24.731.776 [IP-task   ] xTCPCheckNewClient[0]: client on port 80
  24.731.818 [SvrWork   ] TPC-server: new HTTP client
  24.731.876 [SvrWork   ] TPC-server: new HTTP client
  24.786.066 [SvrWork   ] Open file '/ram/websrc/': Is a directory
  34.741.327 [IP-task   ] Socket 80 -> State eESTABLISHED->eLAST_ACK
  34.741.451 [IP-task   ] Socket 80 -> State eLAST_ACK->eCLOSE_WAIT
  34.741.511 [SvrWork   ] xHTTPClientWork: rc = -128
  34.741.534 [IP-task   ] Lost: Socket 80 now has 1 / 12 child
  34.741.555 [IP-task   ] FreeRTOS_closesocket[80 to]: buffers 64 socks 2

And the browser window waits forever, I will look at the wireshark capture next time.

When I close the browser window because I am tired of waiting I get

  290.390.277 [IP-task   ] Socket 80 -> State eESTABLISHED->eLAST_ACK
 290.390.396 [IP-task   ] Socket 80 -> State eLAST_ACK->eCLOSE_WAIT
 290.390.457 [SvrWork   ] xHTTPClientWork: rc = -128
 290.390.482 [IP-task   ] Lost: Socket 80 now has 0 / 12 children
 290.390.503 [IP-task   ] FreeRTOS_closesocket[80 to]: buffers 64 socks 1

Is there something obvious I am doing wrong?

raymadigan wrote on Wednesday, March 30, 2016:

I think a major disconnect that I am having is the hardware definition of the zynq processor. The demo hardware definition does not come with a bit file that determines the hardware on the zynq. Given there is no bit file and what I am doing doesn’t work, I assume I am not building this correctly.

Does the demo assume something about the hardware on the zynq?

rtel wrote on Wednesday, March 30, 2016:

…so the HTTP gets as far as “Open file ‘/ram/websrc/’: Is a
directory” - what URL did you use? You have to use a complete URL to
the file, rather than just the directory, as I think the default webpage
is something like freertos.html. Unless you have changed the files on
the RAM disk, you can see the URL used on this page:

Ref the bitfile. As far as I know, if you are just using the Cortex-A
processors, then no bit file is needed. That is because the Cortex-A
processors are hard processors that can be used just like any processor

  • they are not soft cores that need the FPGA to be programmed.

raymadigan wrote on Wednesday, March 30, 2016:

I finally quit trying to take shortcuts. I ftp’d to the site and looked at the file, I somehow thought the page would automatically show and should have known better. Once I saw the page name I then was able to display the page with I think I have all I need to start working on my proof of concept.

I still don’t understand the lack of a bit file and will figure that out later. There might be a boot oprion to boot a cortex processor without one but if you want to add any fpga components and be able to connect to them, you have to generate a bit file and I think it is a hard processor, the bit file just loads all of the support for the processor to connect to the fpga ip.

But thats a specific issue with the MicroZed and not FreeRTOS.

So thank you everyone for being patient with me. I appreciate all of the guidance.