打印
[开发资料]

嵌入式软件开发没有捷径

[复制链接]
748|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2023-9-14 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
嵌入式软件开发有没有什么捷径?不定期会收到类似的问题,我只想说:嵌入式软件开发没有捷径



说实话,有这种想法的人,我其实想劝你放弃。对于绝大多数普通人,一步一个脚印就是捷径。



当然,这个问题可以换个方式问,比如:如何才能提升自己编程水平?或者:如何提升自己技能?


对于大部分人,特别是初学者,我觉得应该从两个方面提升自己技能:

1.多参考、多阅读优秀的开源代码;

2.多实践,动手敲代码;



为啥要参考别人的代码?

你要相信,这个世界上大部分人都是普通人,你的写代码的很多想法别人都已经想过,而且实践验证过。



最终能保留下来的,而且运用在优秀开源项目中的代码,这种代码就具有参考价值。



肯定有人会反驳,认为**代码很La圾,自己写的代码肯定比**代码要好。有这种想法的人,往往自己很菜,却非要认为自己很牛X。



当然,不排除有那种确实很牛X的人,但这种人又有多少呢,反正我自认为我是一个普通人,我要向优秀的人学习的地方还有很多。

使用特权

评论回复
评论
forgot 2023-11-10 13:25 回复TA
多学多实践 最快 
沙发
两只袜子|  楼主 | 2023-9-14 10:09 | 只看该作者
何为优秀的代码?

何为优秀的代码?可能每个人的定义不同,每个人的侧重点也不同。



易读易懂、结构清晰、逻辑清晰、方便移植......等等包含了所有优点的代码,就是优秀的代码?我觉得不是!



人无完人,代码也肯定多少都存在“瑕疵”,或者说多少存在有你认为不满意的地方。



我认为优秀的代码,首先,它能被许多人使用,并运用在许多成功的项目中。比如:一套控制算法代码,能成功应用在机械臂、机器人、四轴飞行器等项目中,它就是优秀的代码。



其次,它具有优秀代码的一些基本特性,比如上面说的易读易懂、代码清晰、方便移植等。



这种对于学习者不排斥的代码也算得上优秀的代码,比如:一个模块的驱动程序、一套串口通信协议。



再次,就是代码更多细节,比如:代码排版格式、注释、命名等。



哪里有优秀的代码?

我觉得程序员不应该问这样的问题。我反过来问你吧,你看大家一般把代码开源在什么地方?



当然是代码托管的网站啊,GitHub是目前世界上最大的代码托管平台:

https://github.com/



当然,除了GitHub之外,还有国内的Gitee代码托管平台:

https://gitee.com/



这俩代码托管平台众多大公司都在上面贡献了优秀的代码,微软、谷歌、腾讯、阿里这些公司都有代码库。



同时,你会发现平时我们使用的一些开源代码,在GitHub平台上都有。比如:RTOS内核及组件、MCU厂家驱动代码、通信协议等源代码。

使用特权

评论回复
板凳
两只袜子|  楼主 | 2023-9-14 10:10 | 只看该作者
多动手写代码

实践是检验真理的唯一标准,这句话相信大家都听说过。



如果只看书不动手敲代码就能掌握程序开发,你觉得这个程序员能写出好的代码吗?很多人基础理论很不错,但实践操作起来各种问题、各种不懂。



比如下面这样写:

if(i = 1)
{
  //...
}

你可能认为是对的,编译也是对的,但实际这代码有bug。



编程是一个很注重实践的工作,因为现实中存在各种不确定的因素,比如:你写的函数,有可能因为传入的参数过大导致内存溢出。



代码写出来了还不算有本事,编译0警告0错误,并成功运行起来,你学的理论知识才发挥了作用。



编程习惯



这里说的多动手写代码,不只是为了写代码而写代码,写代码的同时,要培养良好的编程习惯。



如果养成了不良的编程习惯,后期改变可能很难。



比如函数、变量以“中文字母”方式命名:

int DianYa;

int CaiJiDianYa(void);


还比如:不写注释、源代码不分类、命名混乱等。



很多人初学的时候可能都没有意识,想到什么就写什么,所有功能在main中就实现了。



这里就要回到上面的内容,多参考别人优秀的代码。当然,不同阶段参考的代码不同,初学者可以参考一些基础教程配套的代码,有工作经验的工程师应该多参看成功项目的源代码。



