在里面嵌入式C,预定义库在编译程序时起着非常重要的作用,并大大减少了程序的代码大小。但是,优化和输出文件大小在很大程度上取决于编译器。在AVR工作室预定义库非常大,而且非常复杂。为了提供可移植性,在其内部已经做了大量的工作头文件. 有趣的是,AVR的家伙们已经成功地将其嵌入式C(用于AVR控制器)的规则保持在更接近于ANSI C.他们通过定义宏对于相应的寄存器。这提供了一个将它们用作变量的机会。现在用户可以更好地专注于代码,而不是微控制器的内部硬件配置。现在让我们看看一些重要的头文件。
avr/io.h
即使是一行代码也需要这个特定的头文件。它解决了处理寄存器的问题,并提供了将寄存器作为变量处理的方便方法。这使得为它们分配值变得简单。例如,要将数据写入端口B数据方向寄存器,可以使用变量的解甲还乡“。在代码中,可以编写如下表达式:
DDRB=0xff;//0x前缀表示在C中以十六进制格式表示的整数
您可以以类似的方式处理所有其他寄存器。在某些情况下存在一些例外和复杂性。但这些事情超出了本章的范围。我们以后再讨论。
util/delay.h
在许多微控制器程序中,延迟环是必不可少的。此头文件定义2.延迟循环。
_延迟时间(延迟时间)
这是一个基本功能,用于创建'延迟时间’微秒。它们通过基本停止和等待延迟循环实现。不允许将变量用作参数,而可以使用预定义的常量。要使用此循环,需要指定CPU工作频率(使用:#定义F#U CPU)。让我向您展示一个示例:
int main()
{#定义F#u CPU 1000000
int延迟=0;
延迟=29;
_延迟(延迟);
//…
}
------–或------
int main()
{#定义F#u CPU 1000000
int延迟=0;
对于(延迟=35;延迟>=0;延迟–)
{u delay_us(延迟);
//…
}
}
这两个准则都将无法得到遵守。但以下代码是有效的:
int main()
{#定义F#u CPU 1000000
_延期支付(29);
//…
}
int main()
{#定义F#u CPU 1000000
#定义延迟35
_延迟(延迟);
//…
}
_延迟时间(延迟时间)
此循环与前面的循环相同。只有一个区别,它以毫秒为单位产生延迟。适用于以下情况的其他事实:_延迟()“,适用于”_延迟_ms()“我也是。
#包括
#包括
int main()
{#定义F#u CPU 1000000
DDRB=0x0f;
端口B=0x05;
而(1)
{u delay_ms(1000);
PORTB~=PORTB;
//…
}
}
avr/interrupt.h
微控制器有几个功能中断源. 他们每个人都有各自的特点中断子程序. 在里面ANSI C,没有中断处理方案。但是对于微控制器来说,中断是一个特别重要的问题!许多程序都非常依赖它!因此,为了帮助用户更容易地实现子程序代码,有一个头文件avr/interrupt.h它定义了下面描述的一些函数和宏。
sei()
此功能通过设置全局中断掩码启用全局中断。
cli()
此功能通过重置全局中断掩码来禁用全局中断。
reti()
通过设置全局中断掩码启用中断。此函数编译为一行汇编代码。
ISR(中断向量)
ISR代表中断子程序。使用此宏,用户可以编写与中断“中断”相关的中断子程序。在宏参数的位置,提供了一些符号。这里,符号以它们所表示的中断向量命名。对于特定的微控制器,某些特定符号是有效的。对于他们,请看AVR GCC参考手册这是AVR工作室提供的。让我们看一个例子:
#包括
#包括
情报、监视和侦察(国际矢量)
{PORTB~=PORTB;}
无效中断(void)
{cli();
GICR=0x40;
MCUCR=0x03;
sei();
}
int main()
{initInterrupt();
DDRB=0xff;
端口B=0x55;
}
stdio.h
这个词是斯特迪奥“代表”标准输入输出“。此库确实减少了代码大小。但是十六进制该文件占用大量空间。它定义了许多与ANSI C具有相同命名法的函数。这些函数与ANSI C版本的函数具有相似的目标。
我将AVR GCC参考手册中的介绍放在原处:
“此文件声明在中实现的标准IO设施
avr libc
。由于底层硬件的性质,仅实现了标准IO的有限子集。没有实际的文件实现,因此只能执行设备IO。由于没有操作系统,应用程序需要提供有关其设备的足够详细信息,以便使其可由标准IO设施使用s、 由于空间限制,一些功能根本没有实现(如printf
已忽略的转换)。然而,应该警告此实现的潜在用户:printf
和斯坎夫
函数族虽然通常与著名的“Hello,world!”程序之类的简单程序相关联,但实际上相当复杂,这导致它们的包含占用了相当多的代码空间。此外,由于在运行时解释格式字符串的性质,它们的速度不快。只要可能,请使用avr libc提供的(有时是非标准的)预定转换设施通常在速度和代码大小方面的成本要低得多。”
字符串.h
头文件的字符串.h'定义一些函数来对字符串进行操作。例如比较、连接两个字符串、复制两个字符串、将一个字符串移动到其他位置等。这些函数使处理字符串更容易。在许多高级编程任务中,这些预定义函数使工作更容易。
数学
如果您选择使用一些数学函数,此头文件将减少所需的工作量sin(),cos(),谭(),exp()还有更多。
stlib.h
它包括一些标准库函数,如出口(),calloc(),malloc(),qsort(){qsort代表快速排序},realloc()和一些不常见的函数()。这些函数应该不会经常使用。但在特殊情况下,它们可能会有所帮助。
评论已关闭。