IAR中断向量
IAR中断向量

IAR的工程建立比较简单,直接先建立工作区然后保存,不保存无法调试。
把官方的INC 放到工程目录下,在C/C++编辑连接包含这个文件的绝对路径(最简单的搞法)。
把c文件添加进去就可以了,它的中断很简单你只要写一个如下的.c文件就能用了:中断头文件: #include <intrinsics.h>开启全局中断:__enable_interrupt();关闭全局中断: __disable_interrupt();#pragma vector=1__interrupt void TRAP_IRQHandler(void){}#pragma vector=2__interrupt void TLI_IRQHandler(void){}#pragma vector=3__interrupt void AWU_IRQHandler(void){}#pragma vector=4__interrupt void CLK_IRQHandler(void){}#pragma vector=5__interrupt void EXTI_PORTA_IRQHandler(void){}#pragma vector=6__interrupt void EXTI_PORTB_IRQHandler(void){}#pragma vector=7__interrupt void EXTI_PORTC_IRQHandler(void){}#pragma vector=8__interrupt void EXTI_PORTD_IRQHandler(void){}#pragma vector=9__interrupt void EXTI_PORTE_IRQHandler(void){}#ifdef STM8S903#pragma vector=0xA__interrupt void EXTI_PORTF_IRQHandler(void){}#endif#ifdef STM8S208#pragma vector=0xA__interrupt void CAN_RX_IRQHandler(void){}#pragma vector=0xB__interrupt void CAN_TX_IRQHandler(void){}#endif#pragma vector=0xC__interrupt void SPI_IRQHandler(void){}#pragma vector=0xD__interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) {CleT1UPF;PDODR->bit3=(~PDODR->bit3);}#pragma vector=0xE__interrupt void TIM1_CAP_COM_IRQHandler(void){}#ifdef STM8S903#pragma vector=0xF__interrupt void TIM5_UPD_OVF_BRK_TRG_IRQHandler(void){}#pragma vector=0x10__interrupt void TIM5_CAP_COM_IRQHandler(void){}#else#pragma vector=0xF //定时器二中断地址__interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void){}#pragma vector=0x10__interrupt void TIM2_CAP_COM_IRQHandler(void){}#endif#if defined (STM8S208) || defined(STM8S207) || defined(STM8S105) #pragma vector=0x11__interrupt void TIM3_UPD_OVF_BRK_IRQHandler(void){}#pragma vector=0x12__interrupt void TIM3_CAP_COM_IRQHandler(void){}#endif#ifndef STM8S105#pragma vector=0x13__interrupt void UART1_TX_IRQHandler(void){}#pragma vector=0x14__interrupt void UART1_RX_IRQHandler(void) {}#endif#pragma vector=0x15__interrupt void I2C_IRQHandler(void){}#ifdef STM8S105#pragma vector=0x16__interrupt void UART2_TX_IRQHandler(void) {}#pragma vector=0x17__interrupt void UART2_RX_IRQHandler(void) {}#endif#if defined(STM8S207) || defined(STM8S208) #pragma vector=0x16__interrupt void UART3_TX_IRQHandler(void) {}#pragma vector=0x17__interrupt void UART3_RX_IRQHandler(void) {}#endif#if defined(STM8S207) || defined(STM8S208) #pragma vector=0x18__interrupt void ADC2_IRQHandler(void){}#else#pragma vector=0x18__interrupt void ADC1_IRQHandler(void){}#endif#ifdef STM8S903#pragma vector=0x19__interrupt void TIM6_UPD_OVF_TRG_IRQHandler(void) {}#else#pragma vector=0x19__interrupt void TIM4_UPD_OVF_IRQHandler(void){}#endif#pragma vector=0x1A__interrupt void EEPROM_EEC_IRQHandler(void){}这里面的函数和51一样你可以放到任何文。
stm8笔记2-定时3更新中断+pwm输出(IDE为IAR)

