宜宾建设局网站,怎么建立网站的步骤,联系昆明网站建设,湖南建设监理报名网站目录 GIC相关寄存器
GPIO中断相关寄存器
中断服务函数表
中断向量表偏移位置
make有报错
解决方法#xff1a;error: for loop initial declarations are only allowed in C99 mode_‘for’ loop initial declarations are only allowed i_Young_2717的博客-CSDN博客 GIC…目录 GIC相关寄存器
GPIO中断相关寄存器
中断服务函数表
中断向量表偏移位置
make有报错
解决方法error: for loop initial declarations are only allowed in C99 mode_‘for’ loop initial declarations are only allowed i_Young_2717的博客-CSDN博客 GIC相关寄存器 分发器 中断数量GICD_TYPER 中断清除 GICD_ ICENABLERn 中断使能GICD_ISACTIVERn 中断优先级设置GICD_IPRIORITYR 详见GIC官方手册 4.3 Distributor register descriptions cpu接口单元 中断优先级数量GICC_PMR 抢占优先级和子优先级设置 GICC_BPR 保存中断IDGICC_IAR 通知cpu中断完成GICC_EOIR 详见GIC官方手册 4.4 CPU interface register descriptions
GPIO中断相关寄存器 gpio中断触发类型:高/低电平、上升/下降沿 GPIO5_ICR1(0~15) GPIO5_ICR2(16~31) gpio中断屏蔽 GPIO5_IMR gpio中断状态寄存器 GPIO5_ISR gpio双边缘触发 GPIO5_EDGE_SEL 详见芯片数据手册 28.5 GPIO Memory Map/Register Definition
中断服务函数表
记录每个IRQ中断的回调函数 函数指针 函数参数
中断向量表偏移位置
C语言读写cp15协处理器
__ASM ( code : 输出操作数列表 : 输入操作数列表 ); code 具体操作指令(字符串表示) #是把宏参数变为一个字符串 ##是把两个参数连接在一起 __STRINGIFY(p##coproc) , -p15 操作数 通过%加数字引用比如%0 引用第一个操作数%1 引用第二个操作数 r将变量放入通用寄存器
button.c
#include button.h#include interrupt.h/*按键初始化函数*/void button_init(void){/**********************************第一部分***********************************//*时钟初始化*/CCM-CCGR1 0xffffffff;/*设置 key引脚的复用功能以及PAD属性*/IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0); IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0x10B0); /*设置GPIO5_01为输入模式*/GPIO5-GDIR ~(11); /**********************************第二部分**************************************//*使能GPIO5_1中断*/GPIO5-IMR | (11);/*禁止GPIO5_1中断双边沿触发*/GPIO5-EDGE_SEL 0;/*设置GPIO5_1上升沿触发*/GPIO5-ICR1 | (22);/*添加中断服务函数到 中断向量表*/system_register_irqhandler(GPIO5_Combined_0_15_IRQn, (system_irq_handler_t)GPIO5_1_IRQHandler, NULL);/*开启GIC中断相应中断*/GIC_EnableIRQ(GPIO5_Combined_0_15_IRQn);}void GPIO5_1_IRQHandler(void){/*按键引脚中断服务函数*/if((GPIO5-DR)(11)){if(button_status 0){button_status 0;}else{button_status 1;}}/*清除Gpio5_1中断标志位*/GPIO5-ISR | (1 1); }
make有报错
gecubuntu:~/bare_mental/part_5$ make mkdir -p build arm-none-eabi-gcc -c sources/project/main.c -o build/main.o -Iinclude -Isources/button -Isources/common -Isources/irq -Isources/led arm-none-eabi-gcc -c sources/common/common.c -o build/common.o -Iinclude -Isources/button -Isources/common -Isources/irq -Isources/led arm-none-eabi-gcc -c sources/irq/interrupt.c -o build/interrupt.o -Iinclude -Isources/button -Isources/common -Isources/irq -Isources/led sources/irq/interrupt.c: In function irq_init: sources/irq/interrupt.c:18:5: error: for loop initial declarations are only allowed in C99 or C11 mode for(int i 0; i NUMBER_OF_INT_VECTORS; i) ^ sources/irq/interrupt.c:18:5: note: use option -stdc99, -stdgnu99, -stdc11 or -stdgnu11 to compile your code Makefile:42: recipe for target build/interrupt.o failed
解决方法error: for loop initial declarations are only allowed in C99 mode_‘for’ loop initial declarations are only allowed i_Young_2717的博客-CSDN博客
使用gcc编译代码是报出
error: for loop initial declarations are only allowed in C99 mode
note: use option -stdc99 or -stdgnu99 to compile your code
错误这是因为在gcc中直接在for循环中初始化了增量 for(int i0; ilen; i) { } 这语法在gcc中是错误的必须先先定义i变量 int i; for(i0;ilen;i){ }
这是因为gcc基于c89标准换成C99标准就可以在for循环内定义i变量了
gcc src.c -stdc99 -o src
也就是 就可以了