目的: 利用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编辑过] |