完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
在使用msp430芯片时,程序的移植变得尤为重要,可是本人的程序总是
不能做到随意移植,想请各位大神请教一下,在编程中要注意哪些问题,可以 提高自己程序的移植性呢?望大家不吝赐教,谢谢大家! |
|
相关推荐
9个回答
|
|
多写点结构体函数
|
|
|
|
|
|
|
|
模块化编程,别用底层调用
|
|
|
|
|
|
|
|
1) 写程序请一定要考虑到你今后可能换个编译器。所以请使用预定义宏!比如MS的编译器就事先定义了__MSC,而Borland的就预先定义了__BORLAND_C。Sunplus GCC编译器也肯定有这样的宏。举个例子:setvect函数在Borland的实现中就叫setvect,而MS C/C++中却是_dos_setvet。如果你仅仅是简单的用setvect,那你的程序就很可能失去了移植到MS C下的可能。不过如果你这么写:
#if defined( __MSC ) _dos_setvect( 0x09, 禁止发广告_timer_handler ) ; #else #if defined( __BORLAND_C ) setvect( 0x09, 禁止发广告_timer_handler ) ; #endif #error Error ! Need MSC or Borland C to compile this programe ! #endif 上面的代码就有很好的可移植性。并且可以在MS和BORLAND的编译器下都正确的工作,并且还能检测出如果的你编译器不是这两种的话,还能给个错误信息并终止编译。这个程序的可移植性很好。 2) 内存对齐与字节序。大多数的不可移植问题似乎都来自内存对齐,所以要避免写出需要内存对齐的或者对字节序有特殊要求的程序。 3) 使用标准的C语言。给大家再介绍一个预定义宏,可以用来检测你的C语言编译器是不是一个标准C编译器: #if defined( __STDC__ ) // This is a standerd ANSI C compiler #else // This is not a standerd C compiler, perhaps K&R C ??? #endif 3) 永远不要使用位域(bit fields)。虽然C支持在结构内申明位,比如: int ch : 1 ; 但那往往带来的后果就是你的代码成了architecture specific code。也就是说,完全丧失了可移植性。 4) 不要直接使用int。int是魔鬼!在16位系统上,sizeof(int)是2,在32位系统上,却是4。一些依赖于int长度的程序将无法移植,我建议写下面的宏: #if defined( CPU16 ) typedef int SWORD ; typedef unsigned int UWORD ; #else ... ... #endif 如果觉得这样麻烦,那就用short,它在十六位和三十二位系统上都是2个字节长。 |
|
|
|
多写结构体语言
|
|
|
|
哈哈,多谢啦~ |
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12025 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 07:38 , Processed in 0.617732 second(s), Total 57, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号