目的:
利用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编辑过]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |