搜索
bottom↓
回复: 114

去了新公司看到源代码,看到这些时,我无法理解.

  [复制链接]

出0入0汤圆

发表于 2014-7-1 19:24:26 | 显示全部楼层 |阅读模式
        最近跳槽,新进一家公司有两个月了,然后今天上头弄了一份代码给我看,说熟悉下。
        我在程序里面看到了这些,以下是示例
        void keyscan()
        {
        if(K1==0)
          {       
           delayms(20);
           if(K1==0)//确认动作,执行程序
                {
                动作程序;
                }
        }
        }

        main()
        {
        delayms(100);//等上电稳定,时钟稳定
        各种初始化;
        while()
        {
        清看门狗;
        各种子程序;
        delayms(300);
        }
        }
       
       我看到的表情是 ,不过比起我在上一家公司好多了,上一家公司是这么写的。
        void ISR()//中断服务子程序,中断法(按键接在中断脚上)
        {
        if(K1==0)
          {       
           delayms(20);
           if(K1==0)//确认动作,执行程序
                {
                while(!K1);//等待按键松开
                动作程序;
                }
        }
        }
     那是我的表情是 ,这也能行。。。,后来我改掉了那个公司所有子程序。
       
    其实我看到这些,我现在更大的不知何去何从.  我无法理解,目前看到的代码,除了唯一看到一个采用定时器轮询法扫按键(本坛的状态机法等不包括在内),其它一律用delay();甚至中断while()等待松键
   有时庆兴自己啊,在这里泡了两年。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-7-1 19:31:23 | 显示全部楼层
.....................

出0入0汤圆

发表于 2014-7-1 19:33:28 | 显示全部楼层
工资是重点。

出0入0汤圆

 楼主| 发表于 2014-7-1 19:35:38 | 显示全部楼层
        其实有点迷茫啊,因为自己原来在小厂纯做硬件,自觉潜力不大,又在本坛学习了两年的软件,也有一定的功底,跳了两家公司想做软硬件,源码和架构(可以学完没有什么架构)都不好,更有接近大学老师教的那种, 顿时不知道该怎么办

出0入0汤圆

发表于 2014-7-1 19:49:35 | 显示全部楼层
o(︶︿︶)o 唉     换家公司吧

出0入0汤圆

发表于 2014-7-1 19:51:16 来自手机 | 显示全部楼层
能达到产品要求就行,不过自己不会写这样的代码

出0入0汤圆

发表于 2014-7-1 19:54:37 | 显示全部楼层
不管什么程序,能用可靠就行。
实际产品能用吗? 说不定人家就要这效果呢?

出0入10汤圆

发表于 2014-7-1 19:56:18 | 显示全部楼层
还好我一直用的定时器扫描案件

出0入0汤圆

发表于 2014-7-1 19:57:13 | 显示全部楼层
刚开始写都这样,随便找本书都这例程

出10入0汤圆

发表于 2014-7-1 20:02:02 | 显示全部楼层
我以前做的很烂的程序产品卖了很多,到现在依然更多卖。
现在代码好的,反而卖不了多少。
虽然每个产品出来用户都说好,但市场就是没有量。

出0入0汤圆

发表于 2014-7-1 20:05:11 | 显示全部楼层
能可靠实现功能就可以,没必要太纠结的。
大部分产品的功能都很简单,有时候没准最简单的程序就是最可靠的……
典型如带设置按键的通用定时器,设置一下延时时间,到点就驱动继电器输出……

出0入0汤圆

发表于 2014-7-1 20:05:26 | 显示全部楼层
见多了,不是所有人都知道用 时间片的办法 来多任务的. 而且也方便移植.
简单的产品功能对了 就好

出0入0汤圆

发表于 2014-7-1 20:09:30 来自手机 | 显示全部楼层
回头看看原来写的代码,都是一团乱麻

出0入0汤圆

发表于 2014-7-1 20:13:32 | 显示全部楼层
这种代码还需要看吗....

出0入0汤圆

发表于 2014-7-1 20:16:39 | 显示全部楼层
这样写...........实际产品会这样用吗?

出0入0汤圆

发表于 2014-7-1 20:18:19 | 显示全部楼层
99%……片轮到什么时候

出0入26汤圆

