打印

初学c语言遇到的问题

[复制链接]
1839|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
华仔2007|  楼主 | 2010-4-1 17:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第二个项目的pcb还没有到,正在寻找第三个项目,准备使用c语言,找了本教程,正在学习,遇到点问题,望大家指点迷津
<1>
void delay_us(unsigned int n)
{ if (n == 0)
  {
   return ;
  }
  while (--n);
}
这是网上找的一个延时函数,由一个if判断语句和一个while循环语句构成,比如说n=5,首先判断n是否等于0,结果不等于0,if后面大括号里的内容不执行,然后判断while小括号里的内容为真,执行while循环体,但是while后面没有循环体,这时函数已经执行完了,应该返回主程序啊,如何实现延时呢
<2>
以前用汇编语言编写LCD12864程序会使用DB在程序存储器中开辟一部分空间来存放字库或者图片,如果使用c语言编程,书上的程序定义了一个const类型的数组存放字库(常量类型),该常量数组肯定会占用一定的ROM空间,但是会不会占用RAM空间呢?

相关帖子

沙发
学海泛舟| | 2010-4-1 17:48 | 只看该作者
1.所谓的延时功能,就是让CPU执行N次空操作,来花费一定的时间。从而起到延时的效果。

2.不太清楚,用的时候从ROM里调用吧,可能会占用一定。

使用特权

评论回复
板凳
hgjinwei| | 2010-4-1 19:44 | 只看该作者
<1>  while(-- n) ;
         在 n 没到 0 时是不会停止的, 相当于 while(-- n) {/* 空操作 */ }

<2> 对于单片机程序而言, const 全局变量会被编译到程序区,也就是说它是存储于ROM空间的,不会占用RAM,其他程序不清楚。

使用特权

评论回复
地板
hyg1984| | 2010-4-1 19:53 | 只看该作者
如果是短延时,直接while(--n);好了,干嘛还要函数?

如果是长延时,最好用定时器。

使用特权

评论回复
5
ejack| | 2010-4-1 20:39 | 只看该作者
防止形参带0进来,由于先自减而变成了延时65535。

使用特权

评论回复
6
efen| | 2010-4-1 23:34 | 只看该作者
防止形参带0进来,由于先自减而变成了延时65535。
ejack 发表于 2010-4-1 20:39
mark

使用特权

评论回复
7
rockli| | 2010-4-2 10:53 | 只看该作者
keil c51里面用 code 关键词 定义在分配Rom里面的数表

使用特权

评论回复
8
zhangjinboxp| | 2010-4-2 12:19 | 只看该作者
while(){}有一个通俗的理解,反复执行{},直到()里面的值为非或者0,然后结束此语句。

使用特权

评论回复
9
华仔2007|  楼主 | 2010-4-2 14:21 | 只看该作者
3# hgjinwei
明白了
while(--n)相当于while(--n){;}
可以起到延时效果

使用特权

评论回复
10
ym2008| | 2010-4-2 15:32 | 只看该作者
当--n非零时,执行{;},起到延时的作用。

使用特权

评论回复
11
houhyousei| | 2010-4-2 15:37 | 只看该作者
:lol

使用特权

评论回复
12
飞言走笔| | 2010-4-2 15:52 | 只看该作者
1. 您可以反汇编,看下汇编的代码
2. const会把数组放到ROM 里

使用特权

评论回复
13
华仔2007|  楼主 | 2010-4-5 21:44 | 只看该作者
谢谢各位 我明白了
关于第二个问题开始我是这么理解的
const类型的数组肯定会占用一定的ROM空间,但是作为数组又会占用同样大小的RAM空间,这样太耗资源了,现在我明白了
结贴 给分

使用特权

评论回复
14
ai1988121| | 2010-4-5 22:45 | 只看该作者
不懂
会不会形成死循环啊

使用特权

评论回复
15
ai1988121| | 2010-4-5 22:46 | 只看该作者
当n=0,难道不是个死循环吗

使用特权

评论回复
16
音乐乐乐| | 2010-4-6 10:17 | 只看该作者
前边的if多此一举吧
直接改成 while(n--);不就可以了?

使用特权

评论回复
17
xfgood3872| | 2010-4-7 20:29 | 只看该作者
;P

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

83

帖子

0

粉丝