stm8笔记2-定时3更新中断+pwm输出(IDE为IAR)⼀:IAR编译器中断函数说明下⾯说⼀下在IAR下,在IAR下必须要添加iostm8s105s6.h⽂件,在⽂件的最后有如下内容:/*-------------------------------------------------------------------------* Interrupt vector numbers*-----------------------------------------------------------------------*/#define AWU_vector 0x03#define SPI_TXE_vector 0x0C#define SPI_RXNE_vector 0x0C#define SPI_WKUP_vector 0x0C#define SPI_CRCERR_vector 0x0C#define SPI_OVR_vector 0x0C#define SPI_MODF_vector 0x0C#define TIM1_OVR_UIF_vector 0x0D#define TIM1_CAPCOM_BIF_vector 0x0D#define TIM1_CAPCOM_TIF_vector 0x0D#define TIM1_CAPCOM_CC1IF_vector 0x0E#define TIM1_CAPCOM_CC2IF_vector 0x0E#define TIM1_CAPCOM_CC3IF_vector 0x0E#define TIM1_CAPCOM_CC4IF_vector 0x0E#define TIM1_CAPCOM_COMIF_vector 0x0E#define TIM2_OVR_UIF_vector 0x0F#define TIM2_CAPCOM_CC1IF_vector 0x10#define TIM2_CAPCOM_TIF_vector 0x10#define TIM2_CAPCOM_CC2IF_vector 0x10#define TIM2_CAPCOM_CC3IF_vector 0x10#define UART1_T_TXE_vector 0x13#define UART1_T_TC_vector 0x13#define UART1_R_OR_vector 0x14#define UART1_R_RXNE_vector 0x14#define UART1_R_IDLE_vector 0x14#define UART1_R_PE_vector 0x14#define UART1_R_LBDF_vector 0x14#define I2C_ADD10_vector 0x15#define I2C_ADDR_vector 0x15#define I2C_OVR_vector 0x15#define I2C_STOPF_vector 0x15#define I2C_BTF_vector 0x15#define I2C_WUFH_vector 0x15#define I2C_RXNE_vector 0x15#define I2C_TXE_vector 0x15#define I2C_BERR_vector 0x15#define I2C_ARLO_vector 0x15#define I2C_AF_vector 0x15#define I2C_SB_vector 0x15#define ADC1_AWS0_vector 0x18#define ADC1_AWS1_vector 0x18#define ADC1_AWS2_vector 0x18#define ADC1_AWS3_vector 0x18#define ADC1_AWS4_vector 0x18#define ADC1_AWS5_vector 0x18#define ADC1_AWS6_vector 0x18#define ADC1_EOC_vector 0x18#define ADC1_AWS8_vector 0x18#define ADC1_AWS9_vector 0x18#define ADC1_AWDG_vector 0x18#define ADC1_AWS7_vector 0x18#define TIM4_OVR_UIF_vector 0x19#define FLASH_EOP_vector 0x1A#define FLASH_WR_PG_DIS_vector 0x1A对照中断向量表,如果⽤到中断,必须⾃⼰写中断,⽐如TIM3定时器中断#pragma vector=TIM3_OVR_UIF_vector__interrupt void TIM3_UPD_OVF_IRQHandler (void){TIM3_SR = 0X00;//清除中断标志}⽤关键字#pragma vector=指出本中断处理函数指向的中断号,⽤关键字__interrupt作为函数的前缀,表⽰这是中断处理函数。
原创--IAR for AVR入门学习笔记

原创--IAR for A VR入门学习笔记A VR单片机的编译软件五花八门,用宋丹丹的话就是:那是相当的多汇编语言的开发平台就不说了(俺不大会,呵呵,说不出什么道道来)。
简单列举几个高级语言的开发平台:WINA VR(GNU GCC A VR);ICC A VRCodeVison A VRIAR for A VRBASIC A VRFastA VRBASCOM其中用得最多的是完全免费的WINA VR。
我一直都是用的这个。
最专业,最好的,对AVR支持最全面的是IAR。
但同时IAR也是最贵的一款开发软件(听说升级也要收费,真黑啊)。
呵呵,不过不怕,我们可以破解之。
下面就详细介绍如何破解IAR。
这里安装破解的是5.11B版本的。
全名IAREmbeddedWorkbenchforAtmelAVR,v.5.11B1、先到网上下载5.11B文件,大概133M。
解压后,有如下文件:a1.jpg (29.87 KB)2009-12-20 00:282、到网上下载破解文件解压后生成文件Keygen包,将它复制到C盘根目录下,如下图a2.jpg (63.75 KB)2009-12-20 00:283、打开文件包keygen,双击文件IARID.exe,出现本电脑ID号,如图,记下来a3.jpg (42.68 KB)2009-12-20 00:284、从电脑的“程序---运行”输入“CMD”回车,按照下图操作,得到sn.txt文件;注意输入计算机ID号的时候,所有字符全部大写,包括"0X"中的"X"也要大写,a4.jpg (161.06 KB)2009-12-20 00:285、然后运行安装文件中的autorun.exe,开始安装IAR,当出现要求输入注册号的时候,请用记事本打开刚刚生成的sn.txt 文件,找到"EW A VR" version "2.25_WIN"对应的号码段,先输入序列号,NEXT后,再复制key:后面的一串字符,注意只复制#之前的那一部分,包括#也要复制。
中断向量号(Interruptvectornumber)

