首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]使用alt_main和uart的api时的疑问

[求助]使用alt_main和uart的api时的疑问

目的:

利用alt_main以及uart模块提供的api函数编写一个简单的串口发送程序
前提:

使用nios II 8.0版本,已经设计好相应的硬件(PTF文件).system library设置中只勾选了"Clean exit"和"Reduced device driver".此时uart将采用fd(文件描述器)和small模式的驱动.在alt_main中已经调用了alt_irq_init()和alt_sys_init().
疑问:

观察altera_avalon_uart_fd.h可知在调用alt_sys_init()时已经实例化了一个全局变量uart,可是在alt_main中调用uart的api函数时使用这个全局变量时编译又会出错,就算添加了extern altera_avalon_uart_dev uart这句话还是不行。只有自己在alt_main中实例化一个uart时,才能用altera_avalon_uart_write(&uart.state,str,strlen(str),~O_NONBLOCK);请问这是为什么啊? 不加这句话进行IIS调试时可以添加全局变量uart,说明已经有了这个变量,却无法使用。不理解其中原由,还是我的理解有错?请高手指点,谢谢


ps:看到论坛上的uart nios中文使用说明。已经把uart的api内容解释的很清楚,可是刚到应用部分就没有了,没有解决我心中的疑问。

代码如下所示:

#include"system.h"
#include"alt_types.h"
#include"sys/alt_irq.h"
#include"sys/alt_sys_init.h"
#include"altera_avalon_uart.h"
#include"altera_avalon_uart_fd.h"
#include<string.h>
#include<fcntl.h>

extern altera_avalon_uart_dev uart;

int main(void) __attribute__((weak,alias("alt_main")));

void alt_main(void)
{
//altera_avalon_uart_state uart;
//uart.base=UART_BASE; //不添加这两句就是没有uart这个全局变量
char *str="hello my nios ^_^";


alt_irq_init(ALT_IRQ_BASE);
alt_sys_init();
while(1)
{
// altera_avalon_uart_write(&uart.state,str,strlen(str),~O_NONBLOCK);
}
}

[此贴子已经被作者于2008-12-19 22:02:08编辑过]

返回列表