lwIP TCP/IP 协议栈笔记之四: 操作系统配置文件 sys_arch.c & sys_arch.h 详解

目录

1. 操作系统抽象层说明

1.1 Semaphores(信号量)

1.2 Mutexes(互斥锁)

1.3 Mailboxes(邮箱)

1.4 Misc(杂项)

2. Time(时间)

3. Critical sections(关键代码段/临界区)


1. 操作系统抽象层说明

无需在NO_SYS模式下实现本节中的功能。 特定于操作系统的代码应该在 arch/ sys_arch.h和sys_arch.c中实现。

操作系统仿真层在lwIP代码和底层操作系统内核之间提供通用接口。 一般的想法是将lwIP移植到新架构只需要对少量头文件和新的sys_arch实现进行小的更改。 也可以执行不依赖于任何底层操作系统的sys_arch实现。

sys_arch为lwIP提供信号量,邮箱和互斥锁。 对于完整的lwIP功能,可以在sys_arch中实现多线程支持,但基本的lwIP功能不需要这样做。

除了提供sys_arch功能的源文件之外,OS仿真层还必须提供几个头文件,用于定义整个lwip中使用的宏。 所需的文件和它们必须定义的宏列在sys_arch描述下面。

从lwIP 1.4.0开始,信号量,互斥量和邮箱功能的原型都允许使用指针或实际的OS结构。 这样,这些类型所需的内存可以就地分配(全局或堆栈)或堆(在“* _new()”函数内部分配)。

注意:

在sys_arch中使用mem_malloc()时要小心。 当malloc()引用mem_malloc()时,您可能遇到循环函数调用问题。在mem.c中,mem_init()尝试使用mem_malloc分配信号量,当sys_arch使用mem_malloc时,当然无法执行该信号量。

相关声明见 sys.h

1.1 Semaphores(信号量)

信号量可以是计数或二进制 - lwIP可用于两种类型。 信号量由“sys_sem_t”类型表示,该类型在sys_arch.h文件中是typedef。邮箱等效地由“sys_mbox_t”类型表示。 互斥体由“sys_mutex_t”类型表示。 lwIP对内部表示这些类型的方式没有任何限制。

/* 
    创建一个新的信号量。 
    信号量被分配给'sem'指向的内存(可以是指针或实际的OS结构)。
    “count”参数指定信号量的初始状态(为0或1)。
    如果已创建信号量,则应返回ERR_OK。 返回任何其他错误将提示出现了什么问题,但除了断言之外,没有实现真正的错误处理。

    参数
        sem指向要创建的信号量的指针
        计算信号量的初始计数

    返回
        如果成功则为ERR_OK,否则为另一个错误
 */
err_t 	sys_sem_new (sys_sem_t *sem, u8_t count)

/*
    发送信号量

    参数
        sem 信号量发出信号
*/ 
void 	sys_sem_signal (sys_sem_t *sem)

/*
    在等待信号量发出信号的同时阻塞线程。 
    如果“timeout”参数不为零,则只应在指定时间内阻塞线程(以毫秒为单位)。 
    如果“timeout”参数为零,则应阻塞线程,直到发出信号量信号。

    如果信号量未在指定时间内发出信号,则返回值为SYS_ARCH_TIMEOUT;
    如果已发出信号(有或没有等待),则返回值为任何其他值。 
    请注意,lwIP实现了一个名为sys_sem_wait()()的函数,该函数使用sys_arch_sem_wait()函数。

    参数
        sem信号量等待
        超时超时(以毫秒为单位)等待&#x
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值