Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++
12603 Discussions

JTAG UART repeating characters on Cyclone IV Transciever Kit

Altera_Forum
Honored Contributor II
1,232 Views

I am not sure what is up ... I have tried JTAG_UART with interrupt and polling ( with small model ) and there doesn't seem much difference. 

If I fun printf("Hello\n"); ten times through a loop, the result is similar but not the same number of repeated characters. 

 

HHHHHHHHHeeeeeeeeeeeeeeeelllllllllllllllllllllllllllllllloooooooo instead of Hello. It is like the JTAG UART is picking up extra but correct charaters. 

I have run memory tests and may try output to the LCD ... but I believe the data and text side of things are fine since the program execution is fine 

just the stdio via the JTAG UART seems to be problematic. 

 

Any ideas ? 

 

Thanks, Bob. 

 

PS: I checked via the Eclispse Debugger the string constant "Hello" in memory and it looked fine .
0 Kudos
4 Replies
Altera_Forum
Honored Contributor II
518 Views

I'm thinking this JTAG UART is similar to semi-hosting .. the stdio is directed to hardware buffers and the buffer is unloaded via the JTAG connection to Eclipse. If the characters get to the buffer correctly then repeating characters could be on the JTAG / Eclipse driver side.  

To debug I have tried reducing the buffer depth and threshold and changing from interrupt mode to polled mode.  

I guess I can try to debug in Eclipse and see if the correct number of characters are delivered by the putc routing called from printf. 

 

Th other thing I could do is to switch to a real UART and would like to use a "USB JTAG" conenction but don't think the Cyclone kit has such a facility ? 

 

All the time I worked with Arria , the JTAG UART worked fine.
0 Kudos
Altera_Forum
Honored Contributor II
518 Views

Check the stack isn't hitting the heap. 

printf() will use a lot of stack and it might all be going horribly wrong.
0 Kudos
Altera_Forum
Honored Contributor II
518 Views

Thanks Dave, 

 

I can check that in the debugger... 

Would you examine the stack pointer value as the printf progresses ? 

I am not familiar with all the debug hooks in Eclipse but for a JTAG debugger I would add a barrier or waypoint at the top of the stack to trap such a nasty event. 

 

However, if there was such a collision I would expect more to go off into the weeds unless all I did was a single printf. 

I added the printf to a loop with an count value that I would expect was on the heap and I got the printf called the expected number of times  

all with the similar but not identical signature of repeated characters. 

 

To isolate this I really need to redirect the stdio to something apart from the JTAG UART, like a real UART. 

If I get the same result then I would say it is something more pervasive.  

I have other variables on the heap that control the printf being called so I would expect them to be corrupted by a stack -> heap collision. 

 

 

I also have a recursion test to load up the stack and I can try running that to see if bad things happen without calling printf.
0 Kudos
Altera_Forum
Honored Contributor II
518 Views

I believe this was a weird "side-effect" of the wrong clock driving the JTAG_UART component. 

Looks to be back together now. 

 

Thanks, Bob.
0 Kudos
Reply