单片机程序如何与硬件进行交互通讯

今日头条

1151人已加入

描述

单片机要与硬件交互,单片机程序需要与内核进行通信,并且在此之前,它必须通知内核有关内核的存在。这是通过“init”调用实现的,通过该调用单片机程序在内核中注册并分配了所需的内存。在系统关闭时,将使用“exit”调用取消注册单片机程序,这还会释放单片机程序占用的所有资源。用于定义“init”和“exit”功能的调用是:

module_init(init_function_name);

module_exit(exit_function_name);

我们可以编写自己的init和exit函数,同时编写分别由上述两个调用设备的单片机程序。***简单的init函数如下:

static int init_function_name(void)

{

printk(KERN_ALERT“ Hello”);

return 0;

}

同样,我们也可以编写退出函数。如您所见,为了获取内核日志,我们使用与C函数printf()类似的printk()函数,但需要一个可选的特殊日志级别字符串(此处为KERN_ALERT–日志级别1)来指示严重性类型错误消息。共有八个日志级别,默认值为KERN_WARNING(日志级别4)。

设备单片机程序中***重要的组件之一是文件操作(简称“fops”)结构。此结构指定为其编写单片机程序的设备的功能。它包含指向为设备支持的操作而编写的功能的指针。基本的fops结构可以描述如下:

static struct file_operations fops =

{

.read = my_read;

.write = my_write;

.open = my_open;

.release = my_release;

}

上面的定义是,每当设备必须读取某些内容时,都会调用my_read函数(由开发人员编写)。同样,指向其他功能的指针是针对它们提及的功能的相应名称。

如果要为其编写单片机程序的设备支持中断功能,则单片机程序必须在init函数中注册中断服务程序(ISR),只要在设备中收到中断,该函数就会被调用。这是通过使用需要中断处理程序的内核函数request_irq()来实现的,然后启用中断线以接收中断。另一方面,当单片机程序卸载时,内核函数free_irq()用于释放中断处理程序和中断行。

深圳市艾能微科技有限公司是一家致力于发展国产单片机方案开发的科技公司,在中国区主营电子产品方案开发、单片机技术开发及设计销售等服务,单片机厂家。代理:芯连心。有8位单片机,32位单片机,触摸单片机等。

审核编辑:符乾江

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分