我写驱动从来不理解驱动的代码流程,就是根据框架,就像堆积木直接写好。
最近好好的看了看linux内核的源代码,以及高焕堂先生的UML+OOPC嵌入式C语言开发精讲
,才发现原来c功能这么强大。
举例
struct k_object{
struct file_operations fops;
void* data;
void* others;
};
struct aa{
struct k_object* kobj;
}
类继承是通过包含来实现的。
它们的访问是这样的,
子类访问父类
struct aa tst;tst->kobj
父类访问子类
container_of()
这里提醒下,根据父子类的创建时间(即生存周期)它们有两种关系,组合和包含。
组合是子类创建时才创建父类,这样子类销毁时父类也没了,严格来讲,这不是父子关系?????。感觉linux使用的是这种方式。,有待考证
而包含是父类先创建,子类创建时将kobj的指针指向父类。父类不会随着子类的销毁而销毁。
多态是通过接口函数来实现的。
tst->kobj->fops = fread();