发表于 2014-7-1 20:21:35 | 显示全部楼层
#在这里快速回复# delayms

出0入26汤圆

发表于 2014-7-1 20:21:56 | 显示全部楼层
不如自己重新写吧。还来得快些

出0入8汤圆

发表于 2014-7-1 20:40:14 | 显示全部楼层
电工们怎么总是喜欢像孔乙己一样炫耀自己会认识多几个字呢,也许别人就是一LED灯在闪烁,MCU闲得蛋疼,用个延时程序也无可厚非呀。何苦非要用个定时器。
看过了觉得简单,或者程序写得烂,心里想一想,一笑而过算了吧。

出145入215汤圆

发表于 2014-7-1 20:40:15 | 显示全部楼层
适合初学者C入门学习。

出0入4汤圆

发表于 2014-7-1 20:58:13 | 显示全部楼层
在实现功能的前提下,稳定可靠就行。中断有不可预测性,如果MCU确实没什么事干,这种单线程的最好用。

出0入0汤圆

发表于 2014-7-1 20:59:53 | 显示全部楼层
我不覺得第一箇程序有甚麼問題。
尼瑪,又不是股票交易中心的處理器,十幾萬箇任務等着處理。老子就是等用戶按鍵。按鍵後幹活,不按就不幹活。這樣也要超時空併發性調度輪詢統籌機制嗎?
不過我喜歡click後動作,而非press後動作,所以我喜歡第一箇程序,加第二箇的等放開。

出0入0汤圆

发表于 2014-7-1 21:00:51 | 显示全部楼层
我想说的我之前的一个师兄就是这么干的,不过产品简单

出0入0汤圆

发表于 2014-7-1 21:01:46 | 显示全部楼层
  void keyscan()
        {
        if(K1==0)
          {      
           delayms(20);
           if(K1==0)//确认动作,执行程序
                {
                动作程序;
                }
        }
        }

请问这个程序有错误吗?!这个是书籍上标准的按键程序吧。
虽然用定时器定时扫描按键非常不错,就像本论坛上有介绍的程序一样。但也不能说上面的程序就是有问题?

出0入0汤圆

发表于 2014-7-1 21:03:39 | 显示全部楼层
任何时候,都允许有多种方法,每种方法都各有优点。看用在什么程序里。如果在RTOS里,上面的程序更是没有错的。

出0入0汤圆

发表于 2014-7-1 21:05:31 来自手机 | 显示全部楼层
qlb1234 发表于 2014-7-1 20:59
我不覺得第一箇程序有甚麼問題。
尼瑪,又不是股票交易中心的處理器,十幾萬箇任務等着處理。老子就是等用 ...

+1
其实无所谓的
关键是你要自己知道在干什么就行了

出0入0汤圆

发表于 2014-7-1 21:06:23 | 显示全部楼层
至少要上个OS吧

出0入0汤圆

发表于 2014-7-1 21:30:51 | 显示全部楼层
说实话,如果用汇编,还只会用delay。C语言的话,还好,在这里学了状态机。

出0入0汤圆

发表于 2014-7-1 21:38:13 | 显示全部楼层
怎么没上个linux或win系统呢?我的表情
刚进公司就认为前任没你行,德行啊

出0入0汤圆

发表于 2014-7-1 21:43:57 | 显示全部楼层
楼主思想不对。客户买的是产品,不是代码。

出0入0汤圆

发表于 2014-7-1 21:58:36 | 显示全部楼层
这没什么问题。产品正常就可了。目的是挣钱,好不

出0入0汤圆

