复习笔记3

1、什么是TCPIP?
参考网址:TCPIP协议讲的明明白

2、LWIP简介?

参考网址:LWIP使用经验—变态级(好文章)

3、嵌入式操作系统之信号量,消息队列,邮箱的区别
参考网址:
信号量是一个触发信号,也是一个计数器,等待接收信号的任务一般只有接收到信号才可以执行,否则任务一直暂停。在uCOSII里面,等待信号量的任务可以设置无限等待或等待若干个时钟节拍后,任务自动恢复执行。具体看自己的要求来设置。

邮箱是信号量的扩展,相当于把一个指针定义的变量从一个任务传递到另一个或多个任务中去,这个指针是先发到邮箱,然后等待任务从邮箱里提取指针,这也就传递了指针指向的具体变量值。 等待邮箱的任务也是可以设置无限等待和等待若干个时钟节拍后任务自动恢复执行。后面的队列,我们也可以看得出它们规律,都有各自的建立,删除,发送,接收,查询等功能函数。

队列是多个邮箱的数组,可以看做是个指针数组,任务之间可以按照一定顺序以指针定义的变量来传递,即是发送一个个指针给任务,任务获得指针,来处理指向的变量。这个方式有先进先出,先进后出。这个后面再详谈。

信号量
信号量主要实现以下两个功能:
两个任务之间或者中断函数跟任务之间的同步功能,这个与事件标志组是类似的。其实就是共享资源为 1 的时候。
多个共享资源的管理。正在使用的资源有多少,信号量就减多少。
二值信号量(可以在任务和中断中使用)
信号量资源被获取了,信号量值就是 0,信号量资源被释放,信号量值就是 1,把这种只有 0 和 1 两种情况的信号量称之为二值信号量。
类似一个标志位,事件产生置1,事件处理后置0。
计数信号量(可以在任务和中断中使用)
事件计数:事件产生–释放信号量(信号量+1),事件处理–获取信号量(信号量-1),减到零表示所有事件处理完毕
资源管理:信号量值代表当前资源的可用数量,比如停车场当前剩余的停车位数量。信号量值为 0 时说明没有资源了
优先级翻转:在很多场合中,某些资源只有一个,当低优先级任务正在占用该资源的时候,即便高优先级任务也只能乖乖的等待低优先级任务使用完该资源后释放资源。这里高优先级任务无法运行而低优先级任务可以运行的现象称为“优先级翻转”。

互斥信号量(可以在任务中使用,不可以在中断中使用)
互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中断与任务之间的同步)二值信号量最适合。

优先级继承:当一个互斥信号量正在被一个低优先级的任务使用,而此时有个高优先级的任务也尝试获取这个互斥信号量的话就会被阻塞。不过这个高优先级的任务会将低优先级任务的优先级提升到与自己相同的优先级,这个过程就是优先级继承。优先级继承尽可能的降低了高优先级任务处于阻塞态的时间,并且将已经出现的 “优先级翻转”的影响降到最低。

互斥信号量不能用于中断服务函数中, 原因如下:

互斥信号量有优先级继承的机制,所以只能用在任务中,不能用于中断服务函数。
中断服务函数中不能因为要等待互斥信号量而设置阻塞时间进入阻塞态。
4、IPC通信的介绍
IPC通信的需要

5、LWIP移植网卡参考
LWIP移植 网卡参考
6、带操着系统的 LWIP 交互
看到那么多函数,是不是头都大了,其实这些函数的实现都是很简单的,首先讲解一下邮箱函数的实现。在LwIP中,用户代码与协议栈内部之间是通过邮箱进行数据的交互的,邮箱本质上就是一个指向数据的指针,API将指针传递给内核,内核通过这个指针访问数据,然后去处理,反之内核将数据传递给用户代码也是通过邮箱将一个指针进行传递。

在操作系统环境下,LwIP会作为一个线程运行,线程的名字叫tcpip_thread,在初始化LwIP的时候,内核就会自动创建这个线程,并且在线程运行的时候阻塞在邮箱上,等待数据进行处理,这个邮箱数据的来源可能在底层网卡接收到的数据或者上层应用程序的数据,总之,tcpip_thread线程在获取到邮箱中的数据时候,就会退出阻塞态,去处理数据,在处理完毕数据后又进入阻塞态中等待数据的到来,如此反复。

信号量与互斥量的实现为内核提供同步与互斥的机制,比如当用户想要发送一个数据的时候,就会调用上层API接口,API接口就会去先发送一个数据给内核去处理,然后尝试获取一个信号量,因为此时是没有信号量的,所以就会阻塞用户线程;内核在知道用户想要发送数据后,就会调用对应的网卡去发送数据,当数据发送完成后就释放一个信号量告知用户线程发送完成,这样子用户线程就得以继续执行。
LWIP:实战指南:https://www.kancloud.cn/jiejietop/tcpip/988564
6、MQTT介绍?
复习笔记3_第1张图片

你可能感兴趣的:(笔记,stm32,c语言)