欢迎来到天天文库
浏览记录
ID:8231211
大小:527.07 KB
页数:113页
时间:2018-03-11
《avr-libc 参考手册(带书签)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、avr-libc参考手册1.4.4GeneratedbyDoxygen1.4.6ThuApr2023:34:142006翻译:杨子江2007-2-16avr-libc模块文件6avr-libc模块文件6.1:诊断6.1.1详细描述#include这个头文件定义了调试的帮助。由于使用本库的许多应用程序没有标准错误输出流可供使用,默认情况下不允许产生一个可打印的错误信息。应用程序在包含头文件之前定义宏__ASSERT_USE_STDERR错误信息才会被生成。默认情况下,只有调用abort()才会挂起应用程序。ò定义#definea
2、ssert(expression)参数:expression对表达式进行测试。宏assert()测试给定的参数expression,如果结果为假,调用assert()的进程将被终止。一条诊断信息写入stderr并且调用函数abort(),可以有效终止程序。如果expression为真,宏assert()不进行任何操作。如果编译时定义了宏NDEBUG(例如使用编译器选项-DNDEBUG),则宏assert()将会被忽略。6.2:Bootloader功能支持6.2.1详细描述#include#include这个模块定义的宏
3、提供C语言的接口支持某些AVR单片机的Bootloader功能。这些宏设计为可在所有不同大小的Flash存储器下工作。注意:–9–6avr-libc模块文件不是所有的AVR单片机都提供bootloader支持。详情请查看AVR单片机的数据手册。Todo来自Marek的Email:小型器件(除了ATmega64/128),__SPM_REG是在I/O空间中,使用”in”和”out”指令可以生成较短的代码-由于bootloader空间有限,这可能是一个重要的优化方法。òAPI用法示例下面的代码显示了bootAPI的典型用法。#include#include4、interrupt.h>#includevoidboot_program_page(uint32_tpage,uint8_t*buf){uint16_ti;uint8_tsreg;//关中断sreg=SREG;cli();eeprom_busy_wait();boot_page_erase(page);boot_spm_busy_wait();//等待Flash擦除结束for(i=0;i5、,w);}boot_page_write(page);//在Flash页存储缓冲数据boot_spm_busy_wait();//等待Flash写入结//再使能RWW-section//如果要在引导装入后跳转到应用程序需要这样操作boot_rww_enable();//重开中断(如果中断原来是打开的)SREG=sreg;}–10–6avr-libc模块文件ò定义#defineBOOTLOADER_SECTION__attribute__((section(“.bootloader”)))#defineboot_spm_interrupt_enable()(__SPM_REG6、=(uin7、t8_t)_BV(SPMIE))#defineboot_spm_interrupt_disable()(__SPM_REG&=(uint8_t)∼_BV(SPMIE))#defineboot_is_spm_interrupt()(__SPM_REG&(uint8_t)_BV(SPMIE))#defineboot_rww_busy()(__SPM_REG&(uint8_t)_BV(__COMMON_ASB))#defineboot_spm_busy()(__SPM_REG&(uint8_t)_BV(SPMEN))#defineboot_spm_busy_wait()do{}while(b8、oot_spm_busy())#defineGET_LOW_FUSE_BITS(0x0000)#defineGET_LOCK_BITS(0x0001)#defineGET_EXTENDED_FUSE_BITS(0x0002)#defineGET_HIGH_FUSE_BITS(0x0003)#defineboot_lock_fuse_bits_get(address)#defineboot_page_fill(address,data)__boo
4、interrupt.h>#includevoidboot_program_page(uint32_tpage,uint8_t*buf){uint16_ti;uint8_tsreg;//关中断sreg=SREG;cli();eeprom_busy_wait();boot_page_erase(page);boot_spm_busy_wait();//等待Flash擦除结束for(i=0;i5、,w);}boot_page_write(page);//在Flash页存储缓冲数据boot_spm_busy_wait();//等待Flash写入结//再使能RWW-section//如果要在引导装入后跳转到应用程序需要这样操作boot_rww_enable();//重开中断(如果中断原来是打开的)SREG=sreg;}–10–6avr-libc模块文件ò定义#defineBOOTLOADER_SECTION__attribute__((section(“.bootloader”)))#defineboot_spm_interrupt_enable()(__SPM_REG6、=(uin7、t8_t)_BV(SPMIE))#defineboot_spm_interrupt_disable()(__SPM_REG&=(uint8_t)∼_BV(SPMIE))#defineboot_is_spm_interrupt()(__SPM_REG&(uint8_t)_BV(SPMIE))#defineboot_rww_busy()(__SPM_REG&(uint8_t)_BV(__COMMON_ASB))#defineboot_spm_busy()(__SPM_REG&(uint8_t)_BV(SPMEN))#defineboot_spm_busy_wait()do{}while(b8、oot_spm_busy())#defineGET_LOW_FUSE_BITS(0x0000)#defineGET_LOCK_BITS(0x0001)#defineGET_EXTENDED_FUSE_BITS(0x0002)#defineGET_HIGH_FUSE_BITS(0x0003)#defineboot_lock_fuse_bits_get(address)#defineboot_page_fill(address,data)__boo
5、,w);}boot_page_write(page);//在Flash页存储缓冲数据boot_spm_busy_wait();//等待Flash写入结//再使能RWW-section//如果要在引导装入后跳转到应用程序需要这样操作boot_rww_enable();//重开中断(如果中断原来是打开的)SREG=sreg;}–10–6avr-libc模块文件ò定义#defineBOOTLOADER_SECTION__attribute__((section(“.bootloader”)))#defineboot_spm_interrupt_enable()(__SPM_REG
6、=(uin
7、t8_t)_BV(SPMIE))#defineboot_spm_interrupt_disable()(__SPM_REG&=(uint8_t)∼_BV(SPMIE))#defineboot_is_spm_interrupt()(__SPM_REG&(uint8_t)_BV(SPMIE))#defineboot_rww_busy()(__SPM_REG&(uint8_t)_BV(__COMMON_ASB))#defineboot_spm_busy()(__SPM_REG&(uint8_t)_BV(SPMEN))#defineboot_spm_busy_wait()do{}while(b
8、oot_spm_busy())#defineGET_LOW_FUSE_BITS(0x0000)#defineGET_LOCK_BITS(0x0001)#defineGET_EXTENDED_FUSE_BITS(0x0002)#defineGET_HIGH_FUSE_BITS(0x0003)#defineboot_lock_fuse_bits_get(address)#defineboot_page_fill(address,data)__boo
此文档下载收益归作者所有