嵌入式中常见的问题锦集(1)

a. 内存分配注意事项:初始化后判空;使用后释放;释放后置空
	char \*pm = (char \*) malloc(size);
	if (pm == NULL) 内存分配失败 return;
	使用pm
	free(pm);
	pm = NULL;

  1. ,

Problem solutions

  1. 一个独立的模块想要调其他模块的函数接口
在原方案中,模块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
	}
}

  1. 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);
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/9d5c5ed62d17d30f6eac87045cefa89a.png)

![img](https://img-blog.csdnimg.cn/img_convert/e569c10adc818470b1e8c5098ff6b5dc.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/f398eebfb2426511c1b1daaaf71adeff.png)

 **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

![img](https://img-blog.csdnimg.cn/img_convert/efea82bef6ef5858f4caccc021bd5f22.png)

![img](https://img-blog.csdnimg.cn/img_convert/f7fbfe9dd89f321d1ca35205cdca4322.png)

 

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

4156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

**[更多资料点击此处获qu!!](https://bbs.csdn.net/topics/618376385)**
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值