社区导航

 
查看: 1141|回复: 20

[原创] 血泪总结出来的代码编辑经验

[复制链接]

241

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-3-9 16:40:36 | 显示全部楼层 |阅读模式
本帖最后由 haixinghp 于 2018-3-10 15:45 编辑

小白写代码,出了很多问题,把血泪史总结出来,以后不定期更新。大家共勉!



此内容由EEWORLD论坛网友haixinghp原创,如需转载或用于商业用途需征得作者同意并注明出处


写代码之前一定要想清楚,自己写这份代码的目的和最求的目标。

关键代码要写好注释,每次编辑完代码都要做好相应的记录。
写好代码后都要做好代码的提炼,尽量能再后续复用的代码中使用。
建立自己的框架。
做好代码整理,做好readme文件的说明。
中断一定要清除
调试时,仿真器的电源不要接入系统中。
2018年3月9日,星期五
对于变量,尽量减少全局变量的定义。如果是在需要全局变量,可以使用结构体对变量进行包装,然后使用u8 Tmp;
u8 setTmp(u8 par)
{
     Tmp= par;
     return tmp;
}
u8 getTmp()
{
     return Tmp;
}
对函数进行封装。其他文件对函数进行处理的时候调用u8 setTmp(u8 par),u8 getTmp()

结构体尽量在本级文件下使用,前面加static
一个函数的功能尽量少,函数和函数之前的尽量不要交叉调用。
为了完成同一目标的函数,写在同一个.c.h文件里面,采用统一的命名前缀。
不要把两个工程用宏定义合成一个函数,这样在维护代码时相当痛苦。
对于数组的使用,一定要保证数组不要越界!工程一旦很大,越界的话问题的原因很难查找到。
不同的IDE,指定要知晓memory,disassembly,IO状态查询的接口,不要单单靠测试现象去缝隙原因。
宏定义使用
宏定义尽量只使用大写字母、下划线、数字。
#if  WP_EN
//A
#else
//B
#end /*#if  WP_EN*/
宏定义A,B之间的代码不要太长,可这个代码添加文件模块的开启和关闭。
.H文件头定义。
#ifndef __A_H__
#define __A_H__

#endif
关于文件说明
/***************************************************************************************
**文件名:     
**作者:       Haixing.Huang
**版本:       V1.00
**说明:       此文件可以根据实际情况修改。
**修改记录:   版本     修改者    时间                     
**                                               
**备注:       2016/3/23
****************************************************************************************/

关于函数说明
/***************************************************************************************
**函数名:         --
**功能描述:     --
**输入参数:     --
**输出参数:     --
**备注:         Main.c,2015/3/11,By Haixing.Huang
****************************************************************************************/

一些小技巧
有些时候出要处理变量其中的一个位,可使用结构体和共同体来实现。如下:
typedef struct  
{
  u16 HeartBeatType:1;
  u16 BatteryMovesAlarm:1;
  u16 GpsErrorAlarm:1;
  u16 TravkingMode:1;
}_struHeartBeatBit;

typedef union
{
  _struHeartBeatBit struHeartBeatBit;
  u16 HeartBeatAllData;
}_uniHeartBeat;

_uniHeartBeat uniHeartBeat;
所有文件的头文件都放在一个头文件里面。比如config.h,头文件test.h包含#include "config.h",源文件test.c,包含#include "test.h"
本人水平有限,这些总结的不全面,望大神指教。
2018年3月10日 15:45:07


此帖出自stm32/stm8论坛


回复

使用道具 举报

1479

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-3-9 16:54:03 | 显示全部楼层
看来受伤很深啊,才有此总结啊


回复

使用道具 举报

4167

TA的帖子

9

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2018-3-9 17:42:20 | 显示全部楼层
其实 ,这就体现出来了,好习惯的重要性。  有些人往往习惯不好,当然不是评判楼主你,到头来  受罪的是自己。


回复

使用道具 举报

6801

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-3-9 21:24:19 | 显示全部楼层
每次编辑完做好相应记录?难道不用版本管理工具啊

点评

请推荐一下版本管理工具吧  详情 回复 发表于 2018-3-12 12:00
training