中断向量号(Interrupt vector number)/ * * * * * * * * * * * * * * * * interrupt vector numbers * * * * * * * * * * * * * * * * /# defines vectornumber _ VSI 119u / spurious interrupt# defines vectornumber _ vsyscall 118u / system call interrupt (sys)# defines vectornumber _ vreserved118 117u# defines vectornumber _ vreserved117 116u# defines vectornumber _ vreserved116 115u# defines vectornumber _ vreserved115 114u# defines vectornumber _ vreserved114 113u# defines vectornumber _ vreserved113 112u# defines vectornumber _ vreserved112 111u# defines vectornumber _ vreserved111 110u# defines vectornumber _ vreserved110 109u# defines vectornumber _ vreserved109 108u# defines vectornumber _ vreserved108 107u# defines vectornumber _ vreserved106 105u# defines vectornumber _ vreserved105 104u# defines vectornumber _ vreserved104 103u# defines vectornumber _ vreserved103 102u# defines vectornumber _ vreserved102 101u# defines vectornumber _ vreserved101 100u# defines vectornumber _ vreserved100 99u# defines vectornumber _ vreserved99 98u# defines vectornumber _ vreserved98 97u# defines vectornumber _ vatd0compare 96u / ATD compare interrupt# defines vectornumber _ vreserved96 95u# defines vectornumber _ vreserved95 94u# defines vectornumber _ vreserved94 93u# defines vectornumber _ vreserved93 92U# defines vectornumber _ vreserved91 90u # defines vectornumber _ vreserved90 89u # defines vectornumber _ vreserved89 88u # defines vectornumber _ vreserved88 87u # defines vectornumber _ vreserved87 86u # defines vectornumber _ vreserved86 85u # defines vectornumber _ vreserved85 84u # defines vectornumber _ vreserved84 83u # defines vectornumber _ vreserved83 82u # defines vectornumber _ vreserved82 81u # defines vectornumber _ vreserved81 80u # defines vectornumber _ vreserved79 79u # defines vectornumber _ vreserved78 78u # defines vectornumber _ vreserved77 77u # defines vectornumber _ vreserved76 76u# defines vectornumber _ vreserved75 75u# defines vectornumber _ vreserved74 74U# defines vectornumber _ vreserved73 73u# defines vectornumber _ vreserved72 72u# defines vectornumber _ vreserved71 71u# defines vectornumber _ vreserved70 70u# defines vectornumber _ vpit3 69u / periodic interrupt timer 3 (pit3)#定义vectornumber_vpit2 68u /定时器周期中断2(pit2)#定义vectornumber_vpit1 67u /定时器周期中断1(PIT1)#定义vectornumber_vpit0 66u /定时器周期中断0(pit0)#定义vectornumber_vhti 65u /高温中断(HTI)#定义vectornumber_vapi 64u /自治周期中断(API)#定义vectornumber_vlvi 63u /低压中断(LVI)#定义vectornumber_vreserved62 62u#定义vectornumber_vreserved61 61u#定义vectornumber_vreserved60 60u#定义vectornumber_vreserved59 59u#定义vectornumber_vreserved58 58u#定义vectornumber_vpwmesdn 57u / PWM急救关机(pwmesdn)#定义vectornumber_vportp 56u /端口P#定义vectornumber_vreserved55 55u#定义vectornumber_vreserved54 54u#定义vectornumber_vreserved53 53u#定义vectornumber_vreserved52 52u#定义vectornumber_vreserved51 51u#定义vectornumber_vreserved50 50u#定义vectornumber_vreserved49 49u#定义vectornumber_vreserved48 48u#定义vectornumber_vreserved47 47u#定义vectornumber_vreserved46 46u#定义vectornumber_vreserved45 45u#定义vectornumber_vreserved44 44u#定义vectornumber_vreserved43 43u#定义vectornumber_vreserved42 42u#定义vectornumber_vreserved41 41u#定义vectornumber_vreserved40 40u#定义vectornumber_vcan0tx 39u /发送中断#定义vectornumber_vcan0rx 38u /接收中断#定义vectornumber_vcan0err 37u /错误中断#定义vectornumber_vcan0wkup 36u /唤醒中断#定义vectornumber_vflash 35u /命令操作完成fcnfg(CCIE)#定义vectornumber_vflashfd 34u /命令操作检测到闪存故障检测#定义vectornumber_vreserved33 33u#定义vectornumber_vreserved32 32u#定义vectornumber_vreserved31 31u#定义vectornumber_vreserved30 30u#定义vectornumber_vcrgscm 29u /单片机中断CRG自时钟模式#定义vectornumber_vcrgplllck 28 U / /锁中断CRG PLL锁#定义vectornumber_vreserved27 27u#定义vectornumber_vreserved26 26u#定义vectornumber_vporth 25u/h /端口#定义vectornumber_vportj 24u /端口J#定义vectornumber_vreserved23 23u#定义vectornumber_vatd0 22u / ATD序列完全中断atd0ctl2(美国信息交换标准代码)#定义vectornumber_vsci1 21u /串行通信接口sci1cr2(领带,TCIE、反应离子刻蚀、伊利耶)#定义vectornumber_vsci0 20u / / / /串行通信接口sci0cr2(领带,TCIE、反应离子刻蚀、伊利耶)#定义vectornumber_vspi0 19u /串行外设接口spi0cr1(SPIE,sptie)#定义vectornumber_vtimpaie 18u /脉冲累加器输入中断#定义vectornumber_vtimpaaovf 17u /脉冲累加器的溢出中断#定义vectornumber_vtimovf 16u /定时器溢出中断#定义vectornumber_vtimch7 15u#定义vectornumber_vtimch6 14u#定义vectornumber_vtimch5 13u#定义vectornumber_vtimch4 12u#定义vectornumber_vtimch3 11u#定义vectornumber_vtimch2 10u#定义vectornumber_vtimch1 9u#定义vectornumber_vtimch0 8u /通道[7:0]中断#定义vectornumber_vrti 7u /实时中断(RTI)#定义vectornumber_virq 6u / IRQ#定义vectornumber_vxirq 5u / XIRQ#定义vectornumber_vswi 4U/ /游泳#定义vectornumber_vtrap每天3 /执行指令陷阱#定义vectornumber_vcop 2、看门狗复位/警察#定义vectornumber_vclkmon 1U / /时钟监控器复位#定义vectornumber_vreset 0u /复位/ ****************中断向量表**************** / # VSI 0xff10u定义#定义vsyscall 0xff12u#定义vreserved118 0xff14u#定义vreserved117 0xff16u#定义vreserved116 0xff18u#定义vreserved115 0xff1au#定义vreserved114 0xff1cu#定义vreserved113 0xff1eu#定义vreserved112 0xff20u#定义vreserved111 0xff22u#定义vreserved110 0xff24u#定义vreserved109 0xff26u#定义vreserved108 0xff28u#定义vreserved107 0xff2au #定义vreserved106 0xff2cu #定义vreserved105 0xff2eu #定义vreserved104 0xff30u #定义vreserved103 0xff32u #定义vreserved102 0xff34u #定义vreserved101 0xff36u #定义vreserved100 0xff38u #定义vreserved99 0xff3au #定义vreserved98 0xff3cu #定义vatd0compare 0xff3eu #定义vreserved96 0xff40u #定义vreserved95 0xff42u #定义vreserved94 0xff44u #定义vreserved93 0xff46u #定义vreserved92 0xff48u#定义vreserved91 0xff4au #定义vreserved90 0xff4cu #定义vreserved89 0xff4eu #定义vreserved88 0xff50u #定义vreserved87 0xff52u #定义vreserved86 0xff54u #定义vreserved85 0xff56u #定义vreserved84 0xff58u #定义vreserved83 0xff5au #定义vreserved82 0xff5cu #定义vreserved81 0xff5eu #定义vreserved79 0xff60u #定义vreserved78 0xff62u #定义vreserved77 0xff64u #定义vreserved76 0xff66u#定义vreserved75 0xff68u #定义vreserved74 0xff6au #定义vreserved73 0xff6cu #定义vreserved72 0xff6eu #定义vreserved71 0xff70u #定义vreserved70 0xff72u #定义vpit3 0xff74u#定义vpit2 0xff76u#定义vpit1 0xff78u#定义vpit0 0xff7au#定义vhti 0xff7cu# VAPI 0xff7eu定义#定义vlvi 0xff80u#定义vreserved62 0xff82u #定义vreserved61 0xff84u #定义vreserved60 0xff86u#定义vreserved59 0xff88u #定义vreserved58 0xff8au #定义vpwmesdn 0xff8cu#定义vportp 0xff8eu#定义vreserved55 0xff90u #定义vreserved54 0xff92u #定义vreserved53 0xff94u #定义vreserved52 0xff96u #定义vreserved51 0xff98u #定义vreserved50 0xff9au #定义vreserved49 0xff9cu #定义vreserved48 0xff9eu #定义vreserved47 0xffa0u #定义vreserved46 0xffa2u #定义vreserved45 0xffa4u#定义vreserved44 0xffa6u #定义vreserved43 0xffa8u #定义vreserved42 0xffaau #定义vreserved41 0xffacu #定义vreserved40 0xffaeu #定义vcan0tx 0xffb0u#定义vcan0rx 0xffb2u#定义vcan0err 0xffb4u#定义vcan0wkup 0xffb6u #定义vflash 0xffb8u#定义vflashfd 0xffbau#定义vreserved33 0xffbcu #定义vreserved32 0xffbeu #定义vreserved31 0xffc0u #定义vreserved30 0xffc2u #定义vcrgscm 0xffc4u#定义vcrgplllck 0xffc6u #定义vreserved27 0xffc8u #定义vreserved26 0xffcau #定义vporth 0xffccu#定义vportj 0xffceu#定义vreserved23 0xffd0u #定义vatd0 0xffd2u#定义vsci1 0xffd4u#定义vsci0 0xffd6u#定义vspi0 0xffd8u#定义vtimpaie 0xffdau#定义vtimpaaovf 0xffdcu #定义vtimovf 0xffdeu#定义vtimch7 0xffe0u#定义vtimch6 0xffe2u#定义vtimch5 0xffe4u #定义vtimch4 0xffe6u #定义vtimch3 0xffe8u #定义vtimch2 0xffeau #定义vtimch1 0xffecu #定义vtimch0 0xffeeu #定义vrti 0xfff0u#定义virq 0xfff2u#定义vxirq 0xfff4u #定义计算0xfff6u#定义vtrap 0xfff8u #定义0xfffau共同体#定义vclkmon 0xfffcu # VRESET 0xfffeu定义各个中断解释:PWMESDN:PWM模块只有一个中断是在急救关机时产生的,如果相应的使能位(pwmie)设置。
使用IAR时遇到的一些Error、Waring

