nios的头文件

“alt_types.h”头文件定义了数据类型,;system.h是你在建立软件工程后伴随产生的,;对于#include"stdio.h&;当然有区别;#include"stdio.h&qu;当要调用某个函数时;先在用户自已编写的文件中查找,如果找不到再到库文;而#include<stdio.h>;所以如果是调用自己写的函数的


“alt_types.h”头文件定义了数据类型,如下所示:

system.h是你在建立软件工程后伴随产生的,而altera_avalon_pio_regs.h,alt_types.h是你安装完ide就会有的。

对于#include"stdio.h "这种形式,不同编译器的寻找方法可能不同的。而#include<stdio.h> 都是在自己的include目录里面寻找。

当然有区别

#include"stdio.h "

当要调用某个函数时

先在用户自已编写的文件中查找,如果找不到再到库文件里去找,

而#include<stdio.h> 是直接到库文件里去找

所以如果是调用自己写的函数的话就用#include"stdio.h ",这种形式

而调用标准库函数的话就用#include<stdio.h> 这种形式,可以提高速度

文件包含include有三种形式的控制指令

1:#include <文件名>

将把该行替换为文件名指定的文件的内容。文件名不能包含> 或换行符。 如果文件名包含字符 " ' \ 或 /* 则行为没有定义。

预处理器将在某些特定的位置查找指定的文件

如:在tc下 Options->Directories-> Include directories:

可以设置include目录 (如:c:\TURBOC2\INCLUDE)

2:#include "文件名 "

首先从原文件的位置开始搜索指定文件,如果没有找到指定的文件则按第一种的方式处理。

如果文件名包含字符 ' \ 或 /* 则行为没有定义。可以使用字符> 3:#include 记号序列

它将按照扩展普通文本的方式扩展记号序列进行解释。记号序列必须被解释为 <..> 或 ".. "

两种形式之一,然后再按照上述方式进行处理。

#define SSS<stdio.h>

#include SSS

void main()

{

printf("Hello!\n ");

}

#include文件可以嵌套。

stdio.h是输入输出头文件,所有有关输入输出的语句如"printf","scanf","putchar","getchar"等,都要用该头文件,头文件其实就是定义了这些函数的文件,它是系统提供给我们的接口 math.h是再进行数学运算时要包含的头文件,它提供了取绝对值,开方,求幂等数学运算#include<conio.h>与#include<stdio.h> 一样,是头文件包含。

这个头文件包含有许多库函数像#include<stdio.h>包含printf与

scanf一样,getch()也是其中一个函数,它的功能是无回显得到一

字符,常用这个函数做密码之类的程序。在TC中编译不需要加头文件

可以,编译器默认包含。就像在TC是不用加#include<stdio.h>一样。

但在VC中编译就要加了。否则系统认为你的函数没有定义。

其它头文件你只要再TC文件夹中看看include这个文件夹里面的文件就可以了

引子

以前版本的sys/alt_irq.h,我在这里就不多说了;此处仅浅析9.1版本的增强版的sys/alt_irq.h。

浅析

1 增强版的API

表1 增强版的HAL中断的API

2 先前的HAL中断API

3 写ISRalt_irq_register() alt_irq_disable() alt_irq_enable() alt_irq_disable_all()alt_irq_enable_all() alt_irq_interruptible() alt_irq_non_interruptible()alt_irq_enabled()

(1)使用增强版中断API注册ISR

intalt_ic_isr_register(alt_u32 ic_id,

alt_u32 irq,

alt_isr_func isr,

void *isr_context,

void* flags)

? ic_id为中断控制器标号,定义于system.h之中。在使用菊花链的EIC中,ic_id使用菊花链标识EIC;在IIC中,ic_id则不重要。

? irq为设备的硬件中断号,定义于system.h之中。

? 对于IIC来讲,irq就是IRQ号。中断的优先级与IRQ的编号成相反顺序。故IRQ_0代表最高优先级的中断,IRQ_31则是最低优先级的。

?

? 对于EIC来讲,irq就是中断端口的ID。 isr_context指向与设备驱动实例相关的数据结构体。isr_context传递输入参数给中断服务程序的函数。用于传递特定上下文的信息给ISR,也可指向任何特定ISR的信息。该上下文的值对于HAL是不透明的;it is providedentirely for the benefit of the user-defined ISR。

? isr指向相应的IRQ号的irq调用的ISR函数的指针。ISR函数原型如下: voidhandle_button_interrupts(void* isr_context);

给该函数提供的输入参数就是isr_context。

注: 给isr注册空指针,将会导致中断失去使能;handle_button_interrupts为isr服务函数名称,不固定。

?

flags保留未用。

(2)使能或者去使能中断

增强版的中断API提供如下函数:alt_ic_irq_disable(),alt_ic_irq_enable(),alt_ic_irq_enabled(),alt_irq_disable_all(),alt_irq_enable_all()。

? alt_irq_enable()允许编程以使某些部分的代码禁用硬件中断,或此后重新使能它们。

?

?alt_ic_irq_disable()和alt_ic_irq_enable()允许使能或去使能单独的中断。alt_irq_disable_all()去使能所有中断,并返回一上下文值。

? 欲重新使能硬件中断,可调用alt_irq_enable_all(),并传递上下文参数。中断在返回状态的优先级之前调用alt_irq_disable_all()。

?

? 若可屏蔽的异常被使能,则alt_irq_enabled()返回非零值。alt_ic_irq_enabled()则决定那个被指定的中断被使能。

(3)升级至增强版的HAL中断

表2 升级HAL中断的API

(4)支持多种HAL中断的API

在软件编译工具中选择中断API,使用system.h中的如下符号来定义其中之一,来标识哪种中断API可用:

?

?ALT_ENHANCED_INTERRUPT_PRESENT--定义使用增强版的API实现ALT_LEGACY_INERRUPT_API_PRESENT--定义使用先前的API实现 在用户的驱动代码中,使用这些符号来决定哪种API被调用。

(5)使用HAL注册按键中断的C范例

#include"system.h"

#include"sys/alt_irq.h"

#include"altera_avalon_pio_regs.h"

// 定义全局变量以储存边沿捕获值

volatile intedge_capture;

// 初始化button_pio

static voidinit_button_pio()

{

// 改写edge_capture指针以匹配alt_irq_register()函数原型

void*edge_capture_ptr = (void*) &edge_capture;

发布了285 篇原创文章 · 获赞 524 · 访问量 304万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览