搜索
bottom↓
回复: 3

djyos的可移植性(三)

[复制链接]

出0入0汤圆

发表于 2012-8-10 22:41:19 | 显示全部楼层 |阅读模式
1.2.   数据位宽
    再谈谈数据类型长度的问题,笔者认为,这是C语言的一个缺陷,它只定义了数据类型的名字,却没有明确它的数据长度。C语言的数据长度,可笑得很,它不是由标准定义的,而是由编译器设计者定义的,他们从自己的喜好以及方便实现的角度去定义。结果是,同一个类型,在不同的机器上,或者机器但编译器不同,事件类型的长度是不一样的。例如:
1、  int类型的长度依机器字长而定,甚至出现过26位长度的int类型。
2、  同是在x86下面,int类型用turbo c编译时16位的,而用VC编译却是32位的。
3、  Char类型按有符号还是无符号处理,由编译器说了算。
    嵌入式软件运行环境五花八门,其数据长度不一致的情况,较台式机更严重。因此,要编写可移植的嵌入式软件,就不能使用c语言定义的原始类型,而是要用定长的类型。Djyosstdin.h文件中,定义了一系列的长度和符号都确定的类型,略举几个如下:
u32:无符号32位整数
s32:有符号32位整数
vu32:易失性的无符号32位整数
vs32:易失性的有符号32位整数
    另外,还定义了一些跟CPU字长有关的常数和变量,例如在32位机上,有如下定义:
#define cn_cpu_bits             32  //处理器字长
#define cn_ptr_bits             32  //CPU地址位宽
#define cn_cpu_bits_suffix_zero  5   //cpu字长后缀0个数,比如32=0b0100000,后缀50
#define cn_byte_bits            8   //字节位宽
    应用程序中跟cpu字长相关的代码中,使用这些常量,那么在不同字长的cpu之间移植程序时,只要修改这些常量定义就可以了。关于这些常量的使用方法,可在共享的djyos源码中搜索这些符号。
    定义了ptu32_t这个数据类型,表示一个无符号整数,如果指针长度大于32,则等于指针长度,如果指针长度小于等于32,其长度为32。在所有可能作为指针使用的地方,都使用这个类型的话,那么,你在32位机上开发的软件,移植到64位机时,无须做任何修改。有许多程序员、甚至是相当有经验的程序员,都爱把32位数强制转换为指针,或者把指针强制转换为32位数进行运算。这种程序,移植到16位或者64位机上时,就要做大量的修改。
    定义了ucpu_tscpu_t类型,该类型分别是与cpu字长等长的有符号和无符号整数,这种数据的读或写操作是天然的原子操作,注意,是读或者写,不是读修改写。对于A模块只读、B模块只写的数据,这种数据典型地可以用来传递状态量,这种场合,可以不用信号量保护。
    编写djyos应用程序,强烈建议使用djyos定义的数据类型,这样可以确保你的应用程序在运行djyos的各种硬件平台上,是可移植的。

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2012-8-11 09:05:23 | 显示全部楼层
很好的编程经验, 领教了. 谢谢!

出0入0汤圆

发表于 2012-8-11 15:07:05 | 显示全部楼层
这个常用,必须的!

出0入0汤圆

发表于 2012-8-11 15:50:38 | 显示全部楼层
C上确实这点很烂.有名没长度.不同的CPU处理起来很麻烦.还是加上长度好.如果是C的内置特性的话,C就更完美了.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 12:17

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

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