This release upgrades the freeRTOS port with minor changes for SDK 14.4. This port is based on the version 14.4 of Xilinx ISE Design Suite, and was developed and tested on a Zynq APSoC based ZC702 board.
Xilinx_Zynq.zip
FreeRTOS Interactive
|
This release upgrades the freeRTOS port with minor changes for SDK 14.4. This port is based on the version 14.4 of Xilinx ISE Design Suite, and was developed and tested on a Zynq APSoC based ZC702 board.
hey all,
I'm currently trying to get the hello world application included in the above zip file to work but I keep getting an error message on the console whenever I run it.
EXCEPTION, HALTED!
Data Fault Address: 0x00000000
FP: 0x0011AC08 LR: 0x00101800
R0: 0xE0DC1000 R1: 0x01010101
R2: 0x02020202 R3: 0x0010DBAC
R12: 0x12121212
I followed all the instructions in the included pdf file. I am also using SDK 14.4 with the zc702 board.
The non-FreeRTOS helloworld application works fine.
Any help would be appreciated.
Regards,
-micael
I have the same issue and was wondering if you ever found the solution?
Hi guys, I am also interested in knowing how to resolve this issue.
Appreciate if you can share the solution
Hi guys,
Could any body have configured UART interrupt for Zynq under FreeRTOS? Any help is highly appriciated.
Does this Port support External interrupt from peripherals? I am trying to route the interrupt from the FPGA to the the core running FREE Rtos. but it does not catch the interrupt. The following link explains the Interrupt implementation for Cortex A9 processors and none of these parameters are defined in the Port available for zynq ( http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html). Can any one help me with the interrupt implementation for Free Rtos on Zynq
mm
Hello,
Thanks for this topic.
I would like to know is the kernet provided is a SMP (the application turn on both CPU) ? or when i test the application it will turn only on one CPU ?
Thanks a lot
Hi, We write a code below to use FPGA interrupt instead of timer interrupt set up by FreeRTOS. The prototype of vApplicationSetupHardware() is defined in portmacro.h and its implemented can be in main.c. It will execute in xPortStartScheduler() that will enable timer interrupt by FreeRTOS porting. So in this function it will disable/disconnect timer interrupt first, then it will connect vTickISR and your own interrupt ID. Any comments for this will be very useful for us, thank you.
****************************************************************************************************************************************************************************************************************
Code:
void vApplicationSetupHardware( void )
{
/* Do nothing */
// ********************************************************
// NOTE:
// This function is executed in xPortStartScheduler( void )
// ********************************************************
extern void vTickISR (void);
XScuGic *pObj;
U32 time = 44400; // time = 888us / 0.02us
// Get interrupt controller pointer from FreeRTOS
pObj = prvGetInterruptControllerInstance();
// Disable and disconnect timer interrupt generated from FreeRTOS
XScuGic_Disable( pObj, XPAR_SCUTIMER_INTR );
XScuGic_Disconnect( pObj, XPAR_SCUTIMER_INTR );
// Setup FPGA register to generate interrupt
Xil_Out32( 0x41200000, time | 0x80000000 );
// Enable FPGA interrupt
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
(Xil_ExceptionHandler) XScuGic_InterruptHandler,
(void *) pObj);
XScuGic_Connect( pObj, 61, (Xil_ExceptionHandler)vTickISR, (void *)pObj );
XScuGic_Enable( pObj, 61 );
Xil_ExceptionEnable();
XScuGic_SetPriorityTriggerType( pObj, 61, 0xa0, 3);
}
Note in the official Zynq demo the timer interrupt is configured in an application callback anyway. http://www.freertos.org/RTOS-Xilinx-Zynq.html
Hi
In the application vApplicationSetupHardware(), you need to call just the initialization for all the interrupt handler. Place this code into some function named e.g. FPGA_Interrupt_init and call this function from the vApplicationSetupHardware(). Are u receiving interrupt in your program or not? One more thing you do not need "Disable and disconnect timer interrupt generated from FreeRTOS" line. Follow the following sequence
1. Get Interrupt controller Instance
2. Lookup for specific device
3. Initialize the device _CfgInitilization( ).
4. connect the device interrupt with the interrupt controller XScuGic_Connect()
5. Enable interrupt in the interrupt controller XScuGic_Enable
6. set some other setting for the specific device etc.
The content is very useful and helpful to my education and good life also. The content is providing more writing services and more helpful education books also. Thanks for share your helpful thoughts for us.
The first query doesn't appear to be addressed, which is a bummer for me, since I've been having a similar issue with it.
Rd
The official port will be updated to the latest SDK version for the next FreeRTOS release.
Hi everyone,
About the first question in this thread, we found the "EXCEPTION, HALTED!" error can be avoided by increasing the stack size of task. Hope it can help you.
Weili
When I try to create any of the example applications , I get this error message: "get invalid command name "xget_ips" "
I note that "xget_ips" appears in the applications' .tcl scripts. I get the same error in both SDK versions 2014.4 and 2014.2, for all hw platforms
Dear Freertos:
I uesd this port based on the version 14.4 of Xilinx ISE Design Suite and it worked on a Zynq APSoC based ZC702 boar.
Now I need TCP/IP function on this base.
Could you support this function if we pay to you for this service ?
Moreover if you have another good suggestion,please feel free to let me know.
> I uesd this port based on the version 14.4 of Xilinx ISE Design Suite and it worked on a Zynq APSoC based ZC702 boar.
> Now I need TCP/IP function on this base.
> Could you support this function if we pay to you for this service ?
This is not the official port, so we would not support it ourselves. We do however have a fully supported port, which includes basic networking, on the following link:
http://www.freertos.org/RTOS-Xilinx-Zynq.html
We also have FreeRTOS+TCP running on the same board, and will release that project in good time.
Hi Richard! Can you elaborate on when "FreeRTOS+TCP" for Zynq will be made available? I have a pretty dire need right now and I am finding that the "fully supported port" of LWIP is not thread safe. I am very interested in trying (even beta testing) the FreeRTOS+TCP for Zynq as the claim is that it is thread safe. If there is anyway I can get the necessary portable files for Zynq, I would greatly appreciate it.
Thanks!
Dan - it will actually be the next demo to be released. It has been running with the FTP server for a very long time, but needs to be put into an SDK project. It will be announced on Twitter when it is released (https://twitter.com/intent/follow?screen_name=real_FreeRTOS).
Is it the lwIP demo in the FreeRTOS download you have had a thread safety issue with? If so, what was the issue?
[The FreeRTOS support forum would be a better place for this question]
Hi Richard, Thanks for the reply. Yes there does appear to be an issue with lwIP. I have a listener task that creates a socket binding to a particular port (allowing connections from any IP). I set up that socket to listen and then loop looking for acceptance (lwip_accept). Once acceptance has been achieved, I create another worker task to handle the required work so my listener can continue to listen for new connection requests. I have a test application that I am running on my workstation that I launch multiple instances of. Each one is making a TCP connection to the specified port and requesting data to be returned. The test application validates the data being returned. What I am finding is that the test applications will run for a little while with everything ok and then the data validation on both applications begin to fail. If I stop one of the applications, the other application once again works correctly. Starting the 2nd application again while the first is running causes a problem again. This same test application has been used connecting to the same hardware with PetaLinux running with similar listener logic and we never had any problems with multiple clients. My reading on the web suggests that lwIP is not thread safe (which is what I am also witnessing). I also see in the opt.h file of lwIP that there appears to have been an attempt to provide additional locking with 2 defines - LWIP_TCPIP_CORE_LOCKING and LWIP_TCPIP_CORE_LOCKING_INPUT. Both of these have comments above them that suggest they are "EXPERIMENTAL" and not to use it if you are not an active lwIP project member". Having said that, I have tried to enable these and after fixing a couple of compiler errors I have noticed that they do not fix the problem I am seeing. The example provided with the Zynq port does not create a new task when a connection is made and hence does not fall victim to what I see because all work must be completed before another connection is accepted. Anyhow - I look forward to trying the FreeRTOS+TCP when it is released. Do you know if it is weeks or months away from being released?
Thanks again!
Richard - A little more information. The data being requested is on-board FPGA memory locations. I guard the access to the memory locations with a simple binary semaphore so only 1 thread can access the FPGA memory location at any given time. Based upon strategic placement of some debug printfs, I can see that threads are getting blocked and then are able to run so I do not believe this is the area of concern.
OK - so I was able to get multiple connections to work with the listener I had set up - It turns out that I needed to wrap a piece of the task that was spawned after a TCP connection is made that parses the LWIP message with a taskENTER_CRITICAL followed by a taskEXIT_CRITICAL. So now I do not witness any data validation failures. I was previously just guarding the actual write and read calls to FPGA memory locations with a MUTEX but I see now how the process message function could get clobbered if two tasks attempt to call it with different requests in close succession. Looks like I might be able to get by with LWIP after all.
Hi,
I would like to follow up on any update on the issue about an error message: "get invalid command name "xget_ips" when attempting to create a demo FreeRTOS Hello World application project.
I am using this port with Xilinx SDK 14.4.1.
Thank you.