使用IAR时遇到的一些Error、Waring/sendoc/blog作为菜虫,在使用IAR的时候编写CC2430、、Z-Stack2006程序会遇到如下一些错误,当然随着学习的深入,我会持续更新。
1Q:Error[e16]: Segment XDATA_Z (size: 0x19a1 align: 0) is too long for segment definition. At least 0xe4c more bytesneeded. The problem occurred while processing the segment placement command"-Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END", where at the moment ofplacement the available memory ranges were "XDATA:f1ff-fd53"Reserved ranges relevant to this placement:XDATA:f000-f1fe XSTACKXDATA:f1ff-fd53 XDATA_NBIT:0-7 BREGBIT:80-97 SFR_ANBIT:a8-af SFR_ANBIT:b8-c7 SFR_ANBIT:d8-df SFR_ANBIT:e8-ef SFR_ANA:其实这个问题并不是你的程序本身有问题,主要是因为你编写的程序太大了,超出了芯片本身的定义。
今天在群里学习了一招,就是将数组定义到code里,我们看一下例子。
我们定义一个5100个元素的数组,有以下两种方法:mermaid提出的方法是:typedef unsigned char const __code INT8U;extern INT8U shuzi[5100];文晶提出的方法是INT8U code shuzi[5100];这两种方法其实效果是一致的,定义完数组之后,调用的部分就是需要用指针来调用数组里面的数值了。
AVR_中断向量表