回复

使用道具 举报

2683

TA的帖子

8

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-3-9 22:11:51 | 显示全部楼层
关键代码要写好注释,每次编辑完代码都要做好相应的记录。版本管理适合你!


回复

使用道具 举报

293

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-3-9 22:29:25 | 显示全部楼层
调试时,仿真器的电源不要接入系统中。*************这是为什么????


回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-3-10 08:18:45 | 显示全部楼层
单片机的代码  我总做不好复用,,, 好闹心呢,自己总结经验有点龟速,有没有这方面可以借鉴的地方呢

点评

我以前也是如此,因为直接用硬件体现出来看得更易懂,但是不利于移植,尤其是多处用到的硬件资源,那酸爽,真的不敢想象  详情 回复 发表于 2018-3-10 13:00
代码的复用,在写程序的时候,尽量把有关硬件的代码用宏定义的方式定义,这样,以后改代码只需要改一下宏定义就行了,不用通篇去找硬件的定义  详情 回复 发表于 2018-3-10 12:58


回复

使用道具 举报

722

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-3-10 09:14:21 | 显示全部楼层
总结的很好 楼主这份经验试用于很多行业
物致DIY 欢迎你的加入~
QQ群:646461928 公众号:智物知心致成
小店


回复

使用道具 举报

624

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2018-3-10 12:55:32 | 显示全部楼层
还有,改动代码之前一定要对原来的代码进行备份,不然,代码没改好,辛辛苦苦几个星期的成果也毁于一旦,那种酸爽你懂得,欲哭无泪


回复

使用道具 举报

624

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2018-3-10 12:58:02 | 显示全部楼层
hunhanhonglou 发表于 2018-3-10 08:18
单片机的代码  我总做不好复用,,, 好闹心呢,自己总结经验有点龟速,有没有这方面可以借鉴的地方呢

代码的复用,在写程序的时候,尽量把有关硬件的代码用宏定义的方式定义,这样,以后改代码只需要改一下宏定义就行了,不用通篇去找硬件的定义


回复

使用道具 举报

624

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2018-3-10 13:00:20 | 显示全部楼层
hunhanhonglou 发表于 2018-3-10 08:18
单片机的代码  我总做不好复用,,, 好闹心呢,自己总结经验有点龟速,有没有这方面可以借鉴的地方呢

我以前也是如此,因为直接用硬件体现出来看得更易懂,但是不利于移植,尤其是多处用到的硬件资源,那酸爽,真的不敢想象


回复

使用道具 举报

70

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-3-12 12:00:58 | 显示全部楼层
白丁 发表于 2018-3-9 21:24
每次编辑完做好相应记录?难道不用版本管理工具啊

请推荐一下版本管理工具吧


回复

使用道具 举报

494

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-3-13 14:10:17 | 显示全部楼层
血泪码


回复

使用道具 举报

176

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-3-13 14:30:40 | 显示全部楼层
学习,支持
充放电数显全套方案,双口快充慢充检测电流电压,两线三线直流电压表,配套三个8尺寸15*8MM带AV电流电压单位专利数码屏,资料QQ2981074992 邮箱同上


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-3-13 17:05:14 | 显示全部楼层
先赞一下


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-3-13 17:05:32 | 显示全部楼层
不错


回复

使用道具 举报

62

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-3-14 22:49:15 | 显示全部楼层
不错!学习学习!


回复

使用道具 举报

63

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-3-21 12:13:10 | 显示全部楼层
楼主看来受伤很深,才有这总结,其实还有很多可以总结的,譬如#define 的使用,譬如软件的分层等等


回复

使用道具 举报

544

TA的帖子

235

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-3-22 19:57:00 | 显示全部楼层
活用宏定义!
软件模块化设计与分层次设计。
爱电子,爱生活


回复

使用道具 举报

241

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-23 15:26:20 | 显示全部楼层
有些代码,不希望编译器做优化,比如延时,涉及到硬件绝对地址的访问,一定要在声明的时候在类型中加 volatile !


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-9-20 18:17 , Processed in 0.559434 second(s), 18 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表