- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello All!
Is there a way I can echo simple printf commands inside the IDE for debugging purposes?
With Arduino I use serial.print() religiously to debug programs as I work. Seeing what's inside variables, creating breakpoints to see if a program has gone awry, etc.
I've tried to replicate that approach with my CY8CKIT-059, but the USB UART serial interface is much more complex. As I learn it, I'm trying to debug it too (LOL!)
Solved! Go to Solution.
- Tags:
- debug
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Yes, it's the first trap I was caught, too 😉
As far as I know of, there are at least two approaches we could take
(1) use printf with changing the configuration (USBUART)
(2) use UART_PutString() (any UART)
For (1) There is an AN "KBA89724", it uses USBUART.
I also posted a topic regarding to this.
printf and float rhapsody (aka, yet another printf and floating topic)
I'd recommend you to use USB-Serial function of KitProg
As I don't want to connect 2 cables to CY8CKIT-059.
For (2), I'd do something like below
schematic
Pin List
Then change some build settings, if you need to support "float"
From the menu Project > Build Settings...
Select ARM GCC xxx > Linkder > Command Line, then add Custom Flags
Add "-u _printf_float" for print, sprintf, and "-u _scanf_float" for scanf, sscanf.
Similarly in the Linker > General
Set "Use newlib-nano Float Formatting" to True
As floating point requires more memory, we also need to change the heap size
Select and double click to open Workspace Explorer > <the project> > Design Wide Resources
Then change the Heap Size bigger, the default is 0x80, I changed it to 0x400 here
Now, the program
main.c
=================
#include "project.h"
#include "stdio.h"
char str[64] ; /* print buf */
void print(char *str)
{
UART_PutString(str) ;
}
int main(void)
{
int icount = 0 ;
float fcount = 0.0 ;
CyGlobalIntEnable; /* Enable global interrupts. */
UART_Start() ;
sprintf(str, "UART Test (%s %s)\r\n", __DATE__, __TIME__) ;
print(str) ;
for(;;)
{
sprintf(str, "counts: %5d, %5.2f\r\n", icount, fcount) ;
print(str) ;
icount++ ;
fcount += 0.01 ;
CyDelay(1000) ; /* wait 1000ms = 1 sec */
}
}
=================
I used "Tera Term" for the serial terminal, and the output was
moto
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Yes, it's the first trap I was caught, too 😉
As far as I know of, there are at least two approaches we could take
(1) use printf with changing the configuration (USBUART)
(2) use UART_PutString() (any UART)
For (1) There is an AN "KBA89724", it uses USBUART.
I also posted a topic regarding to this.
printf and float rhapsody (aka, yet another printf and floating topic)
I'd recommend you to use USB-Serial function of KitProg
As I don't want to connect 2 cables to CY8CKIT-059.
For (2), I'd do something like below
schematic
Pin List
Then change some build settings, if you need to support "float"
From the menu Project > Build Settings...
Select ARM GCC xxx > Linkder > Command Line, then add Custom Flags
Add "-u _printf_float" for print, sprintf, and "-u _scanf_float" for scanf, sscanf.
Similarly in the Linker > General
Set "Use newlib-nano Float Formatting" to True
As floating point requires more memory, we also need to change the heap size
Select and double click to open Workspace Explorer > <the project> > Design Wide Resources
Then change the Heap Size bigger, the default is 0x80, I changed it to 0x400 here
Now, the program
main.c
=================
#include "project.h"
#include "stdio.h"
char str[64] ; /* print buf */
void print(char *str)
{
UART_PutString(str) ;
}
int main(void)
{
int icount = 0 ;
float fcount = 0.0 ;
CyGlobalIntEnable; /* Enable global interrupts. */
UART_Start() ;
sprintf(str, "UART Test (%s %s)\r\n", __DATE__, __TIME__) ;
print(str) ;
for(;;)
{
sprintf(str, "counts: %5d, %5.2f\r\n", icount, fcount) ;
print(str) ;
icount++ ;
fcount += 0.01 ;
CyDelay(1000) ; /* wait 1000ms = 1 sec */
}
}
=================
I used "Tera Term" for the serial terminal, and the output was
moto