看看别人怎样命名、怎么写注释、怎么将代码分类等。



编程思维



做小项目时,可能几百行代码,一个main就搞定了,这时你可能觉得编程思维不重要好。



但项目做大了,你就会发现以小项目的编程方式不能完成了,这个时候就要考虑软件架构、结构化、模块化了。



对于初学者来说,一下就要掌握软件架构、模块化设计可能有点难,但是,可以慢慢培养自己的编程思维。



举一个简单的模块化的例子,你做一个小车,你把“运动部分”的代码归为一类(模块化),对应的文件命名可以为 bsp_motion, app_motion,函数命名为 Motion_xxx 等。



当然,还有很多地方,你可以都归类为 Motion,比如:

#define MOTION_PWM_TIMx              TIM9
#define MOTION_PWM_TIM_CLK           RCC_APB2Periph_TIM9
#define MOTION_PWM_TIM_GPIO_CLK      RCC_AHB1Periph_GPIOE
#define MOTION_PWM_TIM_PIN           GPIO_Pin_5
#define MOTION_PWM_TIM_GPIO_PORT     GPIOE
#define MOTION_PWM_TIM_SOURCE        GPIO_PinSource5
#define MOTION_PWM_TIM_AF            GPIO_AF_TIM9
#define MOTION_PWM_TIM_OCxInit       TIM_OC1Init
#define MOTION_PWM_TIM_SetComparex   TIM_SetCompare1
#define MOTION_PWM_COUNTER_CLOCK     10000000


其实,说的再多,看的再多,不如自己行动起来敲代码,过程中你肯定会遇到各种各样的问题。



你用心解决这些问题的过程,就是你成长的过程。

最后,如何证明你编码水平提升了?
答:回看自己以前代码,如果觉得烂,那就说明你提升了。

使用特权

评论回复
地板
单片小菜| | 2023-9-14 11:11 | 只看该作者
两只袜子 发表于 2023-9-14 10:09
何为优秀的代码?

何为优秀的代码?可能每个人的定义不同,每个人的侧重点也不同。

是的

使用特权

评论回复
5
麻花油条| | 2023-9-14 15:27 | 只看该作者
嵌入式开发都可以有捷径走那估计人生到处都会充满捷径,哈哈

使用特权

评论回复
6
麻花油条| | 2023-9-14 15:28 | 只看该作者
脚踏实地一步一个脚印才是王道

使用特权

评论回复
7
中国龙芯CDX| | 2023-9-18 13:12 | 只看该作者
技术要稳扎稳打,毕竟设计到自己的产品后期自己可能会用到的

使用特权

评论回复
8
jf101| | 2023-10-17 19:14 | 只看该作者
楼主写的这个给我的感觉躺平才是捷径

使用特权

评论回复
9
小小蚂蚁举千斤| | 2023-10-23 14:56 | 只看该作者
嵌入式软件开发没有什么捷径,有的就是不断地提升与学习

使用特权

评论回复
10
星辰大海不退缩| | 2023-10-25 13:23 | 只看该作者

1.多参考、多阅读优秀的开源代码;

2.多实践,动手敲代码;

使用特权

评论回复
11
AdaMaYun| | 2023-11-7 14:02 | 只看该作者
很多知识可以学习,编程习惯这个事需要自己养成

使用特权

评论回复
12
jf101| | 2023-11-8 13:18 | 只看该作者
有的时候该花钱报班不能省,好多新标准新信息自学了解不到

使用特权

评论回复
13
szt1993| | 2023-11-9 14:47 | 只看该作者
正确的道路就是捷径,没走弯路

使用特权

评论回复
14
chenjun89| | 2023-11-10 08:07 | 只看该作者
这得看你怎么理解捷径两个字,侠义上的捷径不可取,但是广义上一个好的方法也是捷径。

使用特权

评论回复
15
OKAKAKO| | 2023-11-10 17:13 | 只看该作者
基础知识还好自学,但是要进阶就必须继续做项目培训,没有捷径可走

使用特权

评论回复
16
LOVEEVER| | 2023-11-13 13:11 | 只看该作者
问这问题的本来就有问题,啥不是踏踏实实的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2038

主题

7364

帖子

10

粉丝