发表于 2014-7-1 22:01:05 | 显示全部楼层
GunGun 发表于 2014-7-1 21:01
void keyscan()
        {
        if(K1==0)

没问题,只不过是浪费时间去消抖,白白占用CPU。(所以一般产品都不会这样用,效率太低了)
可以定时消抖。

出0入0汤圆

发表于 2014-7-1 22:07:14 | 显示全部楼层
算了,真的不想说什么。

出0入0汤圆

发表于 2014-7-1 22:08:44 | 显示全部楼层
只要产品大卖的,就是好程序。销售量为0的,程序再怎么又能说明什么问题。

出70入0汤圆

发表于 2014-7-1 22:12:56 | 显示全部楼层
鸠摩智 发表于 2014-7-1 20:40
电工们怎么总是喜欢像孔乙己一样炫耀自己会认识多几个字呢,也许别人就是一LED灯在闪烁,MCU闲得蛋疼,用个 ...

NO,这种代码是那种没有经过构思就直接下手写的人才写得出的,说到底这种人根本想不到那么深入,每写一一点代码就烧一次进去仿真看看是否已实现所需的功能。本来半天就可以写好并且半个小时就能调试完的,他们就用半个月,老是搞不明白为啥变量或数组里面的值会自己变?为啥程序没有按照自己设计意图跑呢? 最让人头痛的是,折腾了大半年出了测试OK的程序,产品卖得多起来之后,就凸现了一些很奇怪的问题,有一定比列产品会出现老是在乱发数据,或者功能出现异常。客户开始投诉了,不得不去找原因了,最后跟领导说,因程序从头到尾都没有给这些变量赋这种值,可以确定这款MCU的寄存器有被篡改的现象,领导一听,说:那赶紧找MCU厂家解决去。。。。 这帮傻蛋周旋了一大圈,几乎所有相关的领导、所有相关的部门(尤其是质量部和采购部)都在为这个弄得焦头烂额,最终才发现原来是自己的程序”不行“引起的。。。。
    以上是我的所见所闻,代码真不能乱写,想好才写,当然你也可以这么想:打份工,何必那么较真,出了事也不用自己负责。

出0入13汤圆

发表于 2014-7-1 22:22:12 | 显示全部楼层
参与交换机开发时那代码大的人都没法看,几十万行的代码把人都搞晕了!那代码确实含金量很高,领先国内很多年,却不适合中国的开发团队。

出0入8汤圆

发表于 2014-7-1 22:38:31 | 显示全部楼层
gshuang1 发表于 2014-7-1 22:12
NO,这种代码是那种没有经过构思就直接下手写的人才写得出的,说到底这种人根本想不到那么深入,每写一一 ...

哥们我觉得我们说的根本不是同一件事吧
也许真的就只需要一个单线程的运行,在延时的时候不需要做任何的事情,根本就不需要多用上一个定时器,何必要绞尽脑汁的构思个定时器的延时出来?
想与不想是一件事情,应不应该又是另外一个事情了吧

出0入0汤圆

发表于 2014-7-1 22:40:47 来自手机 | 显示全部楼层
不知我说的对不对,从最终产品角度说,只要可靠就行,而且是很简单的去实现

出0入0汤圆

发表于 2014-7-1 22:50:48 | 显示全部楼层
代码没问题, 能工作, 但是能从代码中看到一个人的水平与态度.
习惯了优秀, 会受不了平庸.

出0入0汤圆

发表于 2014-7-1 22:56:51 | 显示全部楼层
只要可靠就行,而且是很简单的去实现
——————————————————
简单的实现且可靠就是真理。其它一切都是浮云。

出0入10汤圆

发表于 2014-7-1 22:59:15 | 显示全部楼层
没觉得有啥不对。我经常这样干。按键属于慢速设备,循环检测就就可以了。实时性高的放中断里处理就可以了。

出0入10汤圆

发表于 2014-7-1 23:00:45 | 显示全部楼层
不过我一般是按键扫描只扫描按键并返回按键值,在另外的函数里处理。

出0入0汤圆

发表于 2014-7-1 23:09:38 | 显示全部楼层
DevLabs 发表于 2014-7-1 22:50
代码没问题, 能工作, 但是能从代码中看到一个人的水平与态度.
习惯了优秀, 会受不了平庸. ...

优秀是相对来说的。我就用软件延时,关闭定时器,从而减少功耗。从这个角度来看,你敢说开定时器就是优秀吗?

出0入0汤圆

发表于 2014-7-1 23:21:59 | 显示全部楼层
稳定就好

出0入0汤圆

发表于 2014-7-1 23:23:06 | 显示全部楼层
not_at_all 发表于 2014-7-1 23:09
优秀是相对来说的。我就用软件延时,关闭定时器,从而减少功耗。从这个角度来看,你敢说开定时器就是优秀 ...

有理,功耗有时候是必须考虑的问题。还是要具体问题具体分析。

出0入0汤圆

发表于 2014-7-1 23:24:57 | 显示全部楼层
把程序分成按1s执行的,ms执行的,10ms执行的,100ms执行的和主函数,中断函数,按键10ms轮询,轮询五次一样的话就认为按下

出0入4汤圆

发表于 2014-7-1 23:28:15 | 显示全部楼层
汗 这个应该在简单的场合不会出什么大问题

不过通常人家都不会这么写的,LZ这公司的程序猿太菜了吧 。。。

出0入0汤圆

发表于 2014-7-1 23:30:34 | 显示全部楼层
这个,有看点,值得学习

出0入0汤圆

发表于 2014-7-1 23:34:15 | 显示全部楼层
根据实际情况符合相关要求即可 没有必要上纲上线。

出0入26汤圆

发表于 2014-7-2 07:56:00 来自手机 | 显示全部楼层
文无第一,看谁都觉得是傻X

出0入0汤圆

发表于 2014-7-2 08:04:24 | 显示全部楼层
能正常工作就好, 可能有时只是效率差些, 日后可扩展性差些!

出0入0汤圆

发表于 2014-7-2 08:07:03 | 显示全部楼层
lizengmao 发表于 2014-7-2 07:56
文无第一,看谁都觉得是傻X

精辟……最深刻了……

功能实现就好,我倒是觉得,有时候这样写比加OS来得简单,不容易出BUG

出0入0汤圆

 楼主| 发表于 2014-7-2 08:09:27 | 显示全部楼层
        我觉得大家说的都有道理。  产品只要稳定就行了。 慢速来说根本不需要谈论非常高的实时性。   

出0入0汤圆

发表于 2014-7-2 08:24:07 | 显示全部楼层
小公司请刚毕业的人一般都这样写,程序也稳定些,路径不多嘛.

出0入42汤圆

发表于 2014-7-2 09:24:11 | 显示全部楼层
如果是代码库里的话,这中代码就是垃圾的。
如果是特定产品的话,那个无所谓了。

出0入0汤圆

发表于 2014-7-2 09:29:28 | 显示全部楼层
一个字:稳定   哈哈                        

出0入143汤圆

发表于 2014-7-2 09:36:01 | 显示全部楼层
每个人都可以回头看看自己以前的程序,要是做小家电和消费类的,应该都有相同的经历,要求简单,程序 方便  个人见解

出0入0汤圆

发表于 2014-7-2 10:03:02 | 显示全部楼层
楼主自己的水平提高是重要的,其他都是浮云。

出0入0汤圆

发表于 2014-7-2 10:08:30 | 显示全部楼层
可能他不想让程序跑那么快,所以在主循环里delay了一下

出0入0汤圆

发表于 2014-7-2 10:21:49 | 显示全部楼层
GunGun 发表于 2014-7-1 22:56
只要可靠就行,而且是很简单的去实现
——————————————————
简单的实现且可靠就是真理。其 ...

是啊,越简单的东西就越不会出问题,我一直相信这个道理

出0入0汤圆

发表于 2014-7-2 10:47:56 | 显示全部楼层
用个定时器就复杂了吗?就驾驭不了? 只能说这样编程的人根本没写过超过1000行的代码.

出0入4汤圆

发表于 2014-7-2 10:54:31 | 显示全部楼层
大学老师教的都是后一种写法。可能他们那个年代要求的是能工作就行,但是现在我们要求的更高一些,所以不能说他们的程序不对什么的。

出0入0汤圆

发表于 2014-7-2 10:56:22 | 显示全部楼层
嗯,确实是要保持一颗平常心。
经常见到新人,一上来就指点这指点那的,说这也不好,那也不够新,都不够高科技的。
都没理解别人做的什么,为什么这么做,就先说不好了。
这就是所谓的年轻人的浮躁。
很多时候,我们都是处于各种原因选择不同的解决方案的。抛开实际环境说好坏,那就是扯淡。

出0入0汤圆

发表于 2014-7-2 11:03:00 | 显示全部楼层
没用过OS,不知道多任务调度的时候,协调不好会不会更乱。
感觉还是产品稳定性最重要,用户是不看代码的,要的是功能。

出0入0汤圆

发表于 2014-7-2 11:03:45 | 显示全部楼层
这些太次了,,,,

出0入34汤圆

发表于 2014-7-2 11:07:37 | 显示全部楼层
简单就好,这样写没问题,前提是MCU有空闲时间,和实现你所需的功能,单一线程,最可靠,无必要去弄中断,定时什么的。。还移植方便,并不是非得要用上MCU的所有模块才算最佳,这样只不过满足了虚荣心

出0入0汤圆

发表于 2014-7-2 11:29:00 | 显示全部楼层
功能实现了不就对了,难道同一个产品用DSP就比用51来做高档?

出0入4汤圆

发表于 2014-7-2 11:32:22 | 显示全部楼层

  工资是重点。

出0入4汤圆

发表于 2014-7-2 13:03:45 | 显示全部楼层
mark                       

出0入0汤圆

发表于 2014-7-2 13:39:18 | 显示全部楼层
写的好能干嘛不如产品做的好
对于老板要的是葫芦不会看代码好不好的……
对于总工肯定会说玩技术!=做产品……
对于自己码好又不是待遇好……
对于我们从不评价别人的技术……

出0入0汤圆

发表于 2014-7-2 14:42:02 | 显示全部楼层
qlb1234 发表于 2014-7-1 20:59
我不覺得第一箇程序有甚麼問題。
尼瑪,又不是股票交易中心的處理器,十幾萬箇任務等着處理。老子就是等用 ...

第一段代码按键按下后会反复多次运行"动作程序",第二段代码按键一次只执行一次"动作程序"

出0入0汤圆

发表于 2014-7-2 14:51:49 | 显示全部楼层
没觉得得什么不好,本来就执行一些简单的任务,非要加状态机干嘛呢?

出0入0汤圆

发表于 2014-7-2 15:10:50 | 显示全部楼层
楼主能发出自己认为改写的最佳的代码让大家看看吗?  有些东西真的没有必要太纠结,有的可能是cpu太闲了,让他在keyscan干点活也有什么不可以啊

出130入129汤圆

发表于 2014-7-2 15:17:23 | 显示全部楼层
godwot 发表于 2014-7-2 14:42
第一段代码按键按下后会反复多次运行"动作程序",第二段代码按键一次只执行一次"动作程序" ...

给大家讲解下第一段代码怎么反复运行?

出0入0汤圆

发表于 2014-7-2 15:17:24 | 显示全部楼层
我一般优先delay,timer没中断,还要自己去查,够用就行。优先宏而不是call子程序,因为没堆栈,跳转入栈出栈神马的都要知己做。

出0入0汤圆

发表于 2014-7-2 15:48:46 | 显示全部楼层
稳定并量产,没有投诉说是因为软件出问题的产品就是成功的,太纠结于“技术”的工程师永远不知道如何做好一个好产品,只能做精品,而精品在国内成本又是这么高,混不下去

出0入0汤圆

发表于 2014-7-2 15:58:32 | 显示全部楼层
我的程序一般不会出现Delay功能的函数,不过系统初始化或者切换时钟时也许会用到

出0入0汤圆

发表于 2014-7-2 15:58:44 来自手机 | 显示全部楼层
shower.xu 发表于 2014-7-2 15:17
我一般优先delay,timer没中断,还要自己去查,够用就行。优先宏而不是call子程序,因为没堆栈,跳转入栈出 ...

什么芯片啊?

出0入0汤圆

发表于 2014-7-2 16:17:30 | 显示全部楼层
这是我编写某单总线发送数据、接收数据并进行响应的函数。你看看你用定时器,是不是更乱。
发送:
void HDQ_WRITE(uchar val)  //写一个字节,低位在前发送,正确无误无需再检查2014.01.16
{
        uchar i;
        uchar temp;
        Delay10us(7);     //如果直接发送的话,寄存器地址的第8个数字脉冲没有足够延时
        for(i=0;i<8;i++)  //导致从低电平变成高电平的时间只有数us。所以延时70us
        {
           temp=val>>i;
           temp&=0x01;
                   HDQ_TXD=1;
           Delay10us(3);      //30us
           if(temp)HDQ_TXD=0;
           Delay10us(8);     //80us
                   HDQ_TXD=0;
           Delay10us(8);     //80us
        }
}
接收并响应:
void exint1() interrupt 2       //INT1中断入口,读取总线数据的寄存器地址。无误无需再检查2014.01.16
{
    uchar TMPH,TMPL;
    TMPH=0;     //高电平计数器
   TMPL=0;     //低电平计数器
   _nop_();
    _nop_();
    _nop_();
   while(HDQ_RXD==0)   //进中断后,等待第一个低电平结束,准备测量下一个高电平有效数据的宽度
  {
       Delay10us(1);
      TMPL++;
      if(TMPL>25)break;  //为防止长时间失去响应设置的中断点
  }
    _nop_();             //进中断的低电平是TBR信号产生的,注意反向
   _nop_();
    _nop_();
  while(HDQ_RXD)       //对高电平的宽度进行测量,以10us进行计数
  {
         Delay10us(1);
         TMPH++;
         if(TMPH>25)break;    //为防止长时间失去响应设置的中断点
  }
  if(TMPH<6)ADDR=ADDR|(0x01<<STEP);    //如果测得的宽度小于60us则数据位是1
  STEP++;
  if(STEP==8)          //第8个高电平后发送对应的数据
  {
                 EX1=0;          //关闭中断1
                 if(ADDR==0x3)M37512=0;    //判断不是M37512芯片
         if(ADDR==0x2)M37512=0;
         if(ADDR==0x5)M37512=0;
         if(ADDR==0x17)M37512=0;         
         HDQ_WRITE(Pana_data[ADDR]);  //根据主机发来的寄存器地址,发出对应的数据
           Delay10us(8);            
         STEP=0;
         ADDR=0;
                 IE1=0;         //清除中断1标志位
           EX1=1;          //使能中断1
     }
  if(TMPH>25||TMPL>25)STEP=0;      //如果不是正常进入的中断,则清除计数以便从头再来
}

出0入0汤圆

发表于 2014-7-2 16:54:13 | 显示全部楼层

4bit otp               

出0入0汤圆

发表于 2014-7-2 16:58:22 | 显示全部楼层
一般来说中断不能用延时嘛。。这种想法是正确滴,
但是反过来说,中断中是不是一定不能用延时,对延时函数对简单的单片机本身来说木有啥区别。
系统对实时性要求不高,对运行效率没要求,中断直接延时看起来程序简单,也没啥不行的。

出0入0汤圆

发表于 2014-7-2 17:08:38 | 显示全部楼层
玩的深   未必赚的也深

出0入0汤圆

发表于 2014-7-2 17:09:32 | 显示全部楼层
就是新手写的代码而已,有啥?

出0入0汤圆

发表于 2014-7-2 18:45:53 | 显示全部楼层
产品和技术本来就不是同一回事。产品卖得好,代码写的烂很正常。
好多人都把这个概念弄混了。看问题还是先定好角度。

出70入0汤圆

发表于 2014-7-2 21:21:15 | 显示全部楼层
鸠摩智 发表于 2014-7-1 22:38
哥们我觉得我们说的根本不是同一件事吧
也许真的就只需要一个单线程的运行,在延时的时候不需要做任何的 ...

根本就是同一回事,加个定时器啥子都简单,把代码一次性写出来,烧进去一试就OK,何必搞出个delay来呢,调那个延时都要花很久,偏偏搞那么复杂,以后加功能不得不动大手术。

出0入0汤圆

发表于 2014-7-2 21:28:56 | 显示全部楼层
没事,我见过博士老师出的数码管扫描驱动题目,限流电阻在位驱动上

出0入8汤圆

发表于 2014-7-3 09:04:12 | 显示全部楼层
gshuang1 发表于 2014-7-2 21:21
根本就是同一回事,加个定时器啥子都简单,把代码一次性写出来,烧进去一试就OK,何必搞出个delay来呢, ...

个人见解吧,每个人有自己的习惯,如前面所说,单纯的一个跑马灯程序,我是不建议动用定时器的,至少不会强制要求。
作为电工,真没必要见到直角LAYOUT,软件延时这些就跳起来,指手画脚的批评这不好那不好。
自己做得顺眼的也不见得就高大上了。
1Hz的信号走线直角,告诉别人要考虑10GHz时候的扩展,非要在前人稳定的产品上作变更,不找抽么。

出0入0汤圆

发表于 2014-7-3 09:11:00 | 显示全部楼层
关心这个公司的待遇。。。。。。。

出0入0汤圆

发表于 2014-7-3 09:13:19 | 显示全部楼层
GunGun 发表于 2014-7-1 21:01
void keyscan()
        {
        if(K1==0)

这个程序看起来挺笨的
但是 好理解 不容易出问题。。。。。。

出0入0汤圆

发表于 2014-7-3 09:17:55 | 显示全部楼层
产品能跑起来,经得住老板的各种虐待。就OK了,

出0入0汤圆

发表于 2014-7-3 09:19:01 | 显示全部楼层
315936392 发表于 2014-7-3 09:13
这个程序看起来挺笨的
但是 好理解 不容易出问题。。。。。。

大巧若拙,大知若愚。

出0入0汤圆

发表于 2014-7-3 09:30:08 | 显示全部楼层
在小公司,代码的水平取决于固件部分最高决策者的水平,只要他看着不爽的或者思路不一样的都得干掉!!!!

出0入0汤圆

发表于 2014-7-3 09:31:48 | 显示全部楼层
杀鸡焉用牛刀

出0入0汤圆

发表于 2014-7-3 10:12:10 | 显示全部楼层
求推荐一些高水平的代码范例

出0入0汤圆

发表于 2014-7-3 10:28:00 | 显示全部楼层
用定时器扫描。。。。

出0入0汤圆

发表于 2014-7-3 10:43:59 | 显示全部楼层
一个初中的单片机爱好者同楼上同求高水平的代码

出0入0汤圆

发表于 2014-7-3 10:55:58 | 显示全部楼层
本帖最后由 qlb1234 于 2014-7-3 10:57 编辑
68336016 发表于 2014-7-2 15:17
给大家讲解下第一段代码怎么反复运行?


確實是有可能的。
  1. bool key_scan(void)
  2. {
  3.     if(PIN_A1 == 1)
  4.     {
  5.         delay_ms(20);
  6.         if(PIN_A1 == 1)
  7.         {
  8.             return true;
  9.         }
  10.     }
  11.     return false;
  12. }

  13. void work(void);

  14. void main(void)
  15. {
  16.     while(1)
  17.     {
  18.         bool key = key_scan();
  19.         if(key == true)
  20.         {
  21.             work();
  22.         }
  23.     }
  24. }
复制代码


假如work()的執行時間衹需要1us,可以忽略,那麼,如果用戶按下40ms或更長的時間,work()就會重複執行了。

出130入129汤圆

发表于 2014-7-3 11:02:37 | 显示全部楼层
qlb1234 发表于 2014-7-3 10:55
確實是有可能的。

也是,代码使用键值后没有立即清除。

出0入0汤圆

发表于 2014-7-3 11:19:58 | 显示全部楼层
68336016 发表于 2014-7-3 11:02
也是,代码使用键值后没有立即清除。

清除了也沒有用,下次輪迴又去檢測了。
要不出現重複執行,簡單點就死等用戶放開。
不過死等,程序就停在等那裏了。這時,高大上的人又會跳出來指手劃腳。所以,要爲“按鍵被按下”這箇事件設箇標誌位,然後再在掃描按鍵的函數裏加上判斷這箇標誌位是不是被舉起了,被舉起再看是不是按鍵被鬆開了。
一大堆亂七八糟。

一句到尾,想做複習的工作,又想用低端的MCU節省成本,代碼必然變得複習。一味想在物料上節省,一邊嚮程序員施壓,抱怨代碼複習、難維護的老闆,都是走狗、漢奸、賣國賊。明明再加箇幾角錢的MCU,就可以實現“多線程”,超穩定,代碼超簡單,超易維護,卻偏嚮虎山行。尼瑪,又不是奧林匹克處理器競賽,一定要這麼複習纔安樂,纔叫高水平嗎?

出0入0汤圆

 楼主| 发表于 2014-7-3 15:17:57 | 显示全部楼层
        竟然这么多楼了,大体看了下回复, 用delayms()代码并不是不行,看需求,稳定就好。 小产品完全可用。   存在即合理,肯定有必定的需求
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 03:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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