关于MDK中优化的问题,优化后程序出错

[复制链接]
 楼主| yycool 发表于 2008-11-18 14:39 | 显示全部楼层 |阅读模式
用万利的板子学M3,环境是MDK3.24,用NVIC,EXIT做两个按键分别控制两个LED的实验:KEY2控制LD1亮灭,KEY3控制LD3亮灭&nbsp;<br /><br />一开始开了level&nbsp;3的优化,结果只有KEY2控制LD1亮灭可以起作用,KEY3不起作用。&nbsp;<br />调了半天没有发现问题在哪里,两个按键,两个LED的设置是一模一样的。后来把优化给关了,就都正常了&nbsp;<br />哪位高手可以解释下吗?&nbsp;<br /><br />程序中没有使用自己定义的变量<br /><br />工程在这里:<br />http://www.**.cn/bbs/bbs_upload540590/files_11/**_503054.rar<br /><br /><br />EXTI的配置&nbsp;<br />void&nbsp;EXTI_Configuration(void)&nbsp;<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;EXTI_InitTypeDef&nbsp;EXTI_InitStructure;&nbsp;<br /><br />&nbsp;&nbsp;/*&nbsp;Connect&nbsp;(Key&nbsp;Button&nbsp;EXTI&nbsp;Line&nbsp;to&nbsp;Key&nbsp;Button)&nbsp;GPIO&nbsp;Pin&nbsp;*/&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,&nbsp;GPIO_PinSource3);&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Configure&nbsp;Key&nbsp;Button&nbsp;EXTI&nbsp;Line&nbsp;to&nbsp;generate&nbsp;an&nbsp;interrupt&nbsp;on&nbsp;falling&nbsp;edge*/&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;EXTI_InitStructure.EXTI_Line&nbsp;=&nbsp;EXTI_Line3;&nbsp;<br />&nbsp;&nbsp;EXTI_InitStructure.EXTI_Mode&nbsp;=&nbsp;EXTI_Mode_Interrupt;&nbsp;<br />&nbsp;&nbsp;EXTI_InitStructure.EXTI_Trigger&nbsp;=&nbsp;EXTI_Trigger_Falling;&nbsp;<br />&nbsp;&nbsp;EXTI_InitStructure.EXTI_LineCmd&nbsp;=&nbsp;ENABLE;&nbsp;<br />&nbsp;&nbsp;EXTI_Init(&EXTI_InitStructure);&nbsp;<br /><br />&nbsp;&nbsp;/*&nbsp;Connect&nbsp;(Key&nbsp;Button&nbsp;EXTI&nbsp;Line&nbsp;to&nbsp;Key&nbsp;Button)&nbsp;GPIO&nbsp;Pin&nbsp;*/&nbsp;<br />&nbsp;&nbsp;GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,&nbsp;GPIO_PinSource4);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Configure&nbsp;Key&nbsp;Button&nbsp;EXTI&nbsp;Line&nbsp;to&nbsp;generate&nbsp;an&nbsp;interrupt&nbsp;on&nbsp;falling&nbsp;edge&nbsp;*/&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;EXTI_InitStructure.EXTI_Line&nbsp;=&nbsp;EXTI_Line4;&nbsp;<br />&nbsp;&nbsp;EXTI_InitStructure.EXTI_Mode&nbsp;=&nbsp;EXTI_Mode_Interrupt;&nbsp;<br />&nbsp;&nbsp;EXTI_InitStructure.EXTI_Trigger&nbsp;=&nbsp;EXTI_Trigger_Falling;&nbsp;<br />&nbsp;&nbsp;EXTI_InitStructure.EXTI_LineCmd&nbsp;=&nbsp;ENABLE;&nbsp;<br />&nbsp;&nbsp;EXTI_Init(&EXTI_InitStructure);&nbsp;<br />}&nbsp;<br /><br /><br />NVIC的配置&nbsp;<br />void&nbsp;NVIC_Configuration(void)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;NVIC_InitTypeDef&nbsp;NVIC_InitStructure;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />#ifdef&nbsp;&nbsp;VECT_TAB_RAM&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Set&nbsp;the&nbsp;Vector&nbsp;Table&nbsp;base&nbsp;location&nbsp;at&nbsp;0x20000000&nbsp;*/&nbsp;&nbsp;<br />&nbsp;&nbsp;NVIC_SetVectorTable(NVIC_VectTab_RAM,&nbsp;0x0);&nbsp;&nbsp;<br />#else&nbsp;&nbsp;/*&nbsp;VECT_TAB_FLASH&nbsp;&nbsp;*/&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Set&nbsp;the&nbsp;Vector&nbsp;Table&nbsp;base&nbsp;location&nbsp;at&nbsp;0x08000000&nbsp;*/&nbsp;&nbsp;<br />&nbsp;&nbsp;NVIC_SetVectorTable(NVIC_VectTab_FLASH,&nbsp;0x0);&nbsp;&nbsp;&nbsp;&nbsp;<br />#endif&nbsp;<br /><br />&nbsp;&nbsp;/*&nbsp;Configure&nbsp;one&nbsp;bit&nbsp;for&nbsp;preemption&nbsp;priority&nbsp;*/&nbsp;<br />&nbsp;&nbsp;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Enable&nbsp;the&nbsp;EXTI3&nbsp;Interrupt*/&nbsp;&nbsp;<br />&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannel&nbsp;=&nbsp;EXTI3_IRQChannel;&nbsp;<br />&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority&nbsp;=&nbsp;0;&nbsp;<br />&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannelSubPriority&nbsp;=&nbsp;0;&nbsp;<br />&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannelCmd&nbsp;=&nbsp;ENABLE;&nbsp;<br />&nbsp;&nbsp;NVIC_Init(&NVIC_InitStructure);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Enable&nbsp;the&nbsp;EXTI4&nbsp;Interrupt&nbsp;*/&nbsp;<br />&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannel&nbsp;=&nbsp;EXTI4_IRQChannel;&nbsp;<br />&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority&nbsp;=&nbsp;0;&nbsp;<br />&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannelSubPriority&nbsp;=&nbsp;0;&nbsp;<br />&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannelCmd&nbsp;=&nbsp;ENABLE;&nbsp;<br />&nbsp;&nbsp;NVIC_Init(&NVIC_InitStructure);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br /><br />GPIO的配置&nbsp;<br />void&nbsp;GPIO_Configuration(void)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;GPIO_InitTypeDef&nbsp;GPIO_InitStructure;&nbsp;<br /><br />&nbsp;&nbsp;/*&nbsp;Configure&nbsp;(PC.04&nbsp;--&nbsp;PC.11)&nbsp;as&nbsp;(Output&nbsp;push-pull)&nbsp;*/&nbsp;<br />&nbsp;&nbsp;GPIO_InitStructure.GPIO_Pin&nbsp;=&nbsp;GPIO_Pin_4&nbsp;|&nbsp;GPIO_Pin_5&nbsp;|GPIO_Pin_6&nbsp;|&nbsp;GPIO_Pin_7;&nbsp;<br />&nbsp;&nbsp;GPIO_InitStructure.GPIO_Mode&nbsp;=&nbsp;GPIO_Mode_Out_PP;&nbsp;<br />&nbsp;&nbsp;GPIO_InitStructure.GPIO_Speed&nbsp;=&nbsp;GPIO_Speed_50MHz;&nbsp;<br />&nbsp;&nbsp;GPIO_Init(GPIOC,&nbsp;&GPIO_InitStructure);&nbsp;<br /><br />&nbsp;&nbsp;/*&nbsp;Configure&nbsp;(PD.03,&nbsp;PC.04,&nbsp;PC.11&nbsp;--&nbsp;PC.15&nbsp;as&nbsp;input&nbsp;floating)&nbsp;*/&nbsp;<br />&nbsp;&nbsp;GPIO_InitStructure.GPIO_Pin&nbsp;=&nbsp;GPIO_Pin_3&nbsp;|&nbsp;GPIO_Pin_4&nbsp;|&nbsp;GPIO_Pin_11&nbsp;|&nbsp;GPIO_Pin_12&nbsp;|&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_Pin_13&nbsp;|&nbsp;GPIO_Pin_14&nbsp;|&nbsp;GPIO_Pin_15;&nbsp;<br />&nbsp;&nbsp;GPIO_InitStructure.GPIO_Mode&nbsp;=&nbsp;GPIO_Mode_IN_FLOATING;&nbsp;<br />&nbsp;&nbsp;GPIO_Init(GPIOD,&nbsp;&GPIO_InitStructure);&nbsp;<br />}&nbsp;<br /><br /><br />下面是两个中断处理&nbsp;<br />void&nbsp;EXTI3_IRQHandler(void)&nbsp;<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIO_WriteBit(GPIOC,&nbsp;GPIO_Pin_7,&nbsp;(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,&nbsp;GPIO_Pin_7))));&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Clear&nbsp;the&nbsp;Key&nbsp;Button&nbsp;EXTI&nbsp;line&nbsp;pending&nbsp;bit&nbsp;*/&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTI_ClearITPendingBit(EXTI_Line3);&nbsp;<br />}&nbsp;<br /><br />void&nbsp;EXTI4_IRQHandler(void)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIO_WriteBit(GPIOC,&nbsp;GPIO_Pin_5,&nbsp;(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,&nbsp;GPIO_Pin_5))));&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Clear&nbsp;the&nbsp;Key&nbsp;Button&nbsp;EXTI&nbsp;line&nbsp;pending&nbsp;bit&nbsp;*/&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTI_ClearITPendingBit(EXTI_Line4);&nbsp;<br />}&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部