前言:
如今我们对“c语言的中断函数怎么写”大体比较关注,小伙伴们都想要学习一些“c语言的中断函数怎么写”的相关文章。那么小编在网络上汇集了一些有关“c语言的中断函数怎么写””的相关文章,希望同学们能喜欢,姐妹们一起来了解一下吧!C语言是面向过程的,而C++是面向对象的
C和C++的区别:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
“别人安眠,我进修!”感激打动大师今天又和小编一起进修来进修C说话嵌入式,希望大师一天天前进,“吃得苦中苦,方为人上人”。
上吊刺股
今天小编和大师一起来商讨C说话嵌入式中最最最重要的一项内容“连续”!“连续”这个概念要使用起来也挺简单,可若是真的深切体味其实也斗劲复杂,为了不是大师思疑,我们仍是从简单动身,直接给大师引见它的机制和使用编制,末了在和大师略微引见一下事理!
大师晓得MCU在执利用命时,都是挨次实行的,实行完使命1,再执利用命2,之后不息到使命n,再重头起头实行。可是偶尔我们必要实行的事务是不确定性的。例如:你泛泛在干活时,你的电话俄然响了,这时辰你必定会放动手中的工作去接电话,电话铃声就是一个连续旌旗暗号,它打断了你当前正在做的工作,让你去实行接电话这个使命,待电话竣事之后再回到本来的使命,从适才停下来的地方继续实行。“电话”什么时辰会响,这件工作什么时辰产生我们无法确定,可是只需电话响了我们就要去接电话,这就是连续!固然了假设MCU带把持体系,我们可以使用多线程,接纳轮询的编制去实时检察“电话”是不是响了,可是这无疑加重了CPU的负担,使用连续就可以大大减少CPU的负担,让他可以高效地去实行其他使命。
所以嵌入式产物在设计功能时,针对不确定性的身分最好使用连续来实现节制。可是连续也有必定的限定,那就是连续实行函数时辰不成过长,我在使用ARM编程时,连续函数中不成以添加延时函数,不然体系就会崩溃,连续函数就是“要少要实行快”,主若是由于连续函数占用了CPU的资源,只能容许短时辰的使用,不然他就找不到“本来的路”了!所以大师“接电话的时辰不成过长”,那么多长的时辰才可以呢?恳切说这个小编也没有考试考试过,不外小编在日常编程中都是尽量使用较为精练的说话来实现,经常也就是改变一个标识表记标帜量,例如函数中有“接电话”的函数功能,可是只需在“电话响了”这个标识表记标帜位使能了才实行,那么连续函数就是去使能这个标识表记标帜位。使能一个标识表记标帜位是很快的,将接电话的功能放到主函数中去实行。
接下来就和大师一起进修STM32的外部连续的使用编制。我使用的是STM32F4系列的芯片,它的外部IO口连续线只需16根,可是几乎每个管脚都可以设置装备安排为外部连续,那就声名一根连续线对应多个引脚.详细对应情形如下图:
连续线对应IO口
我们在使用之前要确认引脚所对应的的连续线,这一步做错了,那么连续必定不会相应了。所以我们必要将连续线和IO口婚配起来。
接下来让我们来捋一捋逻辑关系。和之前一样,从外到内从大到小依次分析:
1、我们使用IO口外部连续功能,当外部产生连续旌旗暗号那么就要实行相应的连续函数
2、要使用连续,那么使用的是哪个IO引脚?
3、设置装备安排IO引脚,并且将IO引脚与对应的连续线毗连起来
4、设置装备安排连续参数
5、设置连续办理器
6、完成连续相应函数
按照如许的流程,我们就能明晰本身的使命,和大师讲过,条理理清了就很随意去写,不要看到功能就静心去写代码,会写代码的不代表是优秀的轨范猿,会思虑的才是一流的人才。
那么我们按照上述流程来完成连续的实现:
第一步:设置装备安排引脚并且将引脚和连续线婚配起来
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG连续线时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //KEY0对应引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//通俗输入形式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2
··SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//PE2 毗连到连续线2
第二步:设置装备安排连续参数
EXTI_InitTypeDef EXTI_InitStructure;//界说外部连续
EXTI_InitStructure.EXTI_Line = EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//连续事务
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //降落沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//连续线使能
EXTI_Init(&EXTI_InitStructure);//设置装备安排连续
第三步:设置装备安排连续办理器
NVIC_InitTypeDef NVIC_InitStructure;//界说连续办理器
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部连续2
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部连续通道
NVIC_Init(&NVIC_InitStructure);//设置装备安排
第四步:完成连续相应函数
void EXTI2_IRQHandler(void)
{
delay_ms(10);//消抖 10ms时辰延时
if(KEY2==0)
{
LED0=!LED0; //这里实现的是LED灯的反转,LED灯的实现函数这里就不写了
}
EXTI_ClearITPendingBit(EXTI_Line2);//断根LINE2上的连续标识表记标帜位
}
看看是不是很简单,只需完成上述几个轨范一个外部连续就完成了,之后想怎样使用这个功能就看大师本身的阐扬了!
和大师不息强调的是,设置装备安排函数(初始化函数)根基就是设置装备安排几个模块,并且这些都是有例可循的,关头是大师若何去活学活用,将这些功能科学合理地使用起来!人和人的不合就在于思维,你能想到,而别人想不到,你就比他强,所以我们日常平常要多思虑,不要担忧异想天开,其实恰是异想才使世界变得丰盛多彩!
末了在和大师看一下连续的事理,如下图:
连续实行流程
1、原轨范正在实行
2、产生了1号连续
3、呵护原轨范现场
4、实行连续1
5、实行连续1时产生了连续优先级更高的连续2
6、呵护连续1的现场
7、实行连续2
8、连续2实行竣事之后,回到连续1的现场
9、继续实行连续1
10、连续1实行竣事之后,回到原轨范实行现场
11、实行原轨范
所以连续函数的流程仍是较为复杂的,幸亏我们只需会使用连续就可以了,更底层的函数,若是大师想更深切体味可以本身去查查质料!
好了感激大师今天的伴随,若是大师爱好话点个赞或评论两句吧,小编必要大师的支撑。固然若是小编哪里写错了还希望大师攻讦匡正,再次感激大师了。
这些是C/C++能做的
服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等
标签: #c语言的中断函数怎么写 #c语言的中断函数怎么写出来 #c语言中断是什么意思 #c语言中中断是什么意思 #c语言中断是什么意思呀