刚买了傻孩子的书,第一个范例有两个小疑问,谢谢
傻孩子的书是使用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? 对于"疑问一":任何一本讲单片机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;
} 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的要求,进行修改。
谢谢您的疑问。
页:
[1]