C中断向量:#if defined(_ICC_A VR_) // "ICCA VR 编译器"条件编译开始/*==================================================================== ==================中断向量定义====================================================================== ================*/#define IT_RESET 1// 外部引脚、上电复位、掉电检测复位、看门狗复位、以及 JTAG A VR 复位中断向量#define IT_INT0 2 // 外部中断请求0中断向量#define IT_INT1 3 // 外部中断请求1中断向量#define IT_TIMER2_COMP 4 // 定时器/计数器2比较匹配中断向量#define IT_TIMER2_OVF 5 // 定时器/计数器2溢出中断向量#define IT_TIMER1_CAPT 6 // 定时器/计数器1输入捕获中断向量#define IT_TIMER1_COMPA 7 // 定时器/计数器1A比较匹配中断向量#define IT_TIMER1_COMPB 8 // 定时器/计数器1B比较匹配中断向量#define IT_TIMER1_OVF 9 // 定时器/计数器1溢出中断向量#define IT_TIMER0_OVF 10 // 定时器/计数器0溢出中断向量#define IT_SPI_STC 11 // SPI串行传输结束中断向量#define IT_USART_RXC 12 // USART接收结束中断向量#define IT_USART_UDRE 13 // USART数据寄存器空中断向量#define IT_USART_TXC 14 // USART传送结束中断向量#define IT_ADC 15 // ADC转换结束中断向量#define IT_EE_RDY 16 // EEPROM就绪中断向量#define IT_ANA_COMP 17 // 模拟比较器中断向量#define IT_TWI 18 // 两线串行接口中断向量#define IT_INT2 19 // 外部中断请求2中断向量#define IT_TIMER0_COMP 20 // 定时器/计数器0比较匹配中断向量#define IT_SPM_RDY 21 // 保存程序存储器内容就绪中断向量#endif // "_ICC_A VR_" 条件编译结束#if defined(_CodeVision_A VR_) // "CodeV ision A VR C 编译器"条件编译开始#define EXT_INT0 2 // 外部中断请求0中断向量#define EXT_INT1 3 // 外部中断请求1中断向量#define TIM2_COMP 4 // 定时器/计数器2比较匹配中断向量#define TIM2_OVF 5 // 定时器/计数器2溢出中断向量#define TIM1_CAPT 6 // 定时器/计数器1输入捕获中断向量#define TIM1_COMPA 7 // 定时器/计数器1A比较匹配中断向量#define TIM1_COMPB 8 // 定时器/计数器1B比较匹配中断向量#define TIM1_OVF 9 // 定时器/计数器1溢出中断向量#define TIM0_OVF 10 // 定时器/计数器0溢出中断向量#define SPI_STC 11 // SPI串行传输结束中断向量#define USART_RXC 12 // USART接收结束中断向量#define USART_DRE 13 // USART数据寄存器空中断向量#define USART_TXC 14 // USART传送结束中断向量#define ADC_INT 15 // ADC转换结束中断向量#define EE_RDY 16 // EEPROM就绪中断向量#define ANA_COMP 17 // 模拟比较器中断向量#define TWI 18 // 两线串行接口中断向量#define EXT_INT2 19 // 外部中断请求2中断向量#define TIM0_COMP 20 // 定时器/计数器0比较匹配中断向量#define SPM_READY 21 // 保存程序存储器内容就绪中断向量#endif // "defined(_CodeVision_A VR_)" 条件编译结束#if defined(_IAR_EW_A VR_) // "IAR Embedded Workbench A VR 编译器"条件编译开始#define RESET_vect (0x00)// 外部引脚、上电复位、掉电检测复位、看门狗复位、以及 JTAG A VR 复位中断向量#define INT0_vect (0x04) // 外部中断请求0中断向量#define INT1_vect (0x08) // 外部中断请求1中断向量#define TIMER2_COMP_vect (0x0C) // 定时器/计数器2比较匹配中断向量#define TIMER2_OVF_vect (0x10) // 定时器/计数器2溢出中断向量#define TIMER1_CAPT_vect (0x14) // 定时器/计数器1输入捕获中断向量#define TIMER1_COMPA_vect (0x18) // 定时器/计数器1A比较匹配中断向量#define TIMER1_COMPB_vect (0x1C) // 定时器/计数器1B比较匹配中断向量#define TIMER1_OVF_vect (0x20) // 定时器/计数器1溢出中断向量#define TIMER0_OVF_vect (0x24) // 定时器/计数器0溢出中断向量#define SPI_STC_vect (0x28) // SPI串行传输结束中断向量#define USART_RXC_vect (0x2C) // USART接收结束中断向量#define USART_UDRE_vect (0x30) // USART数据寄存器空中断向量#define USART_TXC_vect (0x34) // USART传送结束中断向量#define ADC_vect (0x38) // ADC转换结束中断向量#define EE_RDY_vect (0x3C) // EEPROM就绪中断向量#define ANA_COMP_vect (0x40) // 模拟比较器中断向量#define TWI_vect (0x44) // 两线串行接口中断向量#define INT2_vect (0x48) // 外部中断请求2向量#define TIMER0_COMP_vect (0x4C) // 定时器/计数器0比较匹配中断向量#define SPM_RDY_vect (0x50) // 保存程序存储器内容就绪中断向量#endif // "defined(_IAR_EW_A VR_)" 条件编译结束汇编语言中断向量:;************************************************************************* ;* 中断向量位置声明 *;************************************************************************* ;******** 中断向量地址定义:.equ INT0addr = 0x002 ;外部中断请求0向量地址.equ INT1addr = 0x004 ;外部中断请求1向量地址.equ OC2addr = 0x006 ;定时器/计数器2比较匹配中断向量地址.equ OVF2addr = 0x008 ;定时器/计数器2溢出中断向量地址.equ ICP1addr = 0x00a ;定时器/计数器1输入捕获中断向量地址.equ OC1Aaddr = 0x00c ;定时器/计数器1A比较匹配中断向量地址.equ OC1Baddr = 0x00e ;定时器/计数器1B比较匹配中断向量地址.equ OVF1addr = 0x010 ;定时器/计数器1溢出中断向量地址.equ OVF0addr = 0x012 ;定时器/计数器0溢出中断向量地址.equ SPIaddr = 0x014 ;SPI串行传输结束中断向量地址.equ URXCaddr = 0x016 ;USART接收结束中断向量地址.equ UDREaddr = 0x018 ;USART数据寄存器空中断向量地址.equ UTXCaddr = 0x01a ;USART传送结束中断向量地址.equ ADCCaddr = 0x01c ;ADC转换结束中断向量地址.equ ERDY addr = 0x01e ;EEPROM就绪中断向量地址.equ ACIaddr = 0x020 ;模拟比较器中断向量地址.equ TWIaddr = 0x022 ;两线串行接口中断向量地址.equ INT2addr = 0x024 ;外部中断请求2向量地址.equ OC0addr = 0x026 ;定时器/计数器0比较匹配中断向量地址.equ SPMRaddr = 0x028 ;保存程序存储器内容就绪中断向量地址。
中断向量码和中断类型码

