搜索
bottom↓
回复: 2

刚买了傻孩子的书,第一个范例有两个小疑问,谢谢

[复制链接]

出0入0汤圆

发表于 2008-7-10 20:16:45 | 显示全部楼层 |阅读模式
傻孩子的书是使用ICCAVR的,我将它移入到GCC里了,运行通过。

#include <avr/io.h>

void Delay_mS(unsigned int Time)
{
    unsigned char n;
    while(Time>0)
    {
        for (n=1;n<187;n++)
        {
            asm("nop");
        }
        Time--;
    }
}

int main (void)
{
    DDRC=0xFF;
    PORTC=0xAA;

    DDRB=0xFF;
    PORTB=0xAA;

    DDRD=0xFF;
    PORTD=0xAA;

    while(1)
    {
        Delay_mS(500);
        PORTC^=0xFF;
        PORTD^=0xFF;
        PORTB^=0xFF;
    }
}

疑问一: unsigned char n;   
n是作为数值运算的,所以,为何不是 unsigned int n ?

疑问二:
原来的代码是: void main (void), 用GCC编译发现有一个警告。改成: int main (void) 就没有了。
这是ICCAVR与GCC的特性不同导致的吗? 什么时候该用int,什么时候void?

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

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入0汤圆

发表于 2008-7-10 20:47:27 | 显示全部楼层
对于"疑问一":任何一本讲单片机C语言的书里都会有讲数据类型的,这里的CHAR不等于数据库里的CHAR(字符) 如果有过汇编基础的很好理解的

疑问二:PC上的C程序都是int main(void)  并以return 0;结尾
而GCC主要在LINUX上的C编译器,不知所以....  我没用过,不知道到底是怎么回事
以下CFREE里新建的一个DOS程序里的例程:
#include <stdio.h>

int main(int argc, char *argv[])
{
        printf("Hello C-Free!\n");
        return 0;
}

出0入296汤圆

发表于 2008-7-10 22:42:29 | 显示全部楼层
to 【楼主位】 p24t
    对于疑问一:进行单片机编程,往往要考虑单片机的资源是有限的。因为计数器n的最大值不超过
256,而且对于AVR 这种8位单片机来说,操作单个字节是最快的,因此使用unsigned char n,而不是
大家习惯的unsigned int n。如果使用unsigned int n,那么能表达的数值范围就更大了,从0~65535

    对于疑问二:GCC最初是工作在Linux下的,它认为所有的程序都是建立在操作系统的基础之上,
因而,在main结束的时候,必须要返回操作系统“return 0”;而这个返回值是int型的。在AVR单片机
上,通常我们跑的是裸机,也就是没有操作系统,主程序中必须要用一个死循环来防止程序在执行完
main函数后跑飞(这个循环成为超级循环),因此,主程序不可能也不必要返回任何值。这是时候,我
们简单的用一个void来说明。你在移植到gcc的时候,应该根据gcc的要求,进行修改。

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

本版积分规则

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

GMT+8, 2024-9-27 06:05

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

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