Problem solutions
- 一个独立的模块想要调其他模块的函数接口
在原方案中,模块B需要调用模块A中的read and write 函数,因此需要包含模块A的头文件
解决方案:为了让模块B更加独立,可以在模块B中建立read 和 write 函数指针,并创建注册函数;
在模块A中调用模块B的注册函数,将模块A中的函数可以在模块B中使用,而保证编译的时候不依赖与模块A。
实现如下。
优点:减少模块之间的耦合
模块B:
typedef void (\*read_f)(char\* buf, int len);
typedef void (\*write_f)(char\* buf, int len);
read_f pread = NULL;
write_f pwrite = NULL;
void register\_read\_fun(void\* pfun)
{
pread = (read_f)pfun;
}
void register\_write\_fun(void\* pfun)
{
pwrite = (write_f)pfun;
}
void xxxB\_task()
{
if (xxx){
pread(buf, len);
}else (xxx){
pwrite(buf, len);
}
}
模块A:可以使用include模块B的头文件来调用注册函数,或者使用extern
extern void register\_read\_fun(void\* pfun)
extern void register\_write\_fun(void\* pfun)
void read(char\* buf, int len)
{
//读操作
}
void write(char\* buf, int len)
{
//写操作
}
void xxxA\_task()
{
register\_read\_fun(read);
register\_write\_fun(write);
while(1){
//do some thing
}
}
- porting layer:
Q:一个烧录程序的功能,可以通过IIC\SPI\UART三种通信方式,未来还可能增加新的通信方式,为了降低开发成本怎么设计。
A:烧录程序这一段的flow是相同的,仅通信方式不一样,通信中涉及到read,write,setting等函数,我们可以使用一个函数指针结构体来实现上述功能。如果是C++就更好做了,先建一个base类,其中有read,write,setting的虚函数,然后通过继承分别去实现不同的通信方式。
优点:扩展性好
通过结构体实现上述方案:
typedef void (\*read_f)(char\* buf, int len);
typedef void (\*write_f)(char\* buf, int len);
typedef void (\*setting_f)(void\* set);
typedef struct {
read_f pread;
write_f pwrite;
setting_f psetting;
} Com;
Com c;
void main\_task\_init()
{
#ifdef IIC
c = iic函数接口
#enif
#ifdef SPI
c = spi函数接口
#enif
#ifdef UART
c = uart函数接口
#enif
}
void main()
{
main\_task\_init();
c.psetting(buf, len);
.....
c.pread(buf, len);
....
c.pwrite(buf, len);
}
如果需要新加通信方式CAN
只需要新建一个文件,实现结构体中的函数,然后在main_task_init加上函数的注册即可
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)
最后
资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!
4156ee24.jpg" alt=“img” style=“zoom: 67%;” />
最后
资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!