中断向量码和中断类型码1.引言1.1 概述中断向量码和中断类型码是计算机系统中重要的概念和组成部分。
在计算机运行过程中,当发生某些特定事件或条件时,系统需要立即中断当前操作,转而处理这些事件或条件的相应操作。
中断向量码和中断类型码就是用来识别和区分不同中断事件和类型的标识符。
简单来说,中断向量码是一种用于唯一标识各种不同中断事件的编码方式。
它通常是一个整数值,拥有特定的含义和对应的处理程序。
当发生中断事件时,系统会根据中断向量码找到对应的处理程序,从而按照预定义的方式对中断事件进行处理。
而中断类型码则是用于区分不同类型中断的编码方式。
计算机系统中可能存在多种不同类型的中断,如硬件中断、软件中断等。
每种类型的中断都有特定的中断类型码,用于区分和识别不同类型的中断。
通过中断类型码,系统可以准确地判断中断的来源和类型,从而进一步调度相应的处理程序或资源。
中断向量码和中断类型码在计算机系统中起到了至关重要的作用。
它们不仅为系统提供了灵活、快速的中断处理机制,还允许系统针对不同类型的中断事件进行有针对性的处理。
通过合理设计和使用中断向量码和中断类型码,可以提高系统的稳定性、可靠性和响应能力。
在接下来的篇章中,我们将详细介绍中断向量码和中断类型码的定义、作用以及使用方法。
通过深入了解这些概念,读者将能够更好地理解中断处理的机制和原理,并且能够在实际应用中灵活使用和调度中断处理程序。
我们希望通过这篇文章的介绍,读者能够对中断向量码和中断类型码有更深入的认识,并且能够将其应用于自己的实际工作和学习中。
1.2 文章结构本文共分为三个主要部分:引言、正文和结论。
下面将详细介绍每个部分的内容和结构安排。
1. 引言部分将提供本文的背景和目的。
首先,我们将概述中断向量码和中断类型码的基本概念和作用。
然后,我们将介绍本文的结构和各个部分的内容安排。
最后,我们将明确本文的目的,即深入探讨中断向量码和中断类型码对于中断处理的重要性。
IAR软件错误调试

