好友让我看这段代码

周末的时候,一个微信好友让我旁边看一段代码

在写下面的文章之前,我先简单说下

写代码是一件非常有意思的事情,同时也是一件需要我们认真对待的事情,我不认为一定要把代码写的和大神一样看不明白,但是至少要逻辑清晰,不能出现混淆不清的情况发生。

最近一年,我也在不断的提高自己的编程能力,之前的工作,很多是做处理系统和驱动等事情,但是实际的应用编程并没有很强的功底。也是在不断学习和前进,也非常感谢朋友和同事们对我的帮助和支持。

——

这段代码是这样的

static unsigned short timer_tick_cnt = 0;static ___interrupt USER_TIMER void timer_isr(void)//中断服务函数
{if (TMR->CON & BIT(15)) //定时器溢出中断标志位{TMR->CON |= BIT(14);//清中断///putchar('@');//todo,中断函数执行程序...timer_tick_cnt++;}
}static unsigned short timer_tick_get_current_timer(void)
{unsigned short timer_tick_count = timer_tick_cnt;return timer_tick_count;
}unsigned short usRecord = 0;unsigned char timer_tick_timeout_wait(unsigned short *p_var, unsigned short timeout)
{if( timer_tick_get_current_timer() - *p_var  < timeout ){///usRecord = timer_tick_get_current_timer();///printf("=======rec=%d,*p_var=%d=====\n",usRecord,*p_var);///printf("====TIMER return 0====\n");return 0;}*p_var  = timer_tick_get_current_timer();///usRecord///printf("====TIMER return 1====\n");return 1;
}
unsigned short testTimer = 0;
#define TIME_TICK_1MS_1S 1000
void testHandler(void)
{if(timer_tick_timeout_wait(&testTimer,TIME_TICK_1MS_1S))//1ms的中断溢出,故1000为1s{printf("helloworld\n");//问题点是如果timer_tick_timeout_wait的参数timeout定义为unsigned short,在约65s(65535ms)后该函数一直返回0而不再返回1,unsigned int正常}
}
int main(void)
{timerInit();//1ms的定时器中断,该函数不是问题点,问题点在下面while(1){testHandler();}
}

这个是原始的代码,我没有做任何的修改。

问题他在代码里面描述的比较清晰

//问题点是如果timer_tick_timeout_wait的参数timeout定义为unsigned short,在约65s(65535ms)后该函数一直返回0而不再返回1,unsigned int正常

细心的人会发现一个问题

a5299db1c4ef368184302a25097d804f.png

timer_tick_cnt 该死的变量一直递增

我之前写过一篇文章,说是内核里面时间戳的问题,如果保存时间戳的变量定义有问题,那可能也会导致时间有问题。

这也是他发现他的代码有问题的原因。

——

我再说下其他的情况

他设计的这个系统的初衷是系统定时器到一个指定的时间后去执行一个函数,但是直接把在定时器里面的变量拿到外面去判断,这里就不很好。

定时器应该只完成定时的事情,至于到了多少时间,告诉外面的其他任务就好了,这样可以做到高内聚。

变量timer_tick_cnt在其他地方操作,后续有问题排查起来肯定会很难受。

7d254c4184ae6a62ff95f04814465313.png

27efb973256539001a6cc394e2e43b0a.jpeg

——

变量的命名、函数的命名、代码风格

简直不堪入目,有的地方用下划线、有的地方用驼峰。

831502ad808579acbf45c3a54c6a384c.png

还有这个函数的执行,我有点看不懂

49e48af358a595dcc68d33a2247c861e.png

CPU就是这样被你累坏的啊。

关于变量和函数命名的网站,我推荐这个,这个网站非常适合我们

https://www.chtml.cn

b5bafdd67d5e91225c6528a80db1463e.png

这不比你自己想好多了。

——

宏的含义不清晰

9ffc52b7e795c789c5e75a2b3d89c293.png

这样给宏命名是非常不好的,先是1MS 又是1S,所以这个宏到底是啥,如果不看代码的话是很难理解意思。

如果是我,我会表明这个宏做什么事情,但是后面要加上MS,因为这个事件是MS的时间。

——

函数的命名大家可能也发现了,有些是驼峰,有些下划线。

这不是关键,关键是有些函数的用意没有表明清楚,不知道这个函数的作用是什么。

以上是我自己的个人观点

我觉得写代码是要对待一个艺术品,把这个东西做得好,做得优秀,是一件令我们愉悦的事情。

大家共勉之!

1f3900c66b4afdcf0c8aae42747382a8.jpeg

7ffa7459a896cb2150593dcf3c3b024a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用github管理Eclipse分布式项目开发

使用github管理Eclipse分布式项目开发 老关我在前面的博文&#xff08;github管理iOS分布式项目开发&#xff09;中介绍了github管理iOS分布式开发&#xff0c;今天老关将向大家介绍使用github管 理Eclipse分布式项目。事实上我们的516inc团队这在开发一个多移动平台项目&#…

小玩一个并行多线程MCU—MC3172

大家好转发一篇杂烩君的文章&#xff0c;杂烩君是我同一个高中的老乡&#xff0c;他平时分享的嵌入式知识非常不错。——————大家好&#xff0c;我是杂烩君。最近&#xff0c;朋友送了块小板子&#xff0c;板子上的MCU是个很有意思的东西——并行多线程处理器MC3172 。通俗…

Android 人脸识别签到(一)

因为Android课程设计自己选题&#xff0c;所以作者选了这个相对简单的。本来开始是想做大学课程查签到&#xff0c;拍一张集体照&#xff0c;就可识别哪些人已到&#xff0c;哪些未到。查了一下百度AI开发平台的人脸识别接口&#xff0c;发现V3的接口文档有M:N的人脸识别&#…

[系列文章]上传文件管理控件v2

一、引言&#xff1a; 开发v1的时候&#xff0c;遇到很多困难&#xff08;因为我是新手&#xff09;&#xff0c;于是就上网找了一些资料。 其中&#xff0c;这篇《数据绑定的总结 》文章&#xff08;http://www.cnblogs.com/qingtianyzl/articles/351012.html&#xff09;被我…

[ mongoDB ] - mongoDB的基本操作

mongoDB的基本操作 强烈推荐参考官方用户手册&#xff1a; http://www.mongodb.org/display/DOCS 1)插入&#xff08;insert&#xff09; 插入的value是json对象&#xff0c;以下示例循环添加了10个用户信息&#xff0c;字段可以是字符串、数值、对象、数组等。 通过VUE查看&am…

信号量保护之位带操作

大家好&#xff0c;上篇文章写的一个中断操作变量的问题&#xff0c;鱼鹰帮忙回复了&#xff0c;大家可以再看看这篇文章。好友让我看这段代码CM3位带操作如果存储器系统支持“锁定传送”&#xff08; lockedtransfers&#xff09;&#xff0c;或者总线上只有一个主机&#xff…

CCScene切换的所有特效(28种)以及设置屏幕横竖屏!

CCScene 对于使用cocos2d的童鞋肯定很熟悉&#xff0c;那么在使用 CCScene *s [CCScenenode];[s addChild: [restartAction() node]];[[CCDirectorsharedDirector]replaceScene:s]; 对scene进行场景&#xff08;CCLayout&#xff09;进行切换时&#xff0c;cocos2d提供了一…

关于MySqlConnection的一个特殊异常

最近给一个客户做一个项目&#xff0c;其中要与另外一个系统进行数据交换&#xff0c;而那个系统使用的是MySql&#xff0c;因此&#xff0c;从网上下载了一个MySql Connector&#xff0c;由于以前没有用过MySql&#xff0c;而且这个MySql服务器位于互联网上&#xff0c;因此&a…

文档设置及使用

原文链接&#xff1a;http://stynzf.blogbus.com/logs/15944928.html在上一篇文档&#xff08;《微软文档管理解决方案2007》之一&#xff1a;安装部署&#xff09;中&#xff0c;讲述了如何安装部署“文档管理解决方案” 这次我们通过将该子网站作为“Windows中文站”的一个文…

SSL和HTTPS

SSL说明&#xff1a; 1&#xff09;简介 SSL (Secure Socket Layer)为Netscape所研发&#xff0c;用以保障在Internet上数据传输之安全&#xff0c;利用数据加密(Encryption)技术&#xff0c;可确保数据在网络上之传输过程中不会被截取。它已被广泛地用于Web浏览器与服务器之间…

N32替换STM32,这些细节别忽略!

前言目前大形势影响&#xff0c;芯片价格日益上涨&#xff0c;采购周期变长&#xff0c;导致国产芯片替代进口芯片成为大趋势&#xff0c;该文章记录了使用国民技术的N32替换STM32的操作流程。话不多说&#xff0c;上步骤。一、工程配置1.安装硬件库硬件库为厂家提供的资料&…

五分钟读懂UML类图

平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道。实际上&#xff0c;UML类图中最常用到的元素五分钟就能掌握&#xff0c;下面赶紧来一起认识一下它吧&#xff1a; 一、类的属性的表示方式 在UML类图中&#xff0c;类使用包含类名、属性(field) 和方法(meth…

只会纯硬件,让我有点慌

纯硬件产品在市面上现在很少了&#xff0c;大多都带有单片机&#xff0c;比如智能路灯&#xff0c;智能门禁&#xff0c;智能家居等等。为了提高竞争力&#xff0c;单片机相关知识的学习必不可少。给大家推荐一本龙顺宇老师的新书《深入浅出STC8增强型51单片机进阶攻略》。&…

NSLog的常用格式说明小释

NSLog的格式如下所示: % 对象%d, %i整数%u 无符整形%f 浮点/双字 %.nf 带有n小数点的浮点/双字%x, %X二进制整数%o 八进制整数%zu size_t %p 指针%e 浮点/双字 (科学计算) %g 浮点/双字%s C字符串%.*s Pascal字符串%c 字符%C unichar %lld 64位长整数(long long) %llu 无符64位…

感觉自己好傻

前几天&#xff0c;一个微信微信朋友找我聊天。他在一家公司工作了4年多&#xff0c;但是这四年基本没有什么技术上的提升&#xff0c;做的事情也一些打杂的事情&#xff0c;核心技术在芯片原厂&#xff0c;软件SDK也是别人写好的&#xff0c;他能做的就是对接客户&#xff0c;…

图形处理单元(GPU)的演进

CPU 和 GPU好久没有更新了&#xff0c;最近在阅读 CUDA 相关的一些论文&#xff0c;因为都是碎片化阅读&#xff0c;容易导致读过后&#xff0c;可能过一段时间又忘记掉&#xff0c;所以决定抽时间翻译翻译阅读的论文&#xff0c;一方面增强自己记忆&#xff0c;一方面与大家共…

TCP通信过程大讨论

转载地址&#xff1a;http://www.cricode.com/3568.html 本文通过两个图来梳理TCP-IP协议相关知识。TCP通信过程包括三个步骤&#xff1a;建立TCP连接通道&#xff0c;传输数据&#xff0c;断开TCP连接通道。如图1所示&#xff0c;给出了TCP通信过程的示意图。 图1 TCP 三次握手…

Android 自定义View以及ValueAnimator学习

2019独角兽企业重金招聘Python工程师标准>>> 看了ApiDemo里面的BoucingBall&#xff0c;觉得挺好的&#xff0c;所以特地学习了一下&#xff0c;将代码注释后贴到这里&#xff0c;以便以后学习。 class BallView extends View implements ValueAnimator.AnimatorUpd…

固件工程师到底是干什么?

大家好&#xff0c;我是写代码的篮球球痴可能大家还不知道&#xff0c;我是一个写固件的工程师&#xff0c;今天和一个微信朋友聊天&#xff0c;他问我工作几年了&#xff0c;我说我工作10年了&#xff0c;而且这10年我都一直在从事嵌入式固件相关的工作。他猛的觉得很不可思议…

如何实现按键的短按、长按检测?

在电子产品中经常用到按键&#xff0c;尤其是经常需要MCU判断短按和长按这两种动作&#xff0c;本篇我们来专门聊下这个话题。只谈理论太无聊&#xff0c;我们还是结合着实际应用来说明。之前写过一篇关于《CH573第一篇&#xff1a;实现自拍杆蓝牙遥控器1》的文章&#xff0c;例…