Forum:
La funzione printf() su piattaforma PSoC non è immediatamente disponibile, del resto non esiste uno stdout occorre simularlo per utilizzare la UART e quindi indirizzare i risultati di printf() su un emulatore di terminale, principalmente per operazioni di debug.
Il codice suggerito è questo:
debug.c
/* ======================================== * * Copyright YOUR COMPANY, THE YEAR * All Rights Reserved * UNPUBLISHED, LICENSED SOFTWARE. * * CONFIDENTIAL AND PROPRIETARY INFORMATION * WHICH IS THE PROPERTY OF your company. * * ======================================== */ #include "debug.h" // Ricroda che devi aumentare Heap Size a 0x200 !!! #if defined(__ARMCC_VERSION) /* For MDK/RVDS compiler revise fputc function for printf functionality */ struct __FILE { int handle; }; enum { STDIN_HANDLE, STDOUT_HANDLE, STDERR_HANDLE }; FILE __stdin = {STDIN_HANDLE}; FILE __stdout = {STDOUT_HANDLE}; FILE __stderr = {STDERR_HANDLE}; { int ret = EOF; switch( file->handle ) { case STDOUT_HANDLE: UART_DEB_UartPutChar(ch); ret = ch ; break ; case STDERR_HANDLE: ret = ch ; break ; default: file = file; break ; } return ret ; } #elif defined (__ICCARM__) /* IAR */ /* For IAR compiler revise __write() function for printf functionality */ size_t __write(int handle, const unsigned char * buffer, size_t size) { size_t nChars = 0; if (buffer == 0) { /* * This means that we should flush internal buffers. Since we * don't we just return. (Remember, "handle" == -1 means that all * handles should be flushed.) */ return (0); } for (/* Empty */; size != 0; --size) { UART_DEB_UartPutChar(*buffer++); ++nChars; } return (nChars); } #else /* (__GNUC__) GCC */ /* For GCC compiler revise _write() function for printf functionality */ int _write(int file, char *ptr, int len) { int i; file = file; for (i = 0; i < len; i++) { UART_UartPutChar(*ptr++); } return len; } #endif /* (__ARMCC_VERSION) */
debug.h
#ifndef _DEBUG_H_ #define _DEBUG_H_ #include "stdio.h" #endif
Occorre, inoltre ampliare l'Heap size a 0x200 o meglio 0x400 se non ci sono problemi di disponibilità di memoria.
Naturalmente, visto che si fa uso della UART, occorre avviare il relativo componente
UART_Start();
Commenti recenti