myfaith
发表于 2007-12-3 19:58
LZ只会唬人...
iC921
发表于 2007-12-3 21:09
人越多,楼越空
程序匠人
发表于 2007-12-3 21:34
刚把这帖推荐到首页,进来一看,有点失望
原来想补补OS的课,结果遇到lz大忽悠了。<br /><br />这道题如果OS能做到,匠人也能裸奔做到,连c也不用,就用汇编(而且也许可以用最便宜的4位机芯片做到)。
程序匠人
发表于 2007-12-3 21:40
补充一个观点
os比裸奔高级,但是不代表用OS的人比裸奔的人高级;<br />c比asm高级,但是不代表用C的人比用ASM的人高级;<br />电子CAD比手工绘图高级,但是不代表用CAD的人比手工绘图的人高级;<br />傻瓜相机比非傻瓜相机高级,但是不代表用傻瓜相机的人比用非傻瓜相机的人摄影技术更高。<br /><br />有时,情况可能正好相反。<br /><br />不要把新技术和高技术当作炫耀的本钱。我们只是有幸站在了巨人的肩膀上而已。<br /><br />(修改原因:漏字)<br />
xwj
发表于 2007-12-3 21:46
呵呵,匠人姐姐好久没来了,咋一来就扔砖头呢?
https://bbs.21ic.com/upfiles/img/200712/200712321466793.gif
程序匠人
发表于 2007-12-3 21:54
呵呵,强帖总是要留个名嘛
混个脸熟。<br />
拾梦人
发表于 2007-12-3 22:03
应用级的例子不能提高国人地位
如题<br /><br />如果我出一个军工的题目,比如:不限制使用的51CPU数量,给你一个信号源,你来做一个挑战极限采样速率、且稳定可靠的系统。这时候OS只会成为障碍,很简单,高频才能上OS,而高频又意味着硬件不可靠,在恶劣环境下,多核低频才是好的设计。而且这样的设计必须借助OS的理论才能实现,不光是一个片子内部的OS理论,还有集群理论,再好的单机OS都无能为力。<br /><br />还是那句话,如果你甘心做一辈子低端应用,就拒绝裸奔吧。出题是没意义的。。。
hq_y
发表于 2007-12-3 22:04
匠人媚媚还需要混个脸熟吗?呵呵~~~~~~~~
os比裸奔高级,但是不代表用OS的人比裸奔的人高级;<br /><br />同意;<br /><br />c比asm高级,但是不代表用C的人比用ASM的人高级;<br /><br />犹豫~~~~~~~<br /><br />电子CAD比手工绘图高级,但是不代表用CAD的人比手工绘图的人高级;<br /><br />不同意~~~~~~~`<br /><br />傻瓜相机比非傻瓜相机高级,<br /><br />好像现在都是数码相机了;<br />分成专业型数码相机和业余数码相机;<br /><br /><br />但是不代表用傻瓜相机的人比用非傻瓜相机的人摄影技术更高。<br /><br />同意~~~~~~~`<br /><br />
wxj1952
发表于 2007-12-3 22:05
哥们,才三天。
多留些日子才好。(多好的应聘机会....)题目不复杂,没有故意刁难似地来个一二十个任务让人裸奔/OS。<br /><br />好像听谁说“此题无解,现实中根本不可能有2.8秒长的任务。出题不合理!”<br /><br />我刚才想了一下:时间坐标是相对的,如果把题目中的时间坐标缩小100倍,也就是F05运行5ms,F07x运行7ms/或者不分割连续运行28ms,时钟变秒表,合理了?“有解”了?这样的程序解有什么不一样?<br /> 马上又有人要站出来说我错了......<br /><br /><br />贴出答案后,不扔砖头,也把自己不同的答案贴出来,是真君子。非常赞同。<br /> 不过应该贴在我前面,好处是:也许有猎头通过此帖寻人才呢。<br /><br />
dai_weis
发表于 2007-12-3 22:05
150楼了,留个纪念
好不容易弄到的,呵呵,这么高的楼找些干货不容易,别无他意,学习一下OS和裸奔的思想,尽管我还停留在裸奔上面,不过实在是MCU的内存太小客户太抠,放不下OS只能大冷的天奔跑了。
IceAge
发表于 2007-12-3 22:10
我还是没看懂题目的意思
这与 os 或者没有 os 有什么关系?当然,如果有 os, 这道为 os 量身定做的题很简单,不过裸奔也不难。我不想写程序了,给出一点思路:<br /><br />假设只允许使用一个中断(两个这题就没有意义了),那么只要中断能重入即可。也就是说,只要保护好计时的 500 ms 任务的现场,就能满足要求。对 51,有一点小小的技巧,就是 reti 的处理, 调用一次可以恢复中断以重入。<br /><br />Timer_Interrupt:<br /> acall _reset_timer ; 开放中断, reset timer. <br /> acall Task_500ms ;调用 计时任务<br /> if (timeout(60)) goto _task_700ms<br /> ret<br /><br />_task_700ms<br /> acall F071<br /> ....<br /> acall F075<br /> ret<br /><br />_reset_timer:<br /> ...<br /> reti<br /><br />这里裸奔的关键之处是让 F071 等变成了 背景 程序,定时器的作用仅仅是启动他们,之后相当于 定时中断 只运行 一个 500ms 的程序。如果认为 500 ms 太长,可以用状态机原理把它分成若干时间片。<br /><br />不过,我个人认为:如果资源允许,os 显然会比 裸奔 更好,尽管初期需要花费相当的苦工,但未来会事半功倍。<br /><br />
平常人
发表于 2007-12-3 22:11
LZ把时间坐标缩小100倍,是不是准备给自己找台阶下?
?????
iC921
发表于 2007-12-3 22:19
估计匠人看到我的142楼更失望?
看上去,这个问题太让人关心了。可惜没那个水平,俺算是目不识丁呢……闪
aihe
发表于 2007-12-3 22:30
楼主意思就是,分片执行嘛
分片执行不用OS也能做,说实话什么是OS我也不清楚<br />只知道每个程序只能运行若干时间<br />看楼主的意思好像每个函数都是独占运行<br />如果不是独占运行的话,网上大多数大虾都能做<br />如果是独占运行,在运行函数1~4时,函数5不知道怎么运行<br />如果在运行1~4时,可以不运行5时,我会考虑这样<br />既然你运行2.8秒固定,我以后补偿可以吧<br />再说我拿个外接时钟芯片,一分钟报警一次也可以吧,不算两个MCU吧<br />其实,我觉得与OS相干不大<br />我是学不成者,希望各位不要见笑
wxj1952
发表于 2007-12-3 22:59
看了144楼
农民周正龙用的什么照相机,让中国的高科技专家/顶尖级人才那么没面子。而且忽悠了全世界。
athlon64fx
发表于 2007-12-3 23:00
re:
无解就是无解,题本身都自相矛盾,还不承认。<br /><br />1、用单CPU做一个精确的时钟。<br />2、以此时钟为基准,每秒钟运行一次一个500ms开销的任务,设其为F05()。<br /><br />既然楼主把主帖改了,要改就改得完善一点嘛,一步到位,建议再改改, 好帖出答案。
zusen
发表于 2007-12-3 23:46
呵呵,不能被打断~~
就是说不能用中断,,,<br />敢问楼主,用到中断就算不上裸跑了?、<br />你本身规则已经超出来裸跑的定义了<br /><br />就如OS里没有时钟节拍
mapleyang
发表于 2007-12-3 23:48
匠人是个mm?
咋可能呢?<br />为啥有人叫匠人姐姐,有人叫匠人mm的?<br />
IceAge
发表于 2007-12-4 01:35
不能被打断? os 能做到的,裸奔绝对也能做到
os 的好处并不是体现在这样的地方,而是可以在搭建复杂的程序框架方面节省很多的精力。搂主的这个题目出的不好,不能很好的表达 os 的优势所在,不过,我想在一个论坛里,很难有一个题目能表达os 的优势。<br /><br />不能被打断,也很简单,时钟任务夹在F071(),F072(),F073(),F074()之间既可。<br /><br />int task_state = 0;<br />int timer = 60;<br /><br />One_Second_Timer() <br />{<br /> UpdateClock();<br /> switch (task_state) {<br /> case 0: <br /> Task_500ms();<br /> if (--timer == 0) {<br /> timer = 60;<br /> task_state++;<br /> }<br /> break; <br /> <br /> case 1: <br /> F071(); task_state++; break;<br /> case 2: <br /> F072(); task_state++; break;<br /> case 3: <br /> F073(); task_state++; break;<br /> case 4: <br /> F074(); task_state=0; break;<br /> }<br />}<br />
IceAge
发表于 2007-12-4 01:39
timer = 60 应为 timer = 56