资源描述
向嵌入式平台移植软件的相关技术
字节顺序
大端:高字节数据存放在低地址处,低字节数据存放在高地址处;
小端:低字节数据存放在低地址处,高字节数据存放在高地址处。
字节对齐
Makefile中增加了编译参数 - -pack – struct;增加组包函数和拆包函数。其解决字节对齐的原理是,通过在发数据包处增加组包函数,使数据按CPU要求组织放在指定地址处,组成包发给下层,而后在收数据包处增加拆包函数,是收到的内存中的数据再按要求还原。
位段
采用条件编译方式,针对不同的平台定义顺序不同的位段;
也可在组包函数和拆包函数中加上位段处理。
代码优化
1, 提高代码执行效率,switch-case语句吧最可能发生的情况放在第一;使用全局变量比向函数传递参数更有效率。减少了函数调用前参数入栈及函数完成后参数出栈的操作;
2, 尽可能的减小代码尺寸,并避免试用标准库例程;
3, 避免内存泄露。
Make文件中的内容
Make文件包含五方面的内容:具体规则、隐含规则、变量定义、指令和注释。
具体规则
例举了目标的依赖,可能同时提供了创建或更新该目标的命令。
隐含规则
目标是由同名文件创建或更新,同时提供了创建更新该目标的命令。
变量定义
定义变量占一独立行。
指令
1, 读其他make文件;
2, 根据变量值判定是否使用或忽略make文件的部分内容;
3, 定义多行变量,即定义变量值可以包含多行字符的变量;
以“#”开始的行是注释行,在处理时被make忽略。若注释行尾是“\”,则表示下一行继续问注释行。除在define指令内部外,注释可以出现在make文件任何位置,甚至于命令内部(这里shell决定什么是注释内容)。
Make文件命名(P27)
在标准名字make文件中,make按GNUmakefile、makefile、Makefile顺序寻找make文件。Make文件一般命名为“makefile”或“Makefile”。若不存在,则不使用任何make文件。在非标准名字Make文件中,使用“-f name”或“- - file=name”指定make文件。参数若多于一个,则意味着指定了多个make文件,所有文件按具体顺序发生作用。一旦使用参数,则将不再自动检查标准顺序命名。
Make文件中包含其他make文件(P26)
include指令指示暂停读取当前make文件,先读include指定的make文件。指令在make文件中单独占一行,格式为:
include filenames …
filenames是要包含和执行的文件名,可以是一个或者多个文件名。指令不能以Tab字符开头,include前面可以有多个空格,include与文件名之间,文件名与文件名之间用空格隔开。行尾以“#”为起始的注释。
另外,文件名可以包含变量及函数调用,在处理时由make扩展。
使用include的情况:
1, 几个程序分别有单独的make文件,但需要一系列共同的变量定义,或者一系列共同的格式规则;
2, 在自动的将文件设为目标产生的依赖时,依赖存在于核心make文件所包含的文件中。
在执行中,若include指示文件名不以“/”开头,且在当前目录下也找不到,则需在其他目录中寻找。首先,搜寻“-l”或“- -include-dir”参数指定的目录,然后依次搜寻prefix/include(通常为usr/local/include),usr/gnu/include,usr/local/include,usr/include目录。
若找不到相关文件,则make将产生一个警告。
NOTE:
一旦make完成对make文件的读取工作,就会对不存在的make文件进行创建。Make只在寻找丢失的make文件的一切努力均失败后,才发出致命错误。若希望忽略不存在或不能重新创建的make文件,则需使用-inlcude指令代替include指令。格式为:
-include filenames …
在其他版本中,-include对应的指令为sinclude。
展开阅读全文