首页 > 其他分享 >以 LwIP 分析基于C语言的代码文件组织

以 LwIP 分析基于C语言的代码文件组织

时间:2024-05-11 21:57:50浏览次数:24  
标签:LwIP 头文件 代码 C语言 源文件 文件组织 include lwip

转载自:https://blog.csdn.net/jiangjunjie_2005/article/details/22991385

时间: 2014-04-05 

 

嵌入式系统一般用C语言来实现,当代码规模增大后经常出现各种问题:如何将众多的源文件放置在不同的目录中?头文件.h和源文件.c如何组织?说明文档和源文件如何存放?还要考虑移植。

下面以LwIP为分析案例,学习一个经典的文件组织架构。

图1  LwIP文件组织架构

从图1可以看到,设计者一开始就考虑了主代码与移植代码分离:lwip是主代码,LwIP_Port是移植代码,当需要移植LwIP时可以让用户只关心LwIP_Port目录下的文件,减少工作量。

LwIP_Port下有两大目录,arch目录保存LwIP移植到不同OS下时该修改的文件,ethernetif保存LwIP移植到不同的网络适配器时该修改的文件。

主代码目录下,首先是doc目录,它保存LwIP的说明文档,其次是src目录,它保存LwIP的主文件。主文件按不同的功能又分成4部分:api是用户调用接口,core是核心文件,include是整个系统的头文件存放区,netif处理底层网络接口。

图3 主文件的组织

接下来再来看看.h头文件是如何组织的,从图4可以看出,所以的头文件都存放在LwIP\lwip\src\include下,头文件与.C源文件还具有良好的对应关系,这种统一存放方便查找和维护。

图4 头文件的存放与对应关系

把头文件集中存放的另一个好处是便于代码编译,当代码放置于编译环境(常见为IED环境)中可以设置预编译路径,告诉编译器头文件在什么地方。设当前编译环境为IAR,以图4为例可以设置预编译宏指令,在工程的Option下,选择C/C++ Compiler下的Preprocessor,添加

$PROJ_DIR$ \Lwip\lwip\src\include

这样一来,.C源文件的如下语句就能让编译器找到对应的头文件。

#include "lwip/def.h"

因为编译器会将上述语句的包括路径解释成:($PROJ_DIR$是工程当前目录)

#include $PROJ_DIR$ \Lwip\lwip\src\include\lwip\def.h

 

标签:LwIP,头文件,代码,C语言,源文件,文件组织,include,lwip
From: https://www.cnblogs.com/FBsharl/p/18187218

相关文章

  • 42.C语言有关函数的学习整理
    先看一个简单的函数实现的就是将数组里面的数加起来\t缩进相当于Tab键inta[10]={9,8,7,6,5,4,3,2,1,0};for(inti=0;i<10;++i)a[i]=add(a[i],i);for(inti=0;i<10;++i)printf("%d\t",a[i]); intadd(i......
  • FlexibleButton - 一个小巧灵活的C语言按键处理库+SerialChart - 能将串口数据实时绘
    1、FlexibleButton-一个小巧灵活的C语言按键处理库FlexibleButton是一个基于标准C语言的小巧灵活的按键处理库,支持单击、连击、短按、长按、自动消抖,可以自由设置组合按键,可用于中断和低功耗场景。项目主页:https://github.com/murphyzhao/FlexibleButton该按键库解耦了......
  • 非常完整的开源无刷电机驱动项目+仅1300行代码的C语言异步网络库+简单到傻瓜都会用的
    1、VESC-非常完整的开源无刷电机驱动项目ESC是ElectricSpeedController的缩写,也就是电子调速控制器,简称电调;项目作者是BenjaminVedder,所以叫VESC,就是本杰明电调。这个项目主要分为几个部分,VESC固件,物料清单,VESC硬件,VESC工具软件,是一个非常完整的软硬件项目,并且配套的软......
  • c语言 数据结构,把数据整体循环左(右)移p个位置
    思路:n为数组的长度(利用线性代数的思路)1.左移:把第1到第p个看成集合A,把第p+1到第n个看成集合B,则需要推导AB->BA,过程(A-1)*(B-1)->( (A-1)*(B-1))-1=BA2.右移:把第1到第n-p个看成集合A,把第n-p+1到第n个看成集合B,则需要推导AB->BA,过程(A-1)*(B-1)->( (A-1)*(B-1))-1 =BA 时......
  • 【C语言】---- sizeof关键字计算变量的大小
    简介sizeof是C语言中一个非常重要的关键字,它用于计算变量、类型和数组的大小。sizeof的作用是获取变量或数据类型在内存中所占用的字节数。在C语言中,所有的数据都有一个确定的大小,这个大小取决于数据类型。例如,一个int类型的数据在大多数系统中占用4个字节,而一个char......
  • c语言 复杂度为O(n)的有序数字字符的去重
     #include<stdio.h>intmain(){//有序列表的去重intarr[]={1,2,2,3,3,3,5,6,7,7,7,7,8,8,9,9,9};intlen=sizeof(arr)/4;intmark[len]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};intk=0;//打印数组printf("原始数组:")......
  • 【C语言】---- 三目运算符
    C语言中的三目运算符是一种简化版的条件语句,它允许您在一行代码中编写ifelse语句。三目运算符的语法如下:condition?expression1:expression2;如果condition为真,则表达式expression1被求值并作为整个表达式的结果;如果condition为假,则表达式expression2被求值并作为整个表达......
  • linuxC语言点灯
    大部分情况下都是使用C语言去编写的。只是在开始部分用汇编来初始化一下C语言环境,比如初始化DDR、设置堆栈指针SP等等,当这些工作都做完以后就可以进入C语言环境,也就是运行C语言代码,一般都是进入main函数。所以我们有两部分文件要做:①、汇编文件汇编文件只是用来完......
  • C语言数据类型篇
    前言写这个系列的文章,其实也是给自己一个交代。之前断断续续的学过C语言,后来发现了很多自己的问题。比如看过的东西过几天就忘记了,有比如要坚持看多少东西后来就坚持不下去了,另外没有一个东西来记录自己对C语言的学习知识点的记录,C语言很重要。是所有语言的母语言,就想在此次学习......
  • 09. C语言内嵌汇编代码
    C语言函数内可以自定义一段汇编代码,在GCC编译器中使用asm或__asm__关键词定义一段汇编代码,并可选添加volatile关键字,表示不要让编译器优化这段汇编代码。内嵌汇编代码格式如下:__asm__(  "汇编代码"  :输出描述  :输入描述  :修改描述);汇编代码部分......