8755|18

8

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教大家一段程序: keil c 和IAR都进行过编译 [复制链接]

本信息来自合作QQ群:电子工程师技术交流(12425841)   群主在坛子ID:Kata



  1. //根据所得到的汉字区位码查汉字库中该汉字点阵码的起始地址,acode 区码 bcode 位码





  2. long int find_ledcode_address1(unsigned char acode,unsigned char bcode)

  3. {

  4.    long int address=0;

  5.     address=((acode-0xa1)*0x5e+(bcode-0xa1))*0x20;        //得到该汉字对应的地址

  6.     return address;

  7. }
复制代码
现在的问题是 在区码 和位码的值较大的时候就出错了
比如当
acode=0xc3;
bcode=0xa1;
结果应该为0x18f80; 可实际返回值为0x8f80;

最新回复

看你提供的代码,你最终address被截短为16位,估计你的CPU是16位地址的单片机。 keil C一般是用来做单片机的,keil MDK倒可以用来做arm!!  详情 回复 发表于 2010-5-19 16:16
点赞 关注

回复
举报

8

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
4个字节
INT是2个字节 char是一个字节
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
long int是多少位的?
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

4
 
4个字节
INT是2个字节 char是一个字节
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 
要看处理器的
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

6
 
你是用的什么编译器
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 
不同的处理器架构是不一样的e
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

8
 
我是用的STC 89C52
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

9
 
我是gcc
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

10
 
单片机的
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

11
 
8位机
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

12
 
看的头文件是怎么定义long int长度
 
 
 

回复

250

帖子

0

TA的资源

一粒金砂(初级)

13
 
先了解int长度是多少  int长度是机器的自然长度  可以通过头文件查看长度
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

14
 
是看哪个头文件?
 
 
 

回复

250

帖子

0

TA的资源

一粒金砂(初级)

15
 
知道了概念,就是自己使用搜索引擎的事情的吧
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

16
 
因为我看资料上 LONG 是4个字节的
这方面的C语言书上也是这么说的 然后INT 是2个
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

17
 
一般嵌入式里面写的是int8,int16用来区分的
 
 
 

回复

250

帖子

0

TA的资源

一粒金砂(初级)

18
 
基本数据类型

C语言中只有4中基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等);所有其他类型都是从这4种基本类型的某种变化或组合派生而来。
一、整型家族

整型家族包括charshort intintlong int,并且都分为signedunsigned型。
int型字长问题:

long int型至少应该和int型一样长,而int型至少应该和short int一样长。


C/C++
规定int字长和机器字长相同;

操作系统字长和机器字长未必一致;

编译器根据操作系统字长来定义int字长;
http://www.programfan.com/club/showbbs.asp?id=145906
由上面三点可知,在一些没有操作系统的嵌入式计算机系统上,int的长度与处理器字长一致;有操作系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义int字长:“比如你在64位机器上运行DOS16系统,那么所有for dos16C/C++编译器中int都是16位的;在64位机器上运行win32系统,那么所有for win32C/C++编译器中int都是32位的”。(CPU字长是指其一条指令/一次运算可以处理的数据的最大宽度。http://www.cublog.cn/u/23458/showart.php?id=175995
另外,对于整型的数值范围,每个编译器里面都有一个标准头文件:limits.h,这个头文件定义了一些宏,这些宏表示该编译器使用的所有数据类型的范围,编程过程中
使用这些宏就行了。例如你想要的int的最大值可以使用宏INT_MAX,最小值使用INT_MIN,而无符号则可以使用UINT_MAX,还有其它类型
的。你自己把这个头文件打开看看就知道了。


附:关于整形变量为32的问题的剖析:
http://bbs.cpcw.com/viewthread.php?tid=666146
整形变量是不是32位这个问题不仅与具体的CPU架构有关,而且
与编译器有关。在嵌入式系统的编程中,一般整数的位数等于CPU字长,常用的嵌入式CPU芯片的字长为81632,因而整形变量的长度可能是8 1632。在未来64位平台下,整形变量的长度可达到64位。
长整形变量的长度一般为CPU字长的2倍。
在数据结构的设计中,优秀的程序员并不会这样定义数据结构(假设为WIN32平台):
typedef struct tagTypeExample
{
unsigned short x;
unsigned int y;
}TypeExample;
他们这样定义:
#define unsigned short UINT16 //16位无符号整数
#define unsigned int UINT32 //32位无符号整数
typedef struct tagTypeExample
{
UINT16 x;
UINT32 y;
}TypeExample;
这样定义的数据结构非常具有通用性,如果上述32平台上的数据发送到16位平台上接收,在16位平台上仅仅需要修改UINT16UINT32的定义:
#define unsigned int UINT16 //16位无符号整数
#define unsigned long UINT32 //32位无符号整数
几乎所有的优秀软件设计文档都是这样定义数据结构的。


char型与程序可移植性:

char类型变量在本质上是小整型值。
字符型(char型)也分signed charunsigned char型,如果在定义变量时只使用关键字char,缺省情况下它根据编译器的定义为signed charunsigned char,这意味着不同机器上的char可能有不同的取值范围。因此,只有当程序使用的char型变量的值位于signed charunsigned char的交集中(例如编译器认为char8位二进制长时,这个交集是0~127ASCⅡ字符集的字符都在这个范围内),这个程序才是可移植的。
进一步,如果显示地将字符变量声明为signedunsigned,则可提高程序的可移植性,不过,有些机器处理signed charunsigned char的能力是不同的,硬性规定后可能会使效率受损,还有不少处理字符的库函数的参数声明为char,因此显示声明也可能会有兼容性问题。
结论:保证可移植性的最佳办法还是定义为char型同时只使用signed charunsigned char型的交集字符,在进行算术运算时,可根据需要再使用显示地声明或者强制转换。



原文地址 http://blog.chinaunix.net/u/26710/showart_404248.html
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

19
 
看你提供的代码,你最终address被截短为16位,估计你的CPU是16位地址的单片机。
keil C一般是用来做单片机的,keil MDK倒可以用来做arm!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表