使用IAR时遇到的一些Error、Waring/sendoc/blog作为菜虫,在使用IAR的时候编写CC2430、、Z-Stack2006程序会遇到如下一些错误,当然随着学习的深入,我会持续更新。
1Q:Error[e16]: Segment XDATA_Z (size: 0x19a1 align: 0) is too long for segment definition. At least 0xe4c more bytesneeded. The problem occurred while processing the segment placement command"-Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END", where at the moment ofplacement the available memory ranges were "XDATA:f1ff-fd53"Reserved ranges relevant to this placement:XDATA:f000-f1fe XSTACKXDATA:f1ff-fd53 XDATA_NBIT:0-7 BREGBIT:80-97 SFR_ANBIT:a8-af SFR_ANBIT:b8-c7 SFR_ANBIT:d8-df SFR_ANBIT:e8-ef SFR_ANA:其实这个问题并不是你的程序本身有问题,主要是因为你编写的程序太大了,超出了芯片本身的定义。
今天在群里学习了一招,就是将数组定义到code里,我们看一下例子。
我们定义一个5100个元素的数组,有以下两种方法:mermaid提出的方法是:typedef unsigned char const __code INT8U;extern INT8U shuzi[5100];文晶提出的方法是INT8U code shuzi[5100];这两种方法其实效果是一致的,定义完数组之后,调用的部分就是需要用指针来调用数组里面的数值了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IAR的工程建立比较简单,直接先建立工作区然后保存,不保存无法调试。
把官方的INC 放到工程目录下,在C/C++编辑连接包含这个文件的绝对路径(最简单的搞法)。
把c文件添加进去就可以了,它的中断很简单你只要写一个如下的.c文件就能用了:
中断头文件: #include <intrinsics.h>
开启全局中断:__enable_interrupt();
关闭全局中断: __disable_interrupt();
#pragma vector=1
__interrupt void TRAP_IRQHandler(void)
{
}
#pragma vector=2
__interrupt void TLI_IRQHandler(void)
{
}
#pragma vector=3
__interrupt void AWU_IRQHandler(void)
{
}
#pragma vector=4
__interrupt void CLK_IRQHandler(void)
{
}
#pragma vector=5
__interrupt void EXTI_PORTA_IRQHandler(void)
{
}
#pragma vector=6
__interrupt void EXTI_PORTB_IRQHandler(void)
{
}
#pragma vector=7
__interrupt void EXTI_PORTC_IRQHandler(void)
{
}
#pragma vector=8
__interrupt void EXTI_PORTD_IRQHandler(void)
{
}
#pragma vector=9
__interrupt void EXTI_PORTE_IRQHandler(void)
{
}
#ifdef STM8S903
#pragma vector=0xA
__interrupt void EXTI_PORTF_IRQHandler(void)
{
}
#endif
#ifdef STM8S208
#pragma vector=0xA
__interrupt void CAN_RX_IRQHandler(void)
{
}
#pragma vector=0xB
__interrupt void CAN_TX_IRQHandler(void)
{
}
#endif
#pragma vector=0xC
__interrupt void SPI_IRQHandler(void)
{
}
#pragma vector=0xD
__interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) {
CleT1UPF;
PDODR->bit3=(~PDODR->bit3);
}
#pragma vector=0xE
__interrupt void TIM1_CAP_COM_IRQHandler(void)
{
}
#ifdef STM8S903
#pragma vector=0xF
__interrupt void TIM5_UPD_OVF_BRK_TRG_IRQHandler(void)
{
}
#pragma vector=0x10
__interrupt void TIM5_CAP_COM_IRQHandler(void)
{
}
#else
#pragma vector=0xF //定时器二中断地址
__interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void)
{
}
#pragma vector=0x10
__interrupt void TIM2_CAP_COM_IRQHandler(void)
{
}
#endif
#if defined (STM8S208) || defined(STM8S207) || defined(STM8S105) #pragma vector=0x11
__interrupt void TIM3_UPD_OVF_BRK_IRQHandler(void)
{
}
#pragma vector=0x12
__interrupt void TIM3_CAP_COM_IRQHandler(void)
{
}
#endif
#ifndef STM8S105
#pragma vector=0x13
__interrupt void UART1_TX_IRQHandler(void)
{
}
#pragma vector=0x14
__interrupt void UART1_RX_IRQHandler(void) {
}
#endif
#pragma vector=0x15
__interrupt void I2C_IRQHandler(void)
{
}
#ifdef STM8S105
#pragma vector=0x16
__interrupt void UART2_TX_IRQHandler(void) {
}
#pragma vector=0x17
__interrupt void UART2_RX_IRQHandler(void) {
}
#endif
#if defined(STM8S207) || defined(STM8S208) #pragma vector=0x16
__interrupt void UART3_TX_IRQHandler(void) {
}
#pragma vector=0x17
__interrupt void UART3_RX_IRQHandler(void) {
}
#endif
#if defined(STM8S207) || defined(STM8S208) #pragma vector=0x18
__interrupt void ADC2_IRQHandler(void)
{
}
#else
#pragma vector=0x18
__interrupt void ADC1_IRQHandler(void)
{
}
#endif
#ifdef STM8S903
#pragma vector=0x19
__interrupt void TIM6_UPD_OVF_TRG_IRQHandler(void) {
}
#else
#pragma vector=0x19
__interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
}
#endif
#pragma vector=0x1A
__interrupt void EEPROM_EEC_IRQHandler(void)
{
}
这里面的函数和51一样你可以放到任何文。