-
“一定要有独立的人格、独立的思想
如果你有十项工作每项都会做百分之十,那么,在用人单位眼中,你什么都不会。
研究生扩招的速度是30%,也就意味着硕士学历贬值的速度是30%
大学期间一定要多去图书馆多去自习室。很多书你现在不读,一辈子就再也没有机会去读了。
一定要学会自我保护”
有些感触的,谢谢:)
-
我是在大四下学期的时候听说校内网的~~宿舍人和俺说,很神奇的,你可以找到你N久没有联系过得同学~~于是俺就试了一下,还真找到了,于是就注册了。。。
校内网的宣传方式?俺没有特别的注意过~~从现象上看,它是得到了很多在校学生的青睐,于是一传十十传百吧?怎么感觉像一个交友网站又像一个博客群似的呢?可能好处就在于,它的真实性吧,你可以知道对方的真实姓名,毕业院校,==这样在网络的虚幻中你会有一种安全感~~~上面会有很多很好玩的分享,但大多是娱乐消遣用的,不是一个讨论技术的地方~~~所以,俺在上面玩儿了一段时间之后就很少去了~~
以上就是使用感受。。。。
不过我认为LZ的想法是可行的,面向大学生进行宣传,毕竟那大多是迷茫的一群,思维还停留在应付考试。。。
比如,就可以利用校内网这个已经做大的平台宣传eeworld嘛~~
个人建议,仅供参考:)
-
本帖最后由 paulhyde 于 2014-9-15 04:17 编辑 不过,我的时间都不知道被谁偷走了,忙的要死还没结果~~~
每天40多页,俺基本上没戏~~~
不过还是要谢谢你:)
-
蓝眼狐你好,从程序来看,LZ好像是要按照指定片内地址进行读操作,流程如下:
1、发送起始信号
2、发送从地址(R/W为0)
3、等到确认
4、发送片内地址
5、等待确认
6、重复发送起始信号和从机地址(R/W为1)
7、等待确认
8、此时开始读数据
所以从流程上来看应该是没有问题的~以上都是从书上得来的
但是我并没有调试,所以也不清楚问题出在了哪里~~~很抱歉啊~~建议单步调试一下,用示波器看一看时许啥的对不对。
自己没有实践过可能说得也有不对的地方,欢迎指正。:)
-
变量的存储类型:
外部变量内部变量在所有函数之前定义的变量
在某个函数内定义的变量
全局变量
Global
开辟内存空间后自始至终都存在
其他文件需访问用extern声明
动态变量
Auto
先用先开辟,用完之后不保存
没有记忆
全局静态变量
Static
开辟内存空间后自始至终都存在
不同的是,
对于global,其他文件还可以访问
对于static,退出被定义文件后,值仍存在,但其他文件不可以访问
局部静态变量
Static
开辟内存空间后自始至终都存在
值保留,只有被定义函数可以访问,其他函数不能访问
寄存器变量
Register
作用范围同auto型变量
用于使用频率高的变量
但通用寄存器个数很有限,应慎用
Keil Cx51编译器还扩展了变量的数据类型:bit, sbit, sfr, sfr16
Keil Cx51还允许说明存储器类型:
存储器类型
说明
DATA
直接寻址的片内RAM(128B),访问速度最快
BDATA
可位寻址的片内RAM(16B)
IDATA
间接访问的片内RAM(256B)
PDATA
分页寻址的片外RAM,(256B)MOVX @Ri指令
XDATA
片外RAM(64KB),MOVX @DPTR指令
CODE
ROM,MOVC指令
这样,一个变量的属性就变成了三个:
存储类型 数据类型 存储器类型 变量名;
那么,我就有了这样的理解:
变量——等价于一个存储单元;
存储类型——规定了这个存储单元存在的时间;
数据类型——规定了这个存储单元的长度;
存储器类型——规定了这个存储单元的大概位置;
如果这个位置还要更精确一些,为了便于进行下一步的操作,还可以指定变量的绝对地址。
这样好像就有了一种立体感。
不过还想再问几个问题:
1、
越来越觉得编译器太神奇了,竟然能够进行翻译!一种用人脑来完成都要动脑筋的东西~~究竟是如何实现的?如果要了解的话是不是应该看编译看编译原理方面的书籍?
2、为什么通用寄存器的存取速度快?在结构上它和其他存储器比如内存有什么区别呢?
恩,也恩,把这些问题也提给自己,以后慢慢解决。自己的一点点理解,希望得到大家的指正,谢谢:)
-
对我来说,还是有难度的,不过还是要表示感谢~:)
-
原帖由 仙猫 于 2008-8-25 16:04 发表 [url=https://bbs.eeworld.com.cn/redirect.php?goto=findpost&pid=113190&ptid=64628][/url]
因为如把“主程序”和中断服务看作同一种东东的话,它就是优先级最低的中断服务——谁都能打断它,而且谁都不会被它 ...
脑袋转一转,还真是这样啊~~不过计算机这个东西现在就像在我面前的一座大山,俺得慢慢凿出一条路来才能一览众山小哦~~心急吃不了热豆腐,我觉得自己非得一点点都弄明白才行,不然总是感觉不能如鱼得水应用自如啊~~
谢谢仙猫!:P
-
就是说,局部变量可以静,也可以动。在高级语言中,只是我们给出命令,让编译器去分辨,然后进行合理分配?
那俺有个疑问,在用汇编语言编写程序的时候,对于存储空间的分配自己可以直接控制,这样定义的变量,只要自己不去覆盖都不会改变吧?那么都可以理解为高级语言中的全局变量喽?
“——这个光读文字去理解恐怕有些难,最好看个具体例子,或单步跟踪一下函数入口处的代码就看懂了。”
好,我调试的时候注意一下。
关于主程序:主程序最终变成机器码是什么样子的呢?和其他的程序段有什么不同吗?为什么叫做background(后台控制,是这样理解吗?)?
用汇编语言的话,自己是不是就是那个编译器呢?嘿~~~
-
哈,中断、堆栈,俺是不了解的,所以写出这么多,也是想把一些问题讨论的更明白些哈,谢谢仙猫!
对全局变量和static型变量我一直是有疑问的:
对于一个数据的定义,有两种属性:数据类型和存储类型;
一个变量的存储类型,从作用域角度分:局部变量和全局变量;
从存在时间来分:动态变量和静态变量;
而静态的意思是不是,在函数调用结束后仍保留原值?
全局变量是因为作用域比较长所以也能够保留很长时间,是这样吗?
这样看来,两者能实现的功能似乎相同啊?那么有什么区别呢?在什么情况下需要区别呢?
-
在编写单片机的程序中,中断服务程序中可以定义变量,如果希望下一次再进入中断的时候还可以保留变量原来的值,就需要把它设置为static型的。比如,定义一个bit型变量作为某种判断的标志。关于好不好的问题,以我现有的知识,好像是解决不了的,很抱歉
一个中断的处理过程大概是这样的:
1、现行指令结束,且没有更紧急的服务请求。
2、关CPU中断,CPU不能再响应其他任何中断源的中断请求。
3、保存中断点,通常是指保存程序计数器PC中的内容,把它压入到系统堆栈中,以便在终端服务完成后返回到原来的程序中去。
4、撤销设备的中断服务请求,如果这个中断源的中断请求不撤销的话,那么在开CPU中断后,它必然将再次请求终端服务。
5、保存硬件现场。
6、识别中断源。
7、改变设备的屏蔽状态。
8、转向中断服务程序入口,一般还要在中断服务程序中通过软件才能找到具体中断源的中断服务程序入口。
9、保存软件现场,主要指保存将要被中断服务程序破坏的通用寄存器中的内容等。
10、开CPU中断,CPU可以响应其他更高级中断源的终端服务请求,中断源之间可以实现中断嵌套。
11、执行中断服务程序。
12、关CPU中断,CPU不响应任何中断源的中断服务请求。在下一次开CPU中断之前,正在运行的程序不允许被中断。
13、恢复软件现场,恢复被中断服务程序破坏的通用寄存器中的内容等。
14、恢复屏蔽状态。
15、恢复硬件现场,主要指恢复处理机状态字PSW及堆栈指针SP等中的内容,准备返回中断点。
16、开CPU中断。
17、返回到中断点。
其中红字的部分一般用硬件实现,蓝字的部分一般用软件实现,其他可以用硬件也可以用软件实现。
从上面这个过程似乎可以得到,在执行中断服务程序之前,很多东西都被保护起来了,所以执行中断程序的时候不必担心破坏什么东西。我们可以对全局变量进行操作,也可以定义一个新的变量,这只是占用了一定的存储空间和时间的问题。
恩,我也不知道自己理解的对不对,毕竟计算机系统结构是很复杂的哈,还希望大家帮忙理解一哈。:)
-
本帖最后由 paulhyde 于 2014-9-15 03:36 编辑 觉得挺好的,适合自己的就是好的,谢谢啦~:)
-
即使是很了解刘翔的人,都不可能对他的伤病他的内心感同深受~
所以一些言语如“他肯定。。。他应该。。。”俺觉得都有点过于主观哦~
每个人都有作出选择的权利,即使他是一个公众人物。
请给刘翔一点点的空间,尊重刘翔的选择,刘翔也没有必要道歉!:)
-
开幕式只看了一遍,不好发表评论,准备买盘回来多看几遍~~~
对那个卷轴记忆深刻,中国的琴棋书画,基本都演绎到了~我爱中国,我爱中国文化!
将古老文化传承的好方法就是努力发展科技,这样,曾经的辉煌才能延续,路还很长,加油哈~
-
谢谢呀~
工程经验其实还是很重要滴~出差的机会较多,我喜欢~但并非你喜欢的的事情都能轮到你啊~:)
-
好像挺疼,疼也要尽量多吃绿色蔬菜~
菊花茶+柠檬片 maybe a good choice~
祝你好运 :)
-
谢谢你呀!
这段程序,我确实只能凑合着连蒙带猜能看明白~:)
关于可编程逻辑芯片,虽然听说过也有段时间了,但是从来也没望文生过生义...:L 上周末在聊天的过程中才知道CPLD大概是啥子意思...呵呵没关系,慢慢来咯,做事要分主次嘛~这毕竟不是我现在的主要任务~~
还是要向你表示感谢哈哈~~
-
表达的很清楚呀,让俺又明白了不少捏~~谢谢你!:)
“俺写的那几句 if 语句是指硬件处理。写错了,该写成寄存器+1,以符合你的51CPU”
为什么要这么说呢?
嘿嘿,那硬件是怎么处理的呢?天,晕了~~:)
-
“定时器设得越短,定时分辨率就越高,但软件开销就越大。”
软件开销是一个什么样的概念?(抱歉啊,没有找到满意的描述)
在这个具体例子中的软件开销就越大,是不是指,为了达到高的分辨率使得循环次数增多了?
“在实际应用中定时操作通常是以中断方式进行的,设计者应尽量减小软件开销”
没想明白这两句话的关系,嘿嘿嘿~~~
if (计数器≠0) {
if (计数器=1) {
置溢出;
}
计数器 = 计数器 - 1;
}
怎么是每个时钟对计数器减1呢?这里的计数器指的是什么呢?是给计数器中的寄存器所赋的值吗?
谢谢你~:)
-
有搜索功能呀,只是不太显眼嘿嘿,我第一次也找了好久呀,在右上角的一排小字当中,“会员”的右边“我的”的左边,找到了吗?
不过我也建议,把搜索弄得醒目一点,这样如果自己的疑问以前都有解决过了就不用再问了,找资料也方便。:P
-
对于这两句话又有了一些理解,不知道对不对:
1、可以将TH0 = -(计数脉冲个数>>8)理解为TH0 = 0 -(计数脉冲个数>>8),而十六进制的0 = 255 + 1 = (-1)+ 1,也就是说可以把十六进制的0理解为256个计数脉冲个数,这样就很容易明白这个式子了。
2、或者可以将TH0 = -(计数脉冲个数>>8)当作负数进行运算,即取正数(计数脉冲个数>>8)的补码,这样就可以得到正确的数据了。补码补码,就是互补的码啊。比如,-2 + 2 = 0 = 65534 + 2。不知道是不是可以这样理解?
另外,可以把这个延时程序改成每0.5ms、2ms==溢出一次。只要把f/1000改成f/2000或者f/500==就可以了,这样可以分别应用于需要更短的延时,或者需要延时稍长的时间,增加步进值从而减少循环次数,是不是可以节省时间呢?但是也不知道有没有必要这样做。反正这是思考的结果吧。