精华内容
下载资源
问答
  • 2016-04-12 21:49:00

    软件可移植性指一种计算机上的软件转置到其它计算机上的能力(也可称作软件自动搬家)。软件移植是实现功能的等价联系,而不是等同联系。即软件不修改或只经少量修改就可由一台机器搬到另一台机器上运行,同一软件可应用于不同的环境。接口的改造容易与否,是衡量一个软件可移植性高低的主要标志之一。

    提高软件的可移植性:尽量用高级语言编写系统中对效率要求不高的部分。使用标准C/C++;写跨平台代码;多用开源库;别用VC的编辑器。

    转载于:https://www.cnblogs.com/zn2900732/p/5384626.html

    更多相关内容
  • 性能测试规定——可移植性测试规定软件测试适应性测试规定1、目的适应性测试是与软件无需采用有别于为该软件准备的活动或手段就可能适应不同的规定环境有关的软件属性。其目的在于发现软件系统內部可能存在的各种...
  • 如何提高程序的可移植性

    千次阅读 2014-12-12 12:33:46
    上面的代码就有很好的可移植性。并且可以在MS和BORLAND的编译器下都正确的工作,并且还能检测出如果的你编译器不是这两种的话,还能给个错误信息并终止编译。这个程序的可移植性很好。 2) 内存对齐与字节序。...

    1.使用宏定义,处理依赖系统和处理器的幻数


                         }

                        }




    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,  pgos_timer_handler ) ;

    #else

    #if  defined( __BORLAND_C  )

        setvect( 0x09,  pgos_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个字节长

    展开全文
  • 关键词:设备驱动程序 嵌入式系统 软件设计 可移植性1 嵌入式系统设计 由于嵌入式系统有着体积小、功能集中、可靠性高等优点,已被广泛地应用到日常生活的各个方面,如移动通信、工业控制、医疗器械,家用电器等。...
  • c陷阱与缺陷--可移植性缺陷

    千次阅读 2021-05-21 13:48:28
    在书中说到,由于程序的生命期一般比硬件更长,所以应该注意语言自身的可移植性。但时至今天,这个说法或许需要更正了。但作者的原意在于,注意可移植性问题可以使你的程序生命期更长,施展的空间更大。一c语言...

    引入

    c语言是比较底层的语言,相对于c++和java等高级语言而言。c语言在许多不同的系统平台上都有各自的实现,由于各自的实现之间有细微的差别,导致了如今的移植性问题。

    在书中说到,由于程序的生命期一般比硬件更长,所以应该注意语言自身的可移植性。但时至今天,这个说法或许需要更正了。

    但作者的原意在于,注意可移植性问题可以使你的程序生命期更长,可施展的空间

    更大。

    一 c语言标准的变更

    c语言标准的变更使得语言的特性更多,更方便程序的工作。但是这种变更经常不具备向后兼容性,如此要在语言的重用性和更强大的语言特性间做个选择。

    二 标识符名称的限制

    这种限制主要体现在其大小写和长度上面。

    三 整数的大小

    c语言中为编程者提供了3种不同长度的整数:shor型、int型和long型,c语言的定义中对各种类型整数的相对长度进行了规定:

    1 3种类型的整数其长度是非递减的。

    2 一个普通(int类型)整数足够大以容纳任何数组下标。

    3 字符长度由硬件特性决定。

    注: 现代大多数机器的字符长度为8位,然而,现在越来越多的c语言实现的字符长度都是16位,已处理诸如汉字之类的语言的大字符集。但是字符类型char仍然是8位的。

    在32位机器上,vc6.0的编译环境下,shor类型为16位,int和long类型都是32位。

    解决方法 用类型定义来定义“新的”类型,即使类型长度需要变动之需要改动类型定义即可。

    如 typedef long

    tenmil;//tenmil类型表示的是最大的类型

    四 字符是有符号整数还是无符号整数

    根据系统不一样可能有不一样的定义,但是如果需要统一的话,可以把字符转变为无符号数然后再处理。

    五 移位运算符

    1 在向右移位时,空出来的位可能由0或符号位的副本来填充。

    2 移位计数(即移位操作的位数)的范围为[0,被移位的对象的长度)

    六 内存位置0

    在所有的c程序中,无用null指针的效果都是未定义的。但对于0内存地址的数据,不同的机器有自己不同的权限保护。

    七 除法运算时发生的截断

    例如

    q = a / b;

    r = a % b;

    我们希望a、b、q、r之间维护以下的关系:

    1 最重要的一点,我们希望q*b + r =

    a,因为这是定义余数的关系。

    2 如果我们改变a的正负号,我们希望这会改变q的符号,但这不会改变q的绝对值。

    3 当b〉0时,我们希望保证r>=0且r

    但这三条性质不能同时具备,大多数的程序设计语言选择了放弃第3条,使得性质1和性质2可以得到满足。

    八 随机数的大小

    ANSI

    C标准中定义了一个常数RAND_MAX,它的值等于了随机数的最大取值。

    九 大小写转换

    库函数toupper和tolower起初被实现为宏:

    #define toupper(c) ((c) + 'A' - 'a')

    #define tolower(c) ((c) + 'a' - 'A')

    这两个宏都依赖于特定实现中字符集的性质,即需要所有的大写字母与相应的小写字母之间的差值是一个常量。这个假定对ASCII字符集和EBCDIC字符集来说都是成立的。

    十 首先释放,然后重新分配

    大多数c语言实现都是用了3个内存分配函数:malloc,

    realloc和free。

    但是问题在于free掉的内存会被系统重新分配,但是如果在系统没有重新分配之前,再次使用这段内存的话仍能获得之前的内存内容。

    例如

    free(p);

    p = realloc (p, newsize);

    在某些系统中是允许的。

    但是这种做法还是有危险的。因为并非所有的c实现按在某块内存被释放后还能较长时间地保留。

    十一 可移植性问题的一个例子

    原型:

    void

    printnum (long n, void (*p)90)

    {

    if(n<0) {

    (*p) ('-');

    n = -n;

    }

    if (n >= 10)

    printnum(n/10, p);

    (*p) ((int)(n % 10) + '0');

    }

    这是个打印整数的函数,以下为考虑到可移植性后经过改动的程序:

    void

    printeg (long n, void (*p)())

    {

    long q;

    int r;

    q = n / 10;

    r = n % 10;

    if (r>0) {

    r - =10;

    q++;

    }

    if (n <= -10)

    printneg (q, p);

    (*p) ("0123456789"[-r]);

    }

    修改点:

    1 在字符集上0-9的字符未必是连续有序的。

    2 n<0时,由于有符号数的范围一般是-2[n]~2[n]-1(2[n]表示2的n次幂,n为位数),所以当-2[n]取

    正数时变为2[n]时已经溢出了。解决方法为从负数方向去解决这个问题。

    后语:

    考虑可移植性是个复杂和繁琐的问题,因为以后的硬件什么的怎么变化无法预计。但是,努力提高软件的可移植性,实际上延长了软件的生命期。

    tips

    软件中出现的很多可移植性问题或其他问题,很多时候在于边界条件上。所以在写程序时,不妨把边界条件作为一个重要的考虑点进行测试。

    以下为本章的第二道联系题我的答案:

    int

    ctol(char ctl)

    //该处在答案中不存在,但考虑到字符集自身排序问题还是在此处加上了,

    //不过效率显然降低了。

    {

    int i=0;

    char num[10] = "0123456789";

    for(;i<10;i++)

    {

    if(num[i] == ctl)

    return i;

    }

    }

    long

    atol(char *cl)

    {

    int result = 0;

    int i = 0;

    if((*cl == '+') || (*cl == '-'))

    i++;

    while(1)

    {

    if((cl[i] < '0') || (cl[i]

    > '9'))

    {

    assert(0,

    "invalid input!");

    }

    result = result*10 +

    ctol(cli[i]); i++;

    }

    if(*cl == '-')

    result = -result;

    return result;

    }

    展开全文
  • 现在单片机种类众多,各有各的优势与不足。体现在价格、速度、外设、功耗、封装等许多方面,这些单片机不可能一一去学习,... 一、掌握自己领域可能用到的几种主流单片机或编程软件(SDK)使用方法,具体分为: ...

        现在单片机种类众多,各有各的优势与不足。体现在价格、速度、外设、功耗、封装等许多方面,这些单片机不可能一一去学习,因此今后有很大可能需要应用到自己不熟的单片机,对此,我总结了一些经验(个人经验之谈,仅供参考)。

        有条件的话,在开始之前最好是买个开发版或最小系统,实在买不到也可自己搭个最小系统。

        一、掌握自己领域可能用到的几种主流单片机或编程软件(SDK)使用方法,具体可分为:

                1、看数据手册:了解对象单片机电气特性如供电电压、最小系统要求、各管脚名称作用。

                2、选编程工具:了解对象单片机编程工具和编程前准备工作,不同单片机编程工具盒编程方式可能不同,编程前可能需要提前配置。如STC的51可直接通过串口编程,STM8可用STLINK或串口并可能要先配置选项字节(Option Byte)。

                3、选编程软件:了解对象单片机的主流软件编程,不同软件编程方便程度差别较大,各有各的特色,不过选择最好遵循一下几点:

                       ①:使用主流编程软件,主流软件有大量参考例程,许多代码可以方便的移植。软件的稳定性可靠性较高,编译优              化较好。

                      ②:使用自己熟悉的软件,许多软件如Keil有51、AVR、ARM等多种版本,用自己熟悉的软件可以大大减少软件               方面的适应时间。

                4、验证编译下载过程(可省略):在网上找几个简单的如亮灯、中断使用等例程刷在单片机中验证编译、下载过程能正常工作。

                5、学习软件编程模版:不同的软件的驱动库不一样,中断服务函数格式不一样。寄存器编程时,包含单片机头文件时可以打开头文件去看看,编程时也需要经常查询其中的内容。中断过程要了解(不同SDK不一样):包括开关总中断,开关外部中断,中断中断服务函数进入和推出格式。至此应该能驱动GPIO了。

                6、学习编程参考手册:编程参考手册上有各模块的详细介绍和使用方法,通过学习参考手册结合可以掌握大多数外设的使用(如GPIO、时钟、定时器、中断、ADC、UART、I2C、SPI、EEPROM和SDIO等高级外设)。

          至此已经可以使用该单片机的绝大多数功能了,新种单片机入手也就差不多完成了,学习时间最长的可能还是在各种外设的学习和编制对应驱动程序了,为了找到一种方便以后快速移植的方法提高可移植性。我做了如下总结。

        二、外设驱动库的编写:

              外设驱动主要分为三大块:初始化函数、接口函数和中断服务函数。

              外设驱动库有两种:官方外设库函数(如果有,如STM32系列)、自编外设库库函数。官方外设库函数优点是函数稳定,描述性编程便于使用和理解,缺点是函数不够精简,代码占用空间大,运行稍慢(可忽略不计),写程序时输入量较大。自编库函数优点是代码透明便于自己修改,代码可对应不同应用做深度优化,代码精简,占用空间小,运行效率高,写代码时输入量小。

               官方驱动库程序已经有很成熟的几种版本,一般全新开发就用最新的驱动库版本,产品升级就用原来使用的驱动库版本以确保兼容性。程序已开发好,只用管调用,这里不讨论。

               自编外设库函数:自编库函数需要写头文件和源文件。分别写定义声明和函数体。一下就具体注意事项分别叙述:

               1、初始化函数:参考编程参考手册对外设相应各项进行配置,并做好注释(最好用英文注释,以防以后注释出现乱码),可以写带几种主要参数的初始化,没用到的部分给注释掉,留以后修改。为使参数便于阅读,可给参数定义一个别名。

                2、接口函数:接口函数会被外设频繁调用要有足够的可移植性,因此定义接口函数时应考虑到各种单片机各种软件调用这种功能是的一般形式。传入参数和返回值要慎重设计。

                简单的接口函数结合传入参数直接操作寄存器(一定要做好英文注释)。

                复杂点的接口函数分两层,第一层接口函数(应用程序直接调用的)不要直接操作硬件(不直接操作寄存器),第二层做底层操作,直接操作硬件(寄存器操作),给第一层API提供服务,以后不同单片机移植也是改这一层。

                3、中断函数:类似接口函数的编写,分两层,中断函数中不直接操作寄存器。将开关中断和清标志位函数等直接操作寄存器的函数封装到固定的函数名中。

                这些编写好后做下整理,将底层硬件操作放在驱动文件头部并用注释标明方便以后找到直接修改。

                另外:编写驱动库尽量不要定义全局变量。更多的可以参考各种芯片驱动库的编写方式。

        总结:单片机就是通过执行写在里面的程序使用各种片上外设实现各种输入与输出,以实现各种功能。熟悉单片机无外乎熟悉它的各种片上功能、外设与编程软件。不同的单片机编程方式会有些不同但只要解决了单片机硬件层的驱动程序就可以方便的让单片机跑起来。

        而提高可移植性的要点就是将硬件层抽象为一个个接口函数,屏蔽硬件之间的差异,并提供一个统一的与平台无关的函数名(接口)供上层程序调用。如果一个复杂的程序通过此方法一层层建立起来,程序的会逻辑更加清晰,不光硬件平台的转换会变得方便许多,对以后的程序修改、优化和扩展也帮助良多。

                


                


    展开全文
  • 六个维度:可移植性

    千次阅读 2013-01-31 20:52:33
    可移植性是软件质量之一,良好的可移植性可以提高软件的生命周期。代码的可移植性主题是软件;可移植性是软件产品的一种能力属性,其行为表现为一种程度,而表现出来的程度与环境1密切相关。(注1:环境包括软件环境...
  • 软件可维护

    千次阅读 2021-07-23 05:06:29
    [编辑]什么是软件维护软件维护是指软件产品...如何才能够提高软件维护的效率等。这些问题实际上涉及软件的维护方面。[编辑]软件维护的特征软件维护的五个子特性:(1)易分析。软件产品诊断软件...
  • 软件维护2

    千次阅读 热门讨论 2019-09-24 09:48:00
    在前面的章节中曾经多次强调,提高可维护是支配软件工程方法学所有步骤的关键目标。 8.4.1 决定软件可维护的因素 维护就是在软件交付使用后进行的修改,修改之前必须理解待修改的对象,修改之后应该进行必要的...
  • 软件设计师历年试题及答案 包括10年上半年软设试题和答案解析
  • C++的可移植性和跨平台开发

    千次阅读 2016-02-29 23:48:47
    如果你平时使用C++进行开发,并且你对C++的可移植性问题不是非常清楚,那么我建议你看看这个系列。即使你目前没有跨平台开发的需要,了解可移植性方面的知识对你还是很有帮助的。  C++的可移植性这个话题很大,...
  • 任何高级语言编写的软件代码最终都会转化为硬件门电路的空间组合逻辑和时间的时序逻辑,同样所有的硬件门电路的空间组合逻辑和时间时序逻辑都可以用高级语言来描述 、设计~...Makefile为什么可以具有可移植性、通用性?
  • 如何提高软件可维护

    千次阅读 2011-09-30 20:20:43
    软件工程中把软件开发大概分了六步:可行分析、需求分析、设计、编码、测试、运行与维护,在这几大部分中,维护占有重要地位,一般我们不想把大分分精力、财力花费在维护上,这就需要我们提高软件维护
  • 可移植性测试通常和软件移植到某个特定的运行环境中的难易程度相关,包括第一次建立或从现有环境上移植到另一个环境上。 系统的可移植性并不是在系统开发的后期才开始考虑的,在整个软件开发生命周期都必须要考虑...
  • 如何提高代码可读性、维护

    万次阅读 多人点赞 2016-07-21 16:05:09
    做好代码规范、提高代码质量,能显著增强代码的可读性、维护和可变更。努力提高代码的读写维护,是做好代码规范的必要非充分条件。代码规范和架构设计是软件的灵魂所在,代码质量偏低,就像是人失去了三...
  • 1.灵活地运用结构体和共用体提高自己的编程水平; c语言位域结合共用体的使用,使变量 a 的每一位对应结构体位域中的每一个变量。 使对变量的位操作变得通俗易懂。   注意:不同的编译器环境的内存排布不一样...
  • 可移植性设计

    万次阅读 2007-07-03 19:27:00
    1. 概述我们在讨论系统移植的时候...衡量系统的可移植性要从两个角度来看待,一个是垂直的,一个是水平的。所谓的垂直移植性,就是如何将一个应用程序从某个平台的一个版本移植到另外一个版本。如将一个应用程序从win
  • 作为各种Linux发行版的共同核心,Linux内核多年来一直不间断地引进新技术进行革新,逐步提高自身的各种性能,例如伸缩、可用和技术支持等。本文主要介绍如何将现有的硬件驱动、应用软件和嵌入式Linux组件移植...
  • 软件可维护综述

    千次阅读 2019-10-10 16:04:13
    1.软件维护的目标、任务、分类与特点 1、软件维护目标: 定义:在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。 目的:通过必要的维护工作使得系统持久的满足用户的需要 2、软件维护的任务:...
  • 这里假设该操作系统具有良好的可移植性,即遵循DIP原则。 图1:可以移植的操作系统模型 对一个操作系统只要遵循这个模型,那么它就具备非常高的移植性。我们来看如何将这个操作系统轻松的移植到不同的...
  • 软件遵循策略与机制分离的原则,采用分层的体系结构,能够更好得适应底层硬件的变化,大大提高代码的可移植性。 2、闪存设备管理技术的现状及存在的问题 闪存设备不同于一般的非易失性存储设备,它有很多特殊的...
  • 软件遵循策略与机制分离的原则,采用分层的体系结构,能够更好得适应底层硬件的变化,大大提高代码的可移植性。 2、闪存设备管理技术的现状及存在的问题 闪存设备不同于一般的非易失性存储设备,它有
  • 软件遵循策略与机制分离的原则,采用分层的体系结构,能够更好得适应底层硬件的变化,大大提高代码的可移植性。2、闪存设备管理技术的现状及存在的问题闪存设备不同于一般的非易失性存储设备,它有很多特殊的...
  • 目前嵌入式系统中广泛采用的闪存管理软件可移植性、灵活性方面都存在不足。因此本文在分析了这些管理软件现存问题的基础上提出了一种比较合理的闪存I/O软件分层结构,并通过对软件的模块化设计与实现证明了该分层...
  •  μC/OS-II在ARM平台的移植是一个重要的学习过程,有助于提高对RTOS的认识与理解,从而提高嵌入式工作者的理论与技术水平。μC/OS-II是一个小的实时内核,源代码公开,有详尽的解释。正是因为其内核小,才便于研究...
  • 浅谈团队提高软件质量的方式

    千次阅读 2018-11-17 14:21:46
    软件质量是产品或服务所满足明示或暗示需求能力的固有特性和特征的集合,软件的质量特性有功能性、可靠性、易用性、维护性、可移植性。缺陷则指系统所需要实现的某种功能的失效或违背。在某种程度上,缺陷的数量...
  • 软件的高可用扩展和高性能 高可用 软件的高可用是指软件的不间断运行能力,它一方面要求软件所依赖的设备本身具有高可靠,另一方面必须从软件的设计入手,实现一个高可用软件产品 高可用H.A....
  • 一般来说,架构除了关注功能需求外,其实更重要的是要关注非功能需求,比如,性能,可用伸缩扩展。而且一旦架构决定下来,一般难以改变,所以要求我架构师从一开始就要设计一个满足性能,可用,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,802
精华内容 36,720
关键字:

如何提高软件可移植性

友情链接: 200642522101737322.rar