1 / 112
文档名称:

AVR库参考手册.pdf

格式:pdf   页数:112页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

AVR库参考手册.pdf

上传人:sxlw2016 2016/4/19 文件大小:0 KB

下载得到文件列表

AVR库参考手册.pdf

文档介绍

文档介绍:6 avr-libc 模块文件– 9 – 6 6 a a v v r r - - l l i i b b c c 模模块块文文件件 <>: 诊断 详细描述#include <> 这个头文件定义了调试的帮助。由于使用本库的许多应用程序没有标准错误输出流可供使用, 默认情况下不允许产生一个可打印的错误信息。应用程序在包含头文件<> 之前定义宏__ASSERT_USE_STDERR 错误信息才会被生成。默认情况下,只有调用 abort() 才会挂起应用程序。?定义#define assert(expression) 参数: expression 对表达式进行测试。宏 assert() 测试给定的参数 expression ,如果结果为假,调用 assert() 的进程将被终止。一条诊断信息写入 stderr 并且调用函数 abort() ,可以有效终止程序。如果 expression 为真,宏 assert() 不进行任何操作。如果编译时定义了宏 NDEBUG (例如使用编译器选项-DNDEBUG ),则宏 assert() 将会被忽略。 <avr/> : Bootloader 功能支持 详细描述#include <avr/> #include <avr/> 这个模块定义的宏提供 C语言的接口支持某些 AVR 单片机的 Bootloader 功能。这些宏设计为可在所有不同大小的 Flash 存储器下工作。注意: 6 avr-libc 模块文件– 10 –不是所有的 AVR 单片机都提供 bootloader 支持。详情请查看 AVR 单片机的数据手册。 Todo 来自 Marek 的 Email :小型器件( 除了 ATmega64/128) , __SPM_REG 是在 I/O 空间中,使用”in”和”out”指令可以生成较短的代码- 由于 bootloader 空间有限,这可能是一个重要的优化方法。? API 用法示例下面的代码显示了 boot API 的典型用法。#include <> #include <avr/> #include <avr/> void boot_program_page (uint32_t page, uint8_t *buf) { uint16_t i; uint8_t sreg; // 关中断 sreg = SREG; cli(); eeprom_busy_wait (); boot_page_erase (page); boot_spm_busy_wait (); // 等待 Flash 擦除结束 for (i=0; i<SPM_PAGESIZE; i+=2) { //将数据转换成小端模式 uint16_tw=*buf++;w+=(*buf++)<<8; boot_page_fill (page + i, w); } boot_page_write (page); // 在 Flash 页存储缓冲数据 boot_spm_busy_wait(); // 等待 Flash 写入结// 再使能 RWW-section //如果要在引导装入后跳转到应用程序需要这样操作 boot_rww_enable (); // 重开中断(如果中断原来是打开的) SREG = sreg; } 6 avr-libc 模块文件– 11 –?定义#define BOOTLOADER_SECTION __attrib ute__ ((section (“.bootloader”))) #define boot_spm_interrupt_enable() ( __SPM_REG |=(uint8_t)_BV(SPMIE)) #define boot_spm_interrupt_disabl e() (__SPM_REG &= (uint8_t) ~_BV(SPMIE)) #define boot_is_spm_interrupt() ( __SPM_REG&(uint8_t)_BV(SPMIE)) #define boot_rww_busy() (__SPM_REG&(uint8_t)_BV(MON_ASB)) #define boot_spm_busy() (__SPM_REG&(uint8_t)_BV(SPMEN)) #define boot_spm_busy_wait() do{}while(boot_spm_busy())