2012-04-20 49 views
1

我剛開始使用evk1105 dev.board。我需要將printf()重定向到usart。 我有以下代碼(EVK1105編輯USART爲例):當使用set_usart_base((void *))EVK1105 dev時隱式聲明函數。板。 Atmel

#include <avr32/io.h> 
#include "compiler.h" 
#include "board.h" 
#include "power_clocks_lib.h" 
#include "gpio.h" 
#include "usart.h" 
#include "nmea.h" 
#include <stdio.h> 

/*! \name USART Settings 
*/ 
//! @{ 

# define EXAMPLE_TARGET_PBACLK_FREQ_HZ FOSC0 // PBA clock target frequency, in Hz 

#if BOARD == EVK1105 
# define EXAMPLE_USART     (&AVR32_USART0) 
# define EXAMPLE_USART_RX_PIN   AVR32_USART0_RXD_0_0_PIN 
# define EXAMPLE_USART_RX_FUNCTION  AVR32_USART0_RXD_0_0_FUNCTION 
# define EXAMPLE_USART_TX_PIN   AVR32_USART0_TXD_0_0_PIN 
# define EXAMPLE_USART_TX_FUNCTION  AVR32_USART0_TXD_0_0_FUNCTION 
# define EXAMPLE_USART_CLOCK_MASK  AVR32_USART0_CLK_PBA 
# define EXAMPLE_PDCA_CLOCK_HSB  AVR32_PDCA_CLK_HSB 
# define EXAMPLE_PDCA_CLOCK_PB   AVR32_PDCA_CLK_PBA 
#endif 

#if !defined(EXAMPLE_USART)    || \ 
    !defined(EXAMPLE_USART_RX_PIN)  || \ 
    !defined(EXAMPLE_USART_RX_FUNCTION) || \ 
    !defined(EXAMPLE_USART_TX_PIN)  || \ 
    !defined(EXAMPLE_USART_TX_FUNCTION) 
# error The USART configuration to use in this example is missing. 
#endif 

//! @} 

#if UC3L 
/*! \name Parameters to pcl_configure_clocks(). 
*/ 
//! @{ 
static scif_gclk_opt_t gc_dfllif_ref_opt = { SCIF_GCCTRL_SLOWCLOCK, 0, false }; 
static pcl_freq_param_t pcl_dfll_freq_param = 
{ 
    .main_clk_src = PCL_MC_DFLL0, 
    .cpu_f  = EXAMPLE_TARGET_MCUCLK_FREQ_HZ, 
    .pba_f  = EXAMPLE_TARGET_PBACLK_FREQ_HZ, 
    .pbb_f  = EXAMPLE_TARGET_PBACLK_FREQ_HZ, 
    .dfll_f  = EXAMPLE_TARGET_DFLL_FREQ_HZ, 
    .pextra_params = &gc_dfllif_ref_opt 
}; 
//! @} 
#endif 
/* STIAN */ 
char nmea1[] ="$GPRMC,131637.000,V,5820.0658,N,00834.5652,E,0.00,,090911,,,A*69"; 
char nmea2[]="$GPRMC,131637.000,A,5820.0658,N,00834.5652,E,0.00,,090911,,,A*7E"; 
char nmea3[]="$GPRMC,131640.000,A,5820.0657,N,00834.5652,E,0.00,,090911,,,A*71"; 
char line [82]; 
char nmea[90]; 
/*END STIAN*/ 
int usart_get_return(volatile avr32_usart_t *usart) 
{ 
    int rx_char; 
    int retval = USART_SUCCESS; 
    int i = 0; 

    while (1) 
    { 
    rx_char = usart_getchar(usart); 
    if (rx_char == USART_FAILURE) 
    { 
     usart_write_line(usart, "Error!!!\r\n"); 
     retval = USART_FAILURE; 
     break; 
    } 
    if (rx_char == '\x03') 
    { 
     retval = USART_FAILURE; 
     break; 
    } 
    usart_putchar(usart, rx_char); 
    nmea[i] = rx_char; 
    i++; 


    if (rx_char == '\r') 
    { // Add a LF and consider this as the end of the line. 
     usart_putchar(usart, '\n'); 
     break; 
    } 
    } 

    return retval; 
} 
int main(void) 
{ 
    pcl_switch_to_osc(PCL_OSC0, FOSC0, OSC0_STARTUP); 
    static const gpio_map_t USART_GPIO_MAP = 
    { 
     {EXAMPLE_USART_RX_PIN, EXAMPLE_USART_RX_FUNCTION}, 
     {EXAMPLE_USART_TX_PIN, EXAMPLE_USART_TX_FUNCTION} 
    }; 

    // USART options. 
    static const usart_options_t USART_OPTIONS = 
    { 
     .baudrate  = 57600, 
     .charlength = 8, 
     .paritytype = USART_NO_PARITY, 
     .stopbits  = USART_1_STOPBIT, 
     .channelmode = USART_NORMAL_CHMODE 
    }; 

    //set_usart_base((void *) EXAMPLE_USART); 

    // Assign GPIO to USART. 
    gpio_enable_module(USART_GPIO_MAP, 
      sizeof(USART_GPIO_MAP)/sizeof(USART_GPIO_MAP[0])); 

    // Initialize USART in RS232 mode. 
    usart_init_rs232(EXAMPLE_USART, &USART_OPTIONS, EXAMPLE_TARGET_PBACLK_FREQ_HZ); 


    // Hello world! 
    usart_write_line(EXAMPLE_USART, "Polycon AIS-module! (press enter)\r\n"); 

    // Press enter to continue. 
    while (usart_get_return(EXAMPLE_USART) == USART_FAILURE); // Get and echo characters until end of line. 


    printf("NMEA inneholder:%s\r\n",nmea); 
    while (usart_get_return(EXAMPLE_USART) == USART_FAILURE); // Get and echo characters until end of line. 
    usart_write_line(EXAMPLE_USART, "Goodbye.\r\n"); 

    while (true); 
} 

當添加set_usart_base我得到以下編譯錯誤implicit declaration of function 'set_usart_base' set_usart_base在這裏找到:在我做錯了什麼avrfreaks.net

任何提示?

回答

0

取而代之的是:

set_usart_base((void *) EXAMPLE_USART); 

使用本:

extern volatile avr32_usart_t *volatile stdio_usart_base; 
stdio_usart_base = EXAMPLE_USART; 

聲明使用可能是:

extern volatile struct avr32_usart_t *volatile stdio_usart_base; 

看看到:http://support.atmel.no/knowledgebase/avr32studiohelp/AT32UC3B_Software_Framework/SERVICES/USB/CLASS/HID/EXAMPLES/HID_EXAMPLE_STANDALONE/DOC/html/a00045.html#l00171

+0

,使該以下問題: 'stdio_usart_base''聲明中'type'默認爲'int' 'stdio_usart_base''衝突的類型限定符 – StianL 2012-04-20 09:18:54