在altera fpga中使用逻辑搭建的nios ii系统中,编写uart的时候出现如下错误:
Description Resource Path Location Type
Symbol 'ALT_CPU_FREQ' could not be resolved Uart.c /F31/BaseModule/Src line 85 Semantic Error

**分析:**报错是 Symbol 'ALT_CPU_FREQ' could not be resolved,说明编译器找不到标识符 ALT_CPU_FREQ 的定义 / 声明,简单说就是编译器不认识这个符号。
在header.h文件中添加 #include "Uart.h"

将头文件 header.h文件放到Uart.c的顶部,报错问题自动消失

下边是Uart的代码,有需要的可以自取
/*
- Uart.c
- Created on: 2022-5-12
Author: luo
*/
#include "Uart.h"
//#include "header.h"
//函数:发送一个字节
unsigned char UartTxByte(UART_ST * TARGET_UART, unsigned char l_u8ToTxByte)
{
unsigned int l_u32TimeWait;
TARGET_UART->TXDATA.BITS.TRANSMIT_DATA = l_u8ToTxByte;
l_u32TimeWait = 0;
while(TARGET_UART->STATUS.BITS.TRDY == 0)
{
l_u32TimeWait++;
if(l_u32TimeWait >= 100000)
{
return 1;
}
}
return 0;
}
//函数:发送多个字节
unsigned char UartTxBuf(UART_ST * TARGET_UART, unsigned int l_u32ToTxLen, unsigned char *p_u8ToTxBuf)
{
unsigned char l_u8Ret;
unsigned int i;
if(l_u32ToTxLen == 0)
{
return 1;
}
for(i=0; i<l_u32ToTxLen; i++)
{
l_u8Ret = UartTxByte(TARGET_UART, p_u8ToTxBuf[i]);
if(l_u8Ret != 0)
{
return l_u8Ret;
}
}
return 0;
}
//设置接收中断状态
unsigned char UartSetRxIrqState(UART_ST * TARGET_UART, unsigned char l_u8State)
{
if((l_u8State != UART_RX_IRQ_DISABLE) && (l_u8State != UART_RX_IRQ_ENABLE))
{
return 1;
}
TARGET_UART->CONTROL.BITS.IRRDY = l_u8State;
return 0;
}
//读取接收字节
unsigned char UartGetRxData(UART_ST * TARGET_UART)
{
return (TARGET_UART->RXDATA.BITS.RECEIVE_DATA);
}
//函数:设置波特率
unsigned char UartSetBaudrate(UART_ST * TARGET_UART, unsigned int l_u32BaudRate)
{
if(l_u32BaudRate < 9600)
{
return 1;
}
//根据手册设置
TARGET_UART->DIVISOR.BITS.BAUD_RATE_DIVISOR = (unsigned int)(ALT_CPU_FREQ/l_u32BaudRate+0.5);
return 0;
}