资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

单片机编程入门基础知识中断函数注意点?-创新互联

中断函数注意点?1.中断处理函数的返回值和形式参数单片机编程入门基础知识 中断函数
注意点?

中断处理函数不能有返回值和形式参数,因为中断处理函数是由硬件(或触发器)调用的,没有程序向其传递参数,也没有程序接收其返回值,其参数通过全局变量传递。

创新互联公司服务项目包括日喀则网站建设、日喀则网站制作、日喀则网页制作以及日喀则网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,日喀则网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到日喀则省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

但是,请注意,如果要检测的其他函数的全局变量值在中断服务函数中发生更改,则volatile关键字将用于定义全局变量。因为主程序可能会将变量读入寄存器,然后每次只使用寄存器中的变量副本。如果此时不使用volatile关键字,则在中断服务函数中修改变量的操作将被短路。

2.浮点运算是在中断处理函数中执行的

由于浮点运算通常是由特殊的硬件执行的,因此硬件设备会涉及类似全局变量的内容(如硬件端口或存储在硬件设备中的数据)。如果浮点运算过程中断,其他函数也可能使用浮点运算,这将破坏设备中当前的硬件数据。可以理解,浮点运算通常是不可重入的,因此浮点运算不能用于中断服务函数。

在满足精度要求的前提下,浮点运算可以多次扩展为整数运算。

3.在中断处理函数中使用printf函数

这个原理类似于在上面的中断服务函数中使用浮点数,因为printf函数使用硬件资源,并且这些资源应该是互斥的(在多线程和多处理中),这使得printf函数不可重入且不能被重入用于中断。

此外,malloc和free等函数使用全局内存分配表,因此它们也是不可重入的,不能在中断中使用。

请注意,许多标准库函数是不可重入的,在中断服务函数中应谨慎使用。

中断服务功能应简短有效。

为什么主函数和中断函数不能调用同一函数?

这涉及PICC编译时临时变量的空间分配算法。

一般来说,为了便于处理,中断中使用的临时变量的空间分配独立于其他地方使用的临时变量。这可以通过查看已编译程序集列表中的中断处理程序集代码看到。如果中断函数与其他函数同时调用函数,则会发生错误,除非函数不需要在内部分配临时变量。我认为对于大多数应用程序,我们可以使用其他方法来解决同时调用函数的问题,这最多会浪费一点代码空间。

单片机,外部中断程序,为什么不用写在主程序中?为什么中断函数不在主函数也可以运行?

以51单片机为例说明亚帆的观点:

中断是指中断正在进行的任务以执行更紧急的任务。显然,至少需要两套程序,一套主程序和一套中断程序。

写在主程序中只能一步一步地执行,不能达到高优先级的目的。所以这是行不通的。

0x0000地址是硬件重置后执行程序的条目。0x0003是外部中断项,以此类推。

复位后,将从0x0000自动执行,当外部中断到来时,将从0x0003自动执行。当函数写入中断0时,该函数将根据中断号自动放置在相应的条目上。中断编号0是将此函数放入0x0003(实际上是一条跳转指令)。

如果主程序中未打开中断和启用中断,则0x0003是正常的程序存储空间。

详见下图:

如图所示,中断仅表示两组程序(蓝色和红色)。


分享标题:单片机编程入门基础知识中断函数注意点?-创新互联
文章出自:http://www.cdkjz.cn/article/ceighd.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220