uip学习笔记

合集下载

Ui框架学习笔记

Ui框架学习笔记
}; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //test.cpp #include "test.h" #include "chrome/views/window/window.h"
2.UI 消息机制....................................................................................................................................2 3.Chrome 控件树...............................................................................................................................3 4.Chrome 消息分发机制...................................................................................................................4 5.基本控件.........................................................................................................................................5

uip

uip

uIP的ARP协议代码分析之一ARP请求对于一个设备用的ARP协议而言,重要的东西包括三方面:1.一个本地的IP与MAC地址的缓存表.以有对应的更新和查询操作.2.一个发送ARP请求的函数.3.一个处理ARP回复的函数.下面我们来看uIP中是如何实现的(代码见uip_arp.c:首先,定义一个缓存表的数据结构,99行起:struct arp_entry {u16_t ipaddr[2];struct uip_eth_addr ethaddr;u8_t time;};只有三个项,很简单第一项是ip地址,16*2=4*8位的,保存四个八位组.第二项是MAC地址.第三项是缓存更新时间.下来是ARP请求发送函数:/*-----------------------------------------------------------------------------------*//*** Prepend Ethernet header to an outbound IP packet and see if we need* to send out an ARP request.*为传出的IP包添加以太网头并看是否需要发送ARP请求.* This function should be called before sending out an IP packet. The* function checks the destination IP address of the IP packet to see* what Ethernet MAC address that should be used as a destination MAC* address on the Ethernet.*此函数应该在发送IP包时调用,它会检查IP包的目的IP地址,看看以太网应该使用什么目的MAC地址.* If the destination IP address is in the local network (determined* by logical ANDing of netmask and our IP address), the function* checks the ARP cache to see if an entry for the destination IP* address is found. If so, an Ethernet header is prepended and the* function returns. If no ARP cache entry is found for the* destination IP address, the packet in the uip_buf[] is replaced by* an ARP request packet for the IP address. The IP packet is dropped* and it is assumed that they higher level protocols (e.g., TCP)* eventually will retransmit the dropped packet.*如果目的IP地址是在局域网中(由IP地址与子网掩码的与逻辑决定),函数就会从ARP缓存表中查找有*无对应项.若有,就取对应的MAC地址,加上以太网头,并返回,否则uip_buf[]中的数据包会被替换成一个*目的IP在址的ARP请求.原来的IP包会被简单的仍掉,此函数假设高层协议(如TCP)会最终重传扔掉的包.* If the destination IP address is not on the local network, the IP* address of the default router is used instead.*如果目标IP地址并非一个局域网IP,则会使用默认路由的IP地址.* When the function returns, a packet is present in the uip_buf[]* buffer, and the length of the packet is in the global variable* uip_len.函数返回时,uip_buf[]中已经有了一个包,其长度由uip_len指定.*//*-----------------------------------------------------------------------------------*/voiduip_arp_out(void){struct arp_entry *tabptr;/* Find the destination IP address in the ARP table and constructthe Ethernet header. If the destination IP addres isn't on thelocal network, we use the default router's IP address instead.//在ARP表中找到目的IP地址,构成以太网头.如果目的IP地址不在局域网中,则使用默认路由的IP.If not ARP table entry is found, we overwrite the original IPpacket with an ARP request for the IP address. *///如果ARP表中找不到,则将原来的IP包替换成一个ARP请求./* First check if destination is a local broadcast. 首先检查目标是不是广播*/if(uip_ipaddr_cmp(IPBUF->destipaddr, broadcast_ipaddr)) {memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6);} else {/* Check if the destination address is on the local network. 检查目标地址是否在局域网内 */if(!uip_ipaddr_maskcmp(IPBUF->destipaddr, uip_hostaddr, uip_netmask)) {/* Destination address was not on the local network, so we need touse the default router's IP address instead of the destinationaddress when determining the MAC address. 目的地址不在局域网内,所以保用默认路由器的地址来确在MAC地址*/uip_ipaddr_copy(ipaddr, uip_draddr);} else {/* Else, we use the destination IP address. 否则,使用目标IP地址*/uip_ipaddr_copy(ipaddr, IPBUF->destipaddr);}for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {//这里遍历表,对比目的IP与ARP缓存表中的IP.tabptr = &arp_table;if(uip_ipaddr_cmp(ipaddr, tabptr->ipaddr)) {break;}}if(i == UIP_ARPTAB_SIZE) {/* The destination address was not in our ARP table, so weoverwrite the IP packet with an ARP request. 如果遍历到头没找到,将原IP包替换为ARP请求并返回*/memset(BUF->ethhdr.dest.addr, 0xff, 6);memset(BUF->dhwaddr.addr, 0x00, 6);memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);uip_ipaddr_copy(BUF->dipaddr, ipaddr);uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr);BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */BUF->hwtype = HTONS(ARP_HWTYPE_ETH);BUF->protocol = HTONS(UIP_ETHTYPE_IP);BUF->hwlen = 6;BUF->protolen = 4;BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);uip_appdata = &uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN];uip_len = sizeof(struct arp_hdr);return;}/* Build an ethernet header. 如果是在局域网中,且在ARP缓存中找到了(如果没找到进行不到这一步,在上面就返回了),则构建以太网头*/memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6);}memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6);IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP);uip_len += sizeof(struct uip_eth_hdr);}以上内容自325行起.下面再总结一下其基本顺序:用IPBUF->ethhdr.dest.addr来存储目的IP地址,它有可能是局域网内一主机IP,也可能是路由器IP(如果是发往外网,即原来的目的IP不在局域网内),还有可能是广播专用的IP. 先看是不是在广播:如果是广播,将IPBUF->ethhdr.dest.addr设为广播IP.再看是不是在局域网内:如果不是,则将IPBUF->ethhdr.dest.addr设为路由器IP.如果在局域网内,查看是否已经存在于ARP缓存表中:如果不在,将要发送的换成ARP请求,返回.如果已存在,则查找使用查找到的MAC地址为IP包添加以太网头.这里还要解释一些细节问题,主要是:1.如何在IP包上添加以太网头2.如果将IP包替换成ARP请求,ARP请求的格式是什么.3.广播地址这些问题将在二楼来说.将IP包替换成ARP请求部分代码(实际上IP包是放在uip_buf[]里的,这里只是将uip_buf[]填充上ARP请求即可),于uip_arp.c的388行:/* The destination address was not in our ARP table, so weoverwrite the IP packet with an ARP request. */memset(BUF->ethhdr.dest.addr, 0xff, 6);memset(BUF->dhwaddr.addr, 0x00, 6);memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);uip_ipaddr_copy(BUF->dipaddr, ipaddr);uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr);BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */BUF->hwtype = HTONS(ARP_HWTYPE_ETH);BUF->protocol = HTONS(UIP_ETHTYPE_IP);BUF->hwlen = 6;BUF->protolen = 4;BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);uip_appdata = &uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN];uip_len = sizeof(struct arp_hdr);return;首先解释这里的BUF(于uip_arp.c的116行):#define BUF ((struct arp_hdr *)&uip_buf[0])可见这里的BUF就是uip_buf[],只不过这里将它取做一个struct arp_hdr的结构体:struct arp_hdr {struct uip_eth_hdr ethhdr;u16_t hwtype; //硬件类型u16_t protocol; //协议类型u8_t hwlen;u8_t protolen;u16_t opcode; //操作码struct uip_eth_addr shwaddr; //源以太网地址u16_t sipaddr[2]; //源IP地址struct uip_eth_addr dhwaddr; //目的以太网地址u16_t dipaddr[2]; //目的IP地址};struct uip_eth_hdr {struct uip_eth_addr dest;struct uip_eth_addr src;u16_t type;};这是arp_hdr的第一个成员ethhdr的类型定义,对应图片中的前三项:6+6+2,目的以太网地址,源以太网地址,2字节数据类型(ARP请求和应答为0x0806).struct arp_hdr的第二个成员u16_t hwtype,对应图片中第三项,2字节硬件类型(值为1表示以太网).struct arp_hdr的第三个成员u16_t protocol,对应图片中第四项,2字节要映射的协议地址类型(ip地址为0x0800).struct arp_hdr的第四个成员u8_t hwlen,对应图片中第五项,1字节硬件地址长度(对MAC地址来说为6).struct arp_hdr的第五个成员u8_t protolen,对应图片中第六项,1字节协议地址长度(对IP地址来说为4).struct arp_hdr的第六个成员u16_t opcode,对应图片中第七项,2字节操作码(1 ARP请求,2 ARP应答,3 RARP请求,4 RARP应答,必须字段).struct arp_hdr的第七个成员struct uip_eth_addr shwaddr,对应图片中第八项,6字节源以太网地址.struct arp_hdr的第八个成员u16_t sipaddr[2];,对应图片中第九项,2字节源IP地址.struct arp_hdr的第九个成员struct uip_eth_addr dhwaddr,对应图片中第十项,6字节目标以太网地址.struct arp_hdr的第十个成员u16_t dipaddr[2];,对应图片中第十一项,2字节目标IP地址.上面绿色的表示已经详解的,红字的表示要进一步说明的.这就是一个ARP帧的结构,可以看到,里面的源和目的以太网地址都是重复的.我们再看函数中的代码:memset(BUF->ethhdr.dest.addr, 0xff, 6);memset(BUF->dhwaddr.addr, 0x00, 6);memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);这里四个memset,重复的源和目的以太网地址一起设置了,四个memset对应图片中的1,10,2,8项.但是:对1和10两项,都是源以太网地址,但置的值是不同的,分别为0xff*6和0x00*6.为什么会这样呢?因为他们的用处不一样,见:【相关资料】ARP分组格式(帧格式,报文格式)6+6–以太网的源地址和目的地址,目的地址为全1的为广播地址注意这里说,目的地址为全为1的广播地址.什么意思?当你发送一个ARP请求是,你是想知道一个IP对应的以太网地址(即MAC地址),但是你现在不知道目的主机的以太网地址,你问谁啊?不知道问谁,这种情况下,只能是广播一下了,0xff*6就是广播地址.从图片中可以看到,ARP包是分成两部分的,前6+6+2叫做"以太网首部",它的意义就是"分组是从谁(源地址)发给谁(目的地址)的什么类型(帧类型,请求和应答为0x0806)",第二部分则是内容.来看这个例子:请求帧如下(为了清晰在每行的前面加了字节计数,每行16个字节):以太网首部(14字节)0000: ff ff ff ff ff ff 00 05 5d 61 58 a8 08 06ARP帧(28字节)0000: 00 010010: 08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 370020: 00 00 00 00 00 00 c0 a8 00 02填充位(18字节)0020: 00 77 31 d2 50 100030: fd 78 41 d3 00 00 00 00 00 00 00 00以太网首部:目的主机采用广播地址,源主机的MAC地址是00:05:5d:61:58:a8,上层协议类型0x0806表示ARP。

webUI课堂笔记汇总

webUI课堂笔记汇总

Ps的基本操作1布局2工作区设置(窗口---工作区---默认复位工作区)3首选项设置(编辑--首选项--单位与标尺改为像素)4视图放大/缩小Ctrl +/- a lt +鼠标滚轮空格+鼠标左键拖动画布适合屏幕ctrl+0实际像素ctrl+15 新建ctrl+N单位:像素分辨率:72像素/英寸颜色模式:RGB 8位6保存格式psd(源文件格式)7 历史记录(后退ctrl+alt+z 前进ctrl+shift +z 还原ctrl+z)8隐藏额外辅助线ctrl+h9填充前景色alt+del 填充背景色ctrl+del填充有透明区域的图层颜色前景色alt+shift+del 背景色ctrl+shift+del10扩展画布(图像--画布大小)注意定位点的选择图层1理解图层---承载信息的容器方便独立操作和修改2图层选择--(移动工具按ctrl+鼠标左键点选;勾选移动工具选项栏中自动选择)3图层的复制Ctrl+J alt+鼠标左键拖动(移动工具)4图层的顺序上方图层遮挡下方图层Ctrl+左右中括号向下移动/向上移动ctrl+shift+[ / ]移动到最底层/最顶层5图层的多选(移动工具ctrl+shift+鼠标点选;勾选自动选择shift+鼠标点选)6组的建立ctrl+g (选中需要建组的图层)删除组的结构ctrl+shift+g注意:移动工具选项栏里组和图层的选择7网页的基本板块划分头部区域header视觉区域banner主要内容main 底部信息footer8智能对象图层a缩小后再放大不影响图片的清晰度,选中图层右键选择栅格化图层B可以记录滤镜、变形参数方便随时修改9图层的合并选中需要合并的图层ctrl+E标尺与辅助线1标尺(视图--标尺)ctrl+R2吸附作用(视图--对齐)3标尺右键选择百分比恢复到像素4隐藏辅助线ctrl+;5 锁定ctrl+alt+;选区1选区选项栏样式选择固定大小恢复到正常2查看单位(窗口--信息f8)3选区上右键选择变换选区4取消选区ctrl+D5选区的布尔运算(shift加选alt减选shift+alt相交)6载入选区,按住ctrl键点击图层的缩略图形状工具1搭建大区块(选项栏选择形状)2直线按住shift画直线3多边形工具(选项栏边数设置)4圆角矩形工具(选项栏半径设置控制圆角弧度)5路径选择工具——小黑选择整体路径6直接选择工具 ---- 小白选择独立锚点按住shift加选锚点7椭圆工具按住shift画正圆8隐藏路径线ctrl+shift+h9布尔运算(shift加选alt减选shift+alt相交)对齐与分布1对齐选中两个或两个以上图层2分布选中三个或三个以上图层字符面板1文本的创建A点文本b段落文本2退出文本编辑状态ctrl+回车3字号大小ctrl+shift+</>4字行距(大段文本字号1.5到2倍)Alt+上下方向键5字间距(大段文本间距为0)Alt+左右方向键6像素字在字符面板右下角选择“无”7中英文混排(先设置中文再设置英文)段落面板1避头尾法则:严格2首行缩进(字号的两倍)3段后空格(字号的两倍)4最后一行左对齐(强制两端对齐)PC平台网页设计规范1分辨率72像素/英寸2颜色模式RGB 8位3网页背景A纯色平铺(自适应浏览器)B渐变色或底纹平铺(自适应浏览器)C通栏大图片宽度1920像素4屏幕分辨A标准分辨率1024px/768px 有效设计内容宽度1000px 首屏高约700pxB常用分辨率1280px/800px 有效设计内容宽度1200px 首屏高约750px5设计文档大小A设计文档宽度只要大于有效设计内容宽(目的表现设计意图展现背景效果建议左右各宽出200px)B针对通栏大图片设计文档宽度1920pxPC平台字体使用规范1字体分类A图形化文字b像素字(系统字)2系统安全字中文(宋体微软雅黑黑体)西文(Arial Times) 3字号中文(12px--18px )针对正文内容西文(12px--16px )针对正文内容最小10px渐变工具1类型:线性径向角度对称菱形2渐变编辑器下方色标控制颜色上方色标控制透明度菱形色标控制渐变中心点点击添加色标删除色标拖动到下方3渐变工具选项栏其他属性A反向b勾选仿色渐变过渡更平滑c勾选透明区域支持渐变编辑器里的透明效果图层样式1添加方法:在选中图层右边空白处双击添加2复制图层:选中图层右键选中拷贝图层样式,需添加图层样式的图层上右键粘贴图层样式鼠标指到效果或fx图标上按alt复制3上方图层样式会遮挡下方样式常用属性1渐变:可以拖动渐变效果,勾选与图层对齐2描边:一般为了避免虚边产生,选择内部描边描边类型:颜色渐变图案3投影:角度(控制光源) 注意全局光的选择扩展(投影的虚化效果)大小距离自由变换工具1编辑--自由变换ctrl+T 按住shift等比例缩放2按住ctrl可以调节图像的形状(斜切扭曲的功能)3shift+alt沿中心点等比例缩放4ctrl+shift+alt调节透视功能5ctrl+T 右键选择变形图案的定义与填充1定义(编辑--定义图案)找到适合重复的图形,用选区选中图案范围定义般情况透明底色2填充(编辑--填充--图案)基本抠图工具1魔棒工具(针对纯色背景)容差值越高,相近颜色的容忍范围越大,反之,越小2钢笔工具(精确造型)A在抠图选项栏选择路径B单击产生起始锚点C左键点住拖动产生贝塞尔曲线D取消贝塞尔曲线一侧滑竿在锚点上按住alt键点击E路径转换选区ctrl+回车F在路径面板中找钢笔路径G在钢笔工具下按住alt键切换到转换点工具基本的调色工具(图像---调整)1色阶ctrl+L调整图片明暗对比关系暗部滑块向右拖动暗部变暗亮部滑块向左拖动亮部变亮灰度滑块向左拖动变亮向右拖动变暗2曲线ctrl+M 精细调色点击增加锚点,按del删除锚点3色相/饱和度ctrl+U可以单独调整图像中某个指定的颜色4色彩平衡ctrl+B原理:在图像中增加某个特定颜色的比重注意:阴影中间调高光的选择剪切蒙版1添加方法:在两个图层的中间按住alt点击2原理:通过下方图层的显示范围控制上方图层的显示3一个下方图层可以剪切多个上方图层滤镜1高斯模糊(滤镜--模糊--高斯模糊)半径值越大越模糊,反之越清晰图层蒙版1添加方法:点击图层蒙版小图标2原理:与图层捆绑在一起,用图层蒙版控制原图层的显示范围白色100%显示图层黑色100%隐藏图层灰色控制透明度3主要用画笔工具配合使用笔触大小左右中括号键[/](在英文输入法状态)4回到默认前景色背景色 D 切换x线框图1内容大纲(有什么)2信息架构(在哪里)3层级关系(内容的主次)4 一般单色(黑白灰)图层调整层1添加方法:点击调整图层图标2优点:a调色参数保留方便随时修改B针对下方所有可见图层统一调色C不破坏原图的色彩信息全屏展示类网站1应用领域:汽车、地产、美妆、影视、游戏、个人、活动2尺寸:宽度:1920px高度:1000px 有效设计内容: 3设计特点:1200px一屏显示以图为主布局灵活4必要设计元素Loadi ng 音乐开关全屏按钮内页关闭按钮5优缺点优点:画面展示感强缺点:加载速度慢不适合响应式设计画笔工具1大小调整左右中括号键(英文输入法)2大小锁定键控制笔触轮廓显示形态3画笔面板(f5)A画笔预设(选择适合画笔)B间距调整间距大小控制画线还是点形状动态---大小抖动(随机产生不同大小点)散布勾选双轴随机分散大小点画笔描边A新建图层B调试画笔(选择适合画笔调节大小粗细笔刷形态)C用钢笔工具勾选适合路径路径面板里工作路径右键选择描边路径(选择画笔勾选模拟压力)D默认在钢笔工具下按Ctrl临时切换到小白按alt切换转换点工具ctrl+alt可复制E快速填充:在画笔工具下点回车按Ctrl临时切换到小白按ctrl+shift可多选ctrl+alt 可复制图层的混合模式1用于两个或两个以上图层的混合2常用混合模式A正片叠底图片暗部色彩信息混合使图片更暗B滤色图片亮部色彩信息混合使图片更亮C叠加图片中间调混合D柔光图片中间调混合使混合更柔和通道1通道类型:原色通道原色合成通道alpha通道(非色彩通道)2概念:通过灰阶的多少显示此种颜色的比重白色100%显示黑色100%隐藏灰色:透明度3载入选区按Ctrl点击通道缩略图4半透明图像抠图A选择适合通道B载入所选通道选区C回到原合成图层ctrl+J复制图层5复杂轮廓抠图A选择边缘反差最大通道B复制通道,通过色阶、曲线进一步加大反差C用画笔、钢笔工具涂抹图像,得到黑白剪影D在通道载入选区E回到图层面板,反选选区ctrl+shift+I 复制图层ctrl+J调整边缘(针对选区边缘调整)1视图:选择背景图层(透明底色图层)2半径---选区宽度羽化---选区虚化值3用调整半径工具涂抹发丝可去掉背景色4输出选择:输出带有图层蒙版的图层响应式设计(iphone 4\5)1分辨率:72像素/英寸颜色模式:RGB 8位2尺寸A整体尺寸:4: 640px/960px 5:640px/1136px 注意文档大小宽度:B按钮尺寸最小:40px/40px 常规按钮:80px/pxC字体大小:最小24px(中文)22px(西文)最大34px系统安全字:中文:苹果丽黑微软雅黑(锐利)西文:arialD输入框:最小高:62pxE偶数原则3设计注意事项:A导航:导航图标化B图片布局:一行最多c设计风格:板块简洁4视图技巧Ctrl加减号减三次GUI展示1作用:a规范化、标准化设计元素b展示整体效果2内部区块(参考)A效果图展示b按钮和控件 c icon图标D标准色和标准字Web UI美术字体设计i字体设计A字库设计b商业标示字体c环境用字640px左右滑动多行显示(偶数)2到3张图片具有拓展性2 banner字体设计方法A选择适合字体B调节整体透视变化C统一笔画特点(在字体图层右键选择转换为形状)D统一笔画的粗细比例倾斜度(钢笔工具按Ctrl切换小白按alt切换转换点)E突出重点字字体变形的常见方法1横细竖粗法2尖角字法3柔美曲线法4书法体法。

uip移植笔记

uip移植笔记

本笔记适用于uIP1.0。

移植平台介绍:MSP430F149+cs8900a+IAR1、阅读The uIP Embedded TCP/IP Stack The uIP 1.0 Reference Manual.2、建立一个文件夹,起名myport,将uip-1.0下的uIP和lib两个文件夹拷贝过去,然后再在myport下建立app文件夹。

3、将unix子文件夹下的clock-arch.c、clock-arch.h拷贝到myport下,这个文件实现协议栈所用的时钟,由430的定时器完成,有三个函数:clock_time_t clock_time(void){return ticks;}void clock_init(void){定时器的初始化工作}__interrupt void timer_interrupt(void)/*定时器中断函数*/{++ticks;}。

4、将unix子文件夹下的uip-conf.h拷贝到myport下,这个文件实现协议栈所用的配置,按照需要修改之。

5、写cs8900a的驱动函数,这里采用8位、查询模式,替换tapdev.c 或slipdev.c。

6、将unix子文件夹下的main.c函数拷贝到myport下,这个是主调度流程,按照需要修改。

7、建立自己的工程,将以上文件包含。

8、调试,改错。

其中,uip的缓冲区是以字节数组的形式产生,为了保证它的起始地址是偶数,必须指定地址。

UDP的初始化如下void myudp_init(void){uip_ipaddr_t ipaddr;//定义IP类型变量uip_ipaddr(ipaddr, 210,29,104,88); //远程IP为210.29.104.88if(myudp_conn != NULL){uip_udp_remove(myudp_conn);//如果连接已经建立,则删除之}myudp_conn = uip_udp_new(&ipaddr, HTONS(1000));//建立到远程ipaddr,端口为1000的连接if(myudp_conn != NULL){uip_udp_bind(myudp_conn, HTONS(2000));//绑定本地端口为2000,也就是2000-->1000 发数据}}void myudp_send(char *str,short n){char *nptr;nptr = (char *)uip_appdata;memcpy(nptr, str, n);uip_udp_send(n); //发送n个数据}void newdata(){char *nptr;short len;len = uip_datalen();//读取数据长度nptr = (char *)uip_appdata; //取得数据起始指针if(len<4)myudp_send("Please check the command!\n",26);else if(strncmp(nptr,"getname",7)==0)myudp_send("My name is xiaomu.",19);else myudp_send("Unkown command!\n",16);}/*---------------------------------------------------------------------------*//** \internal* The main UDP function.*//*---------------------------------------------------------------------------*/voidmyudp_appcall(void){if(uip_udp_conn->rport == HTONS(1000)){if(uip_poll()) {myudp_send("hello\n",6);//定时时间到,发hello}if(uip_newdata()) //如果指定IP的指定端口发来数据{newdata();}}}TCP的和这个差不多,初始化时就监听端口uip_listen(HTONS(23));myudp_conn = uip_udp_new(&ipaddr, HTONS(0));//如果远程ipaddr为0,端口也为0,则可以接收来自任何ip任何端口的信息,但必须指定本地端口,即要绑定。

unix环境高级编程读书笔记

unix环境高级编程读书笔记

Unix环境高级编程读书笔记Unix环境高级编程是一本经典的计算机编程指南,它深入探讨了Unix 操作系统的各个方面,并提供了大量有关高级编程和系统级编程的知识。

在本文中,我将根据这本书的内容,为您撰写一份读书笔记,希望能够帮助您更深入地理解Unix环境的高级编程。

1. Unix环境概述Unix操作系统诞生于20世纪70年代初,在经过几十年的发展之后,成为了当今世界上最流行的操作系统之一。

Unix系统以其稳定性、可靠性和安全性而闻名,被广泛应用于服务器、工作站和嵌入式系统中。

Unix环境高级编程这本书就是帮助读者深入理解Unix操作系统的各个方面,包括文件I/O、进程控制、信号处理、线程和内存管理等内容。

2. 文件I/O文件I/O是Unix编程中的基础,Unix环境高级编程中详细介绍了文件描述符、标准I/O库、文件和目录操作等内容。

这些知识对于理解Unix系统中的文件系统操作非常重要,可以帮助开发人员更好地处理文件和目录,提高程序的效率和稳定性。

3. 进程控制Unix系统以进程为核心,Unix环境高级编程深入探讨了进程的创建、终止、信号处理、进程间通信等内容。

理解这些内容可以帮助开发人员编写更加健壮和高效的多进程程序,提高系统的并发能力和响应速度。

4. 线程和同步Unix环境高级编程还介绍了线程的创建、同步、互斥和条件变量等内容。

线程编程是Unix系统中的重要部分,了解这些知识可以帮助开发人员编写更加高效和安全的多线程程序,提高系统的并发能力和性能表现。

5. 内存管理Unix系统的内存管理也是非常复杂的,Unix环境高级编程对内存分配、共享内存、内存映射等内容进行了深入讲解。

理解这些知识可以帮助开发人员更好地管理系统内存,避免内存泄漏和内存碎片问题,提高系统的稳定性和性能。

总结回顾通过阅读Unix环境高级编程这本书,我对Unix系统的各个方面有了更深入的了解。

文件I/O、进程控制、线程和内存管理等内容让我受益匪浅,我相信这些知识对我的编程能力会有很大的提高。

IPMP学习笔记

IPMP学习笔记

IPMP学习笔记项目定义:项目是一个将被完成的有限任务,它是在一定时间内,满足一系列特定目标的多项相关工作的总称。

项目的约束要素:质量、时间、成本项目的组成要素:范围、组织、质量、费用、时间项目的特征:一次性、目标明确性、整体性项目的属性:唯一性、一次性、多目标、生命周期、相互依赖、冲突属性项目与作业的区别:项目作业项目作业独一无二重复多变的资源需求稳定的资源需求有限时间无限时间柔性组织稳定组织革命性的改变渐进性改变以完成目标为宗旨以完成任务为宗旨不均衡均衡效果性效率性目标间的不均衡均衡风险和不确定性经验性项目利益相关者:投资商/委托人、发起人、项目经理、被委托人/承约商、供应商、分包商、其他项目管理的定义:以项目为对象的系统管理方法,通过一个临时性的专门的柔性组织,对项目进行高效的计划、组织、控制和指导,以实现项目全过程的动态管理和项目目标的综合协调与优化。

项目管理的五项基本任务:计划、组织、质量管理、费用控制、进度控制项目管理与作业管理的区别:作业管理一般只对效率和质量进行考核;项目管理以任务为基础,对时间、费用、风险进行管理。

项目管理的三维管理:时间(按生命周期划分阶段)、知识(针对不同阶段,采用、研究不同的管理方法)、保障。

项目管理的要素:资源是最根本的保证,需求和目标是项目实施结果的基本要求,组织是项目运作的核心实体,环境是成功的基础。

需求=基本需求+期望要求基本需求:范围、质量、利润、成本、时间、法规。

组织包括与它要做的事相关的人和资源及相互关系,由机构和行为构成。

项目组织结构主要有职能式(利于效率)、项目单列式(利于效果)、矩阵式(两者兼备)。

项目管理与部门管理的最大区别:注重于综合性管理,有严格时间限制,组织是临时的柔性的项目管理的体制是基于团队管理的个人负责制。

项目管理的方式是目标管理。

项目管理的最基本的职能:计划、组织、评价与控制(评价是控制的基础和依据;计划必须以适于评价的方式来表达;评价的要素必须与计划要素一致;评价要保证足够的时间间隔)。

详细的processing学习笔记讲解

详细的processing学习笔记讲解

processing 学习第一天笔记Processing Month第一天连接点第一部分这篇文章中,我们来看一下如何计算一个圆周上的点的坐标,并将他们连接起来。

我们将用灵活的方式来实现基于6个点和18个点的图像计算要计算这些点的坐标,必须知道圆上的点数量和圆的半径。

本例中,我们将画12个点。

int numPoint = 12;float radius = 150;下一步,我们来算一下每个点之间的角度。

众所周知一个整圆的角度是360度或2π弧度,所以用360度除以圆上的点数,就得到两点之间的角度。

例子中使用了弧度而不是角度,是因为cos()和sin()函数的形参是弧度数,不是角度数。

Processing中有一些关于圆和半圆的常量,TWO_PI就代表了常量PI*2。

(这里的PVector其实是类型,代表这一个点)float angle = TWO_PI / numPoint;for(int i=0 ; i<numberPoints;i++){float x = cos(angle * i ) * radius;float y = sin(angle * i ) * radius;point[i] = new PVector(x,y );}我把计算的部分放在了setup()里面,把结果存在了PVector数组里,这样我们就不用在draw 函数里一遍又一遍的计算点的x、y坐标。

我还用了一个for循环,用来计算每个点的坐标,**angle*i** 会在每个循环中计算出一个点的坐标。

绘制接下来我们说一下,如何将圆上的点两两连线,我们需要用一个嵌套for循环,来遍历数组中的每一个点。

if语句用来比较i和j的数字,如果他们不相等,电脑就在这两个点之间画一条线。

如果i和j相等,说明是同一个点,那么就不用画线了。

for (int i = 0; i < numPoints; i++) {for (int j = 0; j < numPoints; j++) {if ( j != i ) {line( points<i>.x, points<i>.y,points[j].x,points[j].y );}}}源码:折叠Java 代码复制内容到剪贴板1.int numPoints = 10;2. PVector[] points = new PVector[numPoints];3. float radius =150;4.void setup()5.{6. size(450,400);7.8. float angle = TWO_PI/numPoints;9. for(int i=0;i<numPoints;i++)10. {11. float x = cos(angle * i ) * radius;12. float y = sin(angle * i ) * radius;13. points[i] = new PVector(x,y);14. }15. noLoop();16.}17.18.void draw()19.{20. smooth();21.22. PImage img;23.img = loadImage("images/laDefense.jpg");24.background(img);25. // background(0); //background(0,0,255);26.27. //fill(0,0,255);28. // fill(255,102,255);29. stroke(0,0,255,60);30. translate(width/2,height/2);31. for(int i=0;i<numPoints;i++){32. for(int j=0;j<numPoints;j++)33. {34. if(j!=i) {35. // line( points<i>.x, points<i>.y,points[j].x,points[j].y );36. line( points[i].x, points[i].y,points[j].x,points[j].y );37. }38. }39. }40.saveFrame("images/circle-connection-"+numPoints+".png");41.}成果:processing 学习第二天笔记第二天连接点第二部分今天的例子和昨天的类似,只不过我们将使用随机点代替固定点,连接点的时候也将采用不同的方式。

UI学习笔记

UI学习笔记
阅读文字。 每个段落的开始两个字最为重要,这将决定内容是 否能留住用户。 初始段落,副标题和要点都要保持醒目。 纵向扫描以对比:信息为第一维度要关注的信息, 用户寻找的是最重要而且有差异化的信息,用户扫 描的速度非常快。用户对比中会产生“定位”,从 而产生水平阅读。 横向扫描用以判断:信息为第二维度信息,信息可 以没有差异化,用户会降低扫描的速度以获取更多 有用的信息,帮助自己做判断,要不要点击到详情 页。
F模式对于那些嵌入广告的 网站是极为有用的,即使 有了广告,也不会影响到 内容。只要记住,内容为 王,导航可以让用户更深 入地浏览下去。在所有浏 览模式中,F模式就是一个 引导路线图,而不仅仅是 一个页面。因为,F模式的 网站除了顶部展示区外, 其他的内容会显得更平淡。
F式布局能够奏效的原因,在于F式布局符合用户的浏览习惯,更自然。 符合“从上到下,从左到右”的阅读模式。 但是这种阅读模式有利也有弊: 这样一来,最有价值的内容只能放置在页面顶部了。有些俗套 文本内容无法有效的引起用户注意,用户甚至连摘要都懒得读,看看标题就 “过”了 网页过分注重对“标题”和“图像”的包装,不符合内容至上的原则 在采用F式布局进行设计师,很多设计师感觉自己不像是设计师,而想是制 造噱头的“广告商”。太具备功利性,只追求一时的浏览量,不遵循“内容 为王”的原则,很多用户第一次可能感觉不错,但是看了内容后大呼上当, 可能下一次他们就不会再次访问该网页了。
2
网页浏览模式
就像你的眼睛会更快 关注到快速移动的物体, 在现实生活中,大部分的 人都会被页面中的焦点所 吸引。在这里主要介绍两 种比较常见的页面浏览模 式。
1. Z 模式
2. F 模式
1
Z 模式
Z模式的浏览模式在于网页 内容主要不是文字的页面。 不论是否因为这里有个菜单 栏,还是就仅仅因为从左到 右自上而下的阅读习惯,用 户首先关注的页头水平方向 上的内容。当视线抵达底部 时,又遵循着从左到右的习 惯模式,重复再水平扫视页 尾的最底部的内容。

ui界面设计笔记

ui界面设计笔记

ui界面设计笔记嘿,你想知道UI界面设计这事儿有多奇妙吗?就像搭积木,每一块都得放对地方,才能搭出个超级酷炫的城堡。

我呀,就这么一头扎进了UI 界面设计的世界里,那过程,简直像一场惊心动魄的冒险。

我刚开始学的时候,那真叫一个懵。

看着那些界面元素,就像看着一堆乱码。

我就问我师父:“这都啥跟啥呀,感觉比天书还难。

”师父就笑着说:“你可别被它吓住喽,这就像做菜,每个元素就是一种食材,你得知道怎么搭配才好吃。

”比如说,一个登录界面,那用户名输入框、密码输入框还有登录按钮,就像菜里的肉、菜和调料,少了哪个都不行。

色彩搭配也是个大学问。

我有次自己瞎搞,整个界面那颜色啊,就像被打翻的颜料罐,乱得不行。

我给朋友看,朋友直接大喊:“哎呀,我的眼睛要瞎了,这啥鬼颜色啊!”从那以后,我就知道色彩不能乱配。

得像搭配衣服一样,有个主色调,再加点儿点缀色。

就像穿衣服,全身上下不能都是花里胡哨的颜色,得有个主打风格。

比如说,以蓝色为主色调的界面,给人一种冷静、专业的感觉,再加点儿黄色的小图标做点缀,就像蓝色西装上别了个金色的胸针,立马就精神多了。

布局也很关键呢。

我记得做一个购物APP的界面时,我把商品图片放得老大,简介却小得可怜。

同事就调侃我:“你这是要让用户看画儿啊,字儿都看不见。

”这就告诉我,布局得合理。

就好比你布置房间,床不能放在门口堵着路,家具的大小和摆放位置都得合适。

在界面上也是,重要的元素要放在显眼的地方,次要的元素也不能被忽略,得给它们安排个合适的角落。

交互设计更是UI界面设计的灵魂所在。

有一次我做了个按钮,按下去一点反应都没有,就像敲了个木鱼,只响一声就没动静了。

我自己试了试,心里直骂自己:“我这做的啥玩意儿啊!”后来才明白,用户点了按钮,得给人家个反馈,就像你跟人说话,别人回答你了,你得有点反应,要么点头,要么说句谢谢。

比如说,按钮按下后变色或者有个小动画,这就能让用户知道,“嘿,我的操作成功啦!”在这个UI界面设计的旅程中,我不断地犯错,又不断地改正。

Adobe Illustrator 课堂笔记自整理

Adobe Illustrator 课堂笔记自整理

Adobe Illustrator 课堂笔记第一课一、Illustrator作用:Illustrator10是Adobe公司开发的强大的矢量绘图软件,被广泛应用于平面广告设计,网页图形制作和艺术图形创作等诸多领域,但主要用于印刷。

扩展名ai? 矢量图:是由线段和颜色构成,图形与分辨率无关,可以自由缩放,而不会影响图像的清晰度。

? 位图:位图是由许多像素点构成的,优点是色彩丰富,缺点是与分辩率有关,放大后会失真即马赛克。

二、进入方法:A)双击桌面上快捷方式B)点击开始——程序——Illustrator10C)双击“我的电脑”进行查找三、退出方法:A)点击标题栏上的关闭按钮B)文件菜单——退出C)Alt+F4四、界面构成:标题栏菜单栏工具箱工作区状态栏控制面板画板区草稿区标题栏,菜单栏,工具箱,工作区(草稿区,画板),调板,状态栏五、新建纸张:点击文件菜单——新建(取名及选择纸张大小,方向)——确定注:CMYK:即为全彩模式又称为打印模式。

RGB:是使用最广泛的一种色彩一种模式,显示器使用的就是RGB。

六、常用快捷键:快捷键作用快捷键作用快捷键作用Ctrl+N新建F5画板面板Shift+F5样式面板Ctrl+0定位页面F6颜色面板Shift+F6外观面板Ctrl+”+”放大F7图层面板Shift+F7对齐面板Ctrl+”-”变小F8信息面板Shift+F8变换面板Ctrl+Y切换视图方式F9渐变面板Shift+F9路径面板Ctrl+G组合图形F10画笔轮廓Shift+F10透明面板Ctrl+Shift+G分解图形F11属性面板Shift+F11符号面板七、工具箱:1、)“选择”工具:用于选择对象。

如:整个路径、成组的图形或文字。

Shift选择多个不连续的。

Alt键复制2、)“直接选择”工具:可以选择对象的某一节点或路径线。

3、)“组选择”工具:可以在群组对象中选择单个的对象或复合组。

4、)“魔术棒”工具:用于根据对象的填充或线型属性,选择具有相同填充或线型属性的对象。

uip学习记录

uip学习记录

1. 要知道uip是TCP/IP协议族一种简化并实现的协议栈。

实现TCP/IP协议有uip还有lwip,这两种是比较常用的协议栈,在嵌入式应用中发挥了作用。

2. uip可以作为webclient向指定的网站提交数据,也可以作为一个webserver作为网页服务器,提供一个小型的动态页面访问功能。

3. uip用到的rom有6kb,而ram只有几百字节,相对于lwip更适合于非操作系统的单片机。

Uip的文件架构学习uip需要知道uip协议里到底都有那些东东?1 uip_app; uip_lib, uip本身核心代码,uip底层驱动与以太网控制器模块有关,Uip_app 是uip的一些应用示例程序smtp,rsolve,dhcp,telnetd,以及webclient。

Lib 里边是memb.c是分配内存的文件。

Uip 里边有uip.c timer.c 因为要为TCP和ARP提供定时器服务,比如心跳包,刷新老化程序需要有定时器的配置。

如果使用ENC28U60,还需要ENC28U60.HUip的数据通过网卡Enc28j60从物理层剥离,所以需要先配置Uip和Enc28j60的数据交互。

这个部分在tapdev.c文件中:tapdev_init():网卡初始化函数,初始化网卡的工作模式。

tapdev_read(void):读包函数。

将网卡收到的数据放入全局缓存区uip_buf 中,返回包的长度,赋给uip_len。

void tapdev_send(void):发包函数。

将全局缓存区uip_buf 里的数据(长度放在uip_len 中)发送出去。

在uip1.0中,clock_archo。

C是用来管理时钟的。

├─apps apps目录下为uip提供的一些应用示例│├─dhcpc│├─hello-world│├─resolv│├─smtp│├─telnetd│├─webclient│└─webserver| |___tcpclient| |___tcpcserver│└─httpd-fs├─doc doc下放置的为说明文档,程序中用不上│└─html├─lib lib下为内存块管理函数源码├─uip uip下为uip和核心实现源码└─unix unix环境里的uip应用例子,可以参照这个例子实现应用2 3 4 5 6 7 8 91011 #include "clock-arch.h"#include "stm32f10x.h"extern__IO int32_t g_RunTime;/*---------------------------------------------------------------------------*/ clock_time_tclock_time(void){returng_RunTime;}/*---------------------------------------------------------------------------*/使用stm32 滴答定时器中断代码:User/stm32f10x_it.c1 2 3 4 5 6 7 8 9101112131415 __IO int32_t g_RunTime = 0;voidSysTick_Handler(void){staticuint8_t s_count = 0;if(++s_count >= 10){s_count = 0;g_RunTime++; /* 全局运行时间每10ms增1 */ if(g_RunTime == 0x80000000){g_RunTime = 0;}}}3.uipopt.h/uip-conf.h 是配置文件,用来设置本地的IP 地址、网关地址、MAC 地址、全局缓冲区的大小、支持的最大连接数、侦听数、ARP 表大小等。

UI设计学习笔记

UI设计学习笔记

UI设计学习笔记1.概念用户界面(User Interface)是对用户与系统之间进行交互所采用的方式、途径、内容、布局及结构的总称,用户界面也叫人机界面、人机接口、人机输入输出或人机交互界面等。

2.用户界面设计的原则用户界面设计应该遵循合理、有效、安全的原则。

合理性指的是在用户界面设计过程中应该尽量做到全面、系统、客观、美观和协调。

有效性指用户界面设计应该做到界面友好、操作方便、快速高效、一致规范、灵活适应。

安全性是指设计的用户界面保证系统的数据、操作和功能被可靠使用的能力。

它包括使用权限的设置、检测、保护和修改,对错误的诊断、报告、纠正和保护,以及对输入数据的正确性检查、报告和纠错等方面的能力。

1)3.交互需求分析交互需求分析的主要工作是收集、分析、整理信息系统和用户之间所存在的人机交互处理的需要和内容,可以分析用例图和顺序图中参与者与系统交互的内容,并用对话设计的形式描述出来。

4.界面分布分析界面分布分析的工作是从总体上确定信息系统中各节点的类型、构成和分布情况,设计的所有用户界面将来就要分布在这些节点上。

5.交互方式分析确定信息系统各个节点所采用的人机交互方式,有联机和脱机两种方式。

6.交互流程分析人机交互过程的顺序程式7.输入输出设备分析设备性能会加强或制约输入输出效果。

8.用户分析用户分为外行型、初学型、熟练型和专家型四类,根据不同的用户类型进行界面设计。

9.屏幕界面设计的准则一致性:按键、窗口格式、色彩、界面布局等在整个系统中始终应该保持一致。

框体颜色 外边框 输入框 按钮 登陆界面 蓝色,淡色,40%灰色,淡色,30%线条,淡色,50%灰白色,80% 主界面 线条,淡色,50%灰色,淡色,30%线条,淡色,50%灰白色,80% 子界面 线条,淡色,50%灰色,淡色,30%线条,淡色,50%灰白色,80% 文字部分 标题文字 输入框文字 菜单文字 帮助文字 字体 微软雅黑加粗微软雅黑 微软雅黑 微软雅黑 大小 小四 五号 五号 五号颜色 黑色 灰色,50% 黑色 黑色为熟练用户提供快捷键:快捷键能够提高系统的操作速度。

游戏UI设计项目实战读书笔记

游戏UI设计项目实战读书笔记

《游戏UI设计项目实战》读书笔记目录一、项目背景及作者简介 (2)1. 项目概述 (3)2. 作者介绍及背景 (4)二、游戏UI设计基础知识 (5)1. UI设计概念及重要性 (6)2. 游戏UI设计特点 (7)3. 设计原则与基本流程 (8)三、游戏界面设计实战 (10)1. 界面布局设计 (11)1.1 布局类型选择 (13)1.2 界面元素排列组合 (14)2. 交互按钮设计 (16)2.1 按钮样式设计 (17)2.2 按钮功能实现 (19)3. 界面风格与主题设计 (20)3.1 风格选择 (22)3.2 主题色彩搭配 (24)四、游戏角色UI设计实战 (25)1. 角色形象设计 (27)1.1 角色定位分析 (29)1.2 形象创意构思 (30)2. 角色技能UI展示设计 (31)2.1 技能图标设计 (33)2.2 技能展示动画设计 (35)五、游戏道具UI设计实战 (36)1. 道具类型及功能介绍 (37)2. 道具界面布局设计优化策略及案例分析等详细内容展开介绍每个环节的实战经验和技巧分享39一、项目背景及作者简介随着数字娱乐产业的蓬勃发展,游戏行业日益成为技术与创意交融的前沿领域。

在这样的大背景下,《游戏UI设计项目实战》一书应运而生,旨在为游戏UI设计师提供一套系统、实用的设计方法和实战经验。

本书不仅涵盖了游戏UI设计的基础理论,更通过实战项目的方式,让读者在实际操作中掌握技能,提升设计水平。

本书的作者是一位在游戏UI设计领域拥有多年经验的资深专家。

他曾在多家知名游戏公司担任UI设计师、设计主管等职务,积累了丰富的实战经验。

对游戏UI设计的趋势、玩家心理、技术实现等方面有着深刻的理解和独到的见解。

他的著作不仅限于本书,还涉及游戏设计、用户体验设计等多个领域,广受读者好评。

在这本书中,作者详细阐述了游戏UI设计的重要性以及当前市场的发展趋势。

游戏UI设计不仅仅是美观的界面设计,更是游戏体验的关键所在。

IPMP培训笔记(上传)

IPMP培训笔记(上传)

IPMP培训笔记一、项目与项目管理1、项目概念:项目是有目标的一次性、临时性、整体性和唯一性的活动。

项目的主要属性:独特性/一次性、多目标性、生命周期属性、相互依赖性、冲突属性。

独特性体现在管理的意识上,反对经验主义。

项目驱动于目标。

权力是一种影响力。

一次性给管理带来的问题是临时性(资源的配置、管理权限)。

2、成功的项目管理是利益相关者对项目管理成果的认可和欣赏。

让利益相关者满意(项目干糸人)。

能力等于态度+知识+经验。

项目是管理的技术。

管理是识别规律和利用规律的过程。

现代项目管理(PMP、IPMP)。

网络图后才有甘特图。

单代号网络最优。

学到的不是方法而是方法论。

项目管理提供了一种创新的平台。

3、项目与企业战略的关系:项目经理的作用主要在计划过程中。

项目管理与企业管理的区别:对象的特定性,组织的临时性,管理人员的专业性、权威性。

对前期工作不重视导致决策后的失误。

项目分项目(交付物)、大型项目(项目集——战略目标)、项目组合(项目群——资源分配)。

变化是按计划去变的。

项目管理的核心理念:以目标为导向、以计划为基础、以控制为手段、以客户为中心。

4、目标分为成果性(产品——干活者)目标和约束性目标(成本、进度、质量——管理者)。

多目标的平衡。

项目SMART目标: S明确的、M可度量的、A可完成的、R洽当的、T可跟踪的目标。

目标管理(MBO):明确目标、定期评估、采取行动。

5、项目管理过程:启动、计划、执行、控制、结束。

PDCA循环:计划、执行、检查、改进。

6、项目管理(MOP)步骤:明确目标(成果性目标——项目、约束性目标——时间、质量、费用等)、目标分解(工作分解结构WBS)、任务分解(工作分解结构WBS)、统筹安排(网络计划技术,及里程碑、甘特图、累计费用曲线、资源负荷图)、动态控制(挣值法,及里程碑、甘特图、累计费用曲线、资源负荷图)。

7、两个信息:偏差、趋势。

偏差太大,可把这个项目关闭再重新启动新项目。

web UI课堂笔记汇总

web UI课堂笔记汇总

Ps的基本操作1布局2工作区设置(窗口---工作区---默认复位工作区)3首选项设置(编辑--首选项--单位与标尺改为像素)4视图放大/缩小ctrl +/- alt +鼠标滚轮空格+鼠标左键拖动画布适合屏幕ctrl+0实际像素ctrl+15新建ctrl+N单位:像素分辨率:72像素/英寸颜色模式:RGB 8位6保存格式psd(源文件格式)7历史记录(后退ctrl+alt+z 前进ctrl+shift +z 还原ctrl+z)8隐藏额外辅助线ctrl+h9填充前景色alt+del 填充背景色ctrl+del填充有透明区域的图层颜色前景色alt+shift+del 背景色ctrl+shift+del10 扩展画布(图像-- 画布大小)注意定位点的选择图层1理解图层---承载信息的容器方便独立操作和修改2图层选择--(移动工具按ctrl+鼠标左键点选;勾选移动工具选项栏中自动选择)3图层的复制Ctrl+J alt+鼠标左键拖动(移动工具)4图层的顺序上方图层遮挡下方图层Ctrl+左右中括号向下移动/向上移动ctrl+shift+[ / ] 移动到最底层/最顶层5图层的多选(移动工具ctrl+shift+鼠标点选;勾选自动选择shift+鼠标点选)6组的建立ctrl+g (选中需要建组的图层)删除组的结构ctrl+shift+g注意:移动工具选项栏里组和图层的选择7网页的基本板块划分头部区域header 视觉区域banner 主要内容main 底部信息footer8智能对象图层a缩小后再放大不影响图片的清晰度,选中图层右键选择栅格化图层B 可以记录滤镜、变形参数方便随时修改9图层的合并选中需要合并的图层ctrl+E标尺与辅助线1标尺(视图--标尺) ctrl+R2吸附作用(视图--对齐)3 标尺右键选择百分比恢复到像素4隐藏辅助线ctrl+;5锁定ctrl+alt+;选区1选区选项栏样式选择固定大小恢复到正常2 查看单位(窗口--信息f8)3 选区上右键选择变换选区4 取消选区ctrl+D5选区的布尔运算(shift 加选alt 减选shift+alt 相交)6载入选区,按住ctrl键点击图层的缩略图形状工具1搭建大区块(选项栏选择形状)2直线按住shift画直线3多边形工具(选项栏边数设置)4圆角矩形工具(选项栏半径设置控制圆角弧度)5路径选择工具-------小黑选择整体路径6直接选择工具------ 小白选择独立锚点按住shift加选锚点7 椭圆工具按住shift 画正圆8隐藏路径线ctrl+shift+h9布尔运算(shift 加选alt 减选shift+alt 相交)对齐与分布1对齐选中两个或两个以上图层2分布选中三个或三个以上图层字符面板1文本的创建A 点文本 b 段落文本2 退出文本编辑状态ctrl+回车3字号大小ctrl+shift+</>4字行距(大段文本字号1.5到2倍)Alt+上下方向键5字间距(大段文本间距为0)Alt+左右方向键6像素字在字符面板右下角选择“无”7中英文混排(先设置中文再设置英文)段落面板1避头尾法则:严格2首行缩进(字号的两倍)3 段后空格(字号的两倍)4最后一行左对齐(强制两端对齐)PC平台网页设计规范1分辨率72像素/英寸2颜色模式RGB 8位3网页背景A 纯色平铺(自适应浏览器)B 渐变色或底纹平铺(自适应浏览器)C通栏大图片宽度1920像素4屏幕分辨A 标准分辨率1024px/768px 有效设计内容宽度1000px 首屏高约700pxB常用分辨率1280px/800px 有效设计内容宽度1200px 首屏高约750px5设计文档大小A设计文档宽度只要大于有效设计内容宽(目的表现设计意图展现背景效果建议左右各宽出200px)B 针对通栏大图片设计文档宽度1920pxPC平台字体使用规范1字体分类A图形化文字 b 像素字(系统字)2系统安全字中文(宋体微软雅黑黑体)西文(Arial Times)3字号中文(12px--18px)针对正文内容西文(12px--16px)针对正文内容最小10px渐变工具1类型:线性径向角度对称菱形2渐变编辑器下方色标控制颜色上方色标控制透明度菱形色标控制渐变中心点点击添加色标删除色标拖动到下方3渐变工具选项栏其他属性A反向b勾选仿色渐变过渡更平滑c勾选透明区域支持渐变编辑器里的透明效果图层样式1添加方法:在选中图层右边空白处双击添加2复制图层:选中图层右键选中拷贝图层样式,需添加图层样式的图层上右键粘贴图层样式鼠标指到效果或fx图标上按alt复制3 上方图层样式会遮挡下方样式常用属性1渐变:可以拖动渐变效果,勾选与图层对齐2描边:一般为了避免虚边产生,选择内部描边描边类型:颜色渐变图案3投影:角度(控制光源)注意全局光的选择扩展(投影的虚化效果)大小距离自由变换工具1编辑--自由变换ctrl+T 按住shift等比例缩放2 按住ctrl 可以调节图像的形状(斜切扭曲的功能)3 shift+alt 沿中心点等比例缩放4 ctrl+shift+alt 调节透视功能5 ctrl+T 右键选择变形图案的定义与填充1定义(编辑--定义图案)找到适合重复的图形,用选区选中图案范围定义, 一般情况透明底色2填充(编辑--填充--图案)基本抠图工具1魔棒工具(针对纯色背景)容差值越高,相近颜色的容忍范围越大,反之,越小2钢笔工具(精确造型)A在抠图选项栏选择路径B单击产生起始锚点C左键点住拖动产生贝塞尔曲线D取消贝塞尔曲线一侧滑竿在锚点上按住alt键点击E 路径转换选区ctrl+回车F 在路径面板中找钢笔路径G 在钢笔工具下按住alt键切换到转换点工具基本的调色工具(图像---调整)1色阶ctrl+L 调整图片明暗对比关系暗部滑块向右拖动暗部变暗亮部滑块向左拖动亮部变亮灰度滑块向左拖动变亮向右拖动变暗2曲线ctrl+M 精细调色点击增加锚点,按del删除锚点3色相/饱和度ctrl+U可以单独调整图像中某个指定的颜色4色彩平衡ctrl+B原理:在图像中增加某个特定颜色的比重注意:阴影中间调高光的选择剪切蒙版1添加方法:在两个图层的中间按住alt点击2原理:通过下方图层的显示范围控制上方图层的显示3一个下方图层可以剪切多个上方图层滤镜1高斯模糊(滤镜--模糊--高斯模糊)半径值越大越模糊,反之越清晰图层蒙版1添加方法:点击图层蒙版小图标2原理:与图层捆绑在一起,用图层蒙版控制原图层的显示范围白色100%显示图层黑色100%隐藏图层灰色控制透明度3主要用画笔工具配合使用笔触大小左右中括号键[/](在英文输入法状态) 4 回到默认前景色背景色D 切换x线框图1内容大纲(有什么)2信息架构(在哪里)3层级关系(内容的主次)4一般单色(黑白灰)图层调整层1添加方法:点击调整图层图标2优点:a调色参数保留方便随时修改B 针对下方所有可见图层统一调色C 不破坏原图的色彩信息全屏展示类网站1应用领域:汽车、地产、美妆、影视、游戏、个人、活动2尺寸:宽度:1920px 高度:1000px 有效设计内容:宽度1200px 3设计特点:一屏显示以图为主布局灵活4必要设计元素Loading 音乐开关全屏按钮内页关闭按钮5优缺点优点:画面展示感强缺点:加载速度慢不适合响应式设计画笔工具1 大小调整左右中括号键(英文输入法)2 大小锁定键控制笔触轮廓显示形态3画笔面板(f5)A 画笔预设(选择适合画笔)B 间距调整间距大小控制画线还是点形状动态---大小抖动(随机产生不同大小点)散布-------勾选双轴随机分散大小点画笔描边A 新建图层B调试画笔(选择适合画笔调节大小粗细笔刷形态)C 用钢笔工具勾选适合路径路径面板里工作路径右键选择描边路径(选择画笔勾选模拟压力)D 默认在钢笔工具下按ctrl 临时切换到小白按alt 切换转换点工具ctrl+alt 可复制E快速填充:在画笔工具下点回车按ctrl 临时切换到小白按ctrl+shift 可多选ctrl+alt 可复制图层的混合模式1 用于两个或两个以上图层的混合2常用混合模式A正片叠底图片暗部色彩信息混合使图片更暗B 滤色图片亮部色彩信息混合使图片更亮C 叠加图片中间调混合D 柔光图片中间调混合使混合更柔和通道1通道类型:原色通道原色合成通道alpha通道(非色彩通道)2概念:通过灰阶的多少显示此种颜色的比重白色100%显示黑色100% 隐藏灰色:透明度3载入选区按ctrl点击通道缩略图4半透明图像抠图A 选择适合通道B 载入所选通道选区C 回到原合成图层ctrl+J 复制图层5复杂轮廓抠图A 选择边缘反差最大通道B 复制通道,通过色阶、曲线进一步加大反差C 用画笔、钢笔工具涂抹图像,得到黑白剪影D 在通道载入选区E回到图层面板,反选选区ctrl+shift+I 复制图层ctrl+J调整边缘(针对选区边缘调整)1视图:选择背景图层(透明底色图层)2半径---选区宽度羽化---选区虚化值3用调整半径工具涂抹发丝可去掉背景色4输出选择:输出带有图层蒙版的图层响应式设计(iphone 4\5)1分辨率:72像素/英寸颜色模式:RGB 8位2尺寸A整体尺寸:4: 640px/960px 5:640px/1136px 注意文档大小宽度:640px B按钮尺寸:最小:40px/40px 常规按钮: 80px/pxC 字体大小:最小24px(中文) 22px(西文) 最大34px系统安全字:中文:苹果丽黑微软雅黑(锐利)西文:arialD 输入框:最小高:62pxE 偶数原则3设计注意事项:A导航:导航图标化左右滑动多行显示(偶数)B图片布局:一行最多2到3张图片c设计风格: 板块简洁具有拓展性4 视图技巧Ctrl 加减号减三次GUI展示1作用:a 规范化、标准化设计元素b展示整体效果2内部区块(参考)A效果图展示b 按钮和控件c icon图标D 标准色和标准字Web UI 美术字体设计1字体设计A 字库设计 b 商业标示字体c 环境用字2 banner字体设计方法A 选择适合字体B调节整体透视变化C 统一笔画特点(在字体图层右键选择转换为形状)D 统一笔画的粗细比例倾斜度(钢笔工具按ctrl 切换小白按alt 切换转换点)E 突出重点字字体变形的常见方法1横细竖粗法2 尖角字法3柔美曲线法4书法体法。

QTP学习笔记

QTP学习笔记

一、QTP概述1、对象库模式1. 录制的时候,QTP将我们操作过的所有对象都记录下来,保存在对象库object repository中,记录的形式是一个逻辑名加上若干识别属性。

2. 运行脚本时,QTP分析该脚本要执行那个对象的操作,然后根据该语句中的逻辑名,在对象库中查找该对象的详细记录,然后在运行的真实软件中按图索骥,找到需要操作的对象,把语句规定的操作施加在该对象上.施加的主要动作就是把操作的相关消息时间放入到该对象窗口的消息循环队列中。

3. 所以QTP其实是通过封装被测对象到对象库,在使用对象库里的对象进行操作时,QTP会吧对象库里的对象和运行时的真实被测对象进行对比,在对比一致后找到相应的对象,QTP就能操作真实的被对象了。

Add-in 的选择是为了能够成功识别对应Add-in的测试对象控件,也就是说是和被测控件有关,而跟什么什么语言写的是没有关系的。

对象库是在自动化测试过程中非常重要的一个环节,但是对象库在使用其实也分为两种模式:1)本地模式2)共享模式本地模式其实就是qtp默认的单个Action模式,它的优势就是可直接更新对象,并且当改变对象名之后当前脚本可以自动更新对象名,缺点也很明显测试脚本一多容易出现很多重复对象,而且维护比较麻烦,团队开发时容易出现混乱。

使用方法:打开一个脚本并输入快捷键Ctrl+R打开对象库,此时的对象库就是本地action。

共享模式是一种可以共享给所有脚本的的模式,它的优势也是很明显适合团队开发,在大量测试脚本中不容易出现重复对象,维护对象属性比较容易,缺点是修改对象名(这里的对象名指的是qtp封装的对象名称,而非对象的name属性)后不能对所有使用其修改对象的脚本进行自动更新。

使用方法:打开一个脚本后,进入菜单栏Rescouces –> Associate Repositories, 点击“+”添加Tsr 对象库文件(可由对象库中进行导出),并选择相应的Actions点击ok即可。

UI设计学习笔记

UI设计学习笔记

UI设计学习笔记1.概念用户界面(User Interface)是对用户与系统之间进行交互所采用的方式、途径、内容、布局及结构的总称,用户界面也叫人机界面、人机接口、人机输入输出或人机交互界面等。

2.用户界面设计的原则用户界面设计应该遵循合理、有效、安全的原则。

合理性指的是在用户界面设计过程中应该尽量做到全面、系统、客观、美观和协调。

有效性指用户界面设计应该做到界面友好、操作方便、快速高效、一致规范、灵活适应。

安全性是指设计的用户界面保证系统的数据、操作和功能被可靠使用的能力。

它包括使用权限的设置、检测、保护和修改,对错误的诊断、报告、纠正和保护,以及对输入数据的正确性检查、报告和纠错等方面的能力。

1)3.交互需求分析交互需求分析的主要工作是收集、分析、整理信息系统和用户之间所存在的人机交互处理的需要和内容,可以分析用例图和顺序图中参与者与系统交互的内容,并用对话设计的形式描述出来。

4.界面分布分析界面分布分析的工作是从总体上确定信息系统中各节点的类型、构成和分布情况,设计的所有用户界面将来就要分布在这些节点上。

5.交互方式分析确定信息系统各个节点所采用的人机交互方式,有联机和脱机两种方式。

6.交互流程分析人机交互过程的顺序程式7.输入输出设备分析设备性能会加强或制约输入输出效果。

8.用户分析用户分为外行型、初学型、熟练型和专家型四类,根据不同的用户类型进行界面设计。

9.屏幕界面设计的准则一致性:按键、窗口格式、色彩、界面布局等在整个系统中始终应该保持一致。

框体颜色 外边框 输入框 按钮 登陆界面 蓝色,淡色,40%灰色,淡色,30%线条,淡色,50%灰白色,80% 主界面 线条,淡色,50%灰色,淡色,30%线条,淡色,50%灰白色,80% 子界面 线条,淡色,50%灰色,淡色,30%线条,淡色,50%灰白色,80% 文字部分 标题文字 输入框文字 菜单文字 帮助文字 字体 微软雅黑加粗微软雅黑 微软雅黑 微软雅黑 大小 小四 五号 五号 五号颜色 黑色 灰色,50% 黑色 黑色为熟练用户提供快捷键:快捷键能够提高系统的操作速度。

《移动应用UI设计模式》读书笔记

《移动应用UI设计模式》读书笔记

《移动应用UI设计模式》读书笔记主导航模式由于移动桌面尺寸限制,瞬时导航很好的体现了打破框架、突破画布的思想。

通过3D图层面板和手势交互创造极佳的用户体验,将内容层、菜单层、详细页层叠起来的方式。

1、何时使用全局导航:应用层次扁平化、菜单分类是同级、主要类别只有3到5个。

用户需要菜单一直处于可见状态以便快速访问。

菜单分类有状态指示,比如未读邮件数。

跳板式1.1跳板式也成为启动面板,是2011年最流行的导航模式,指的是一个带有菜单选项的登录界面,而菜单选项就是进入各个应用的起点。

优点:可以容纳更多选项。

缺点:全部选项被扁平化,没有优先级。

1.2卡片式卡片式模仿的原型是扑克牌,切牌、换牌的手法。

在苹果的切换运行应用中也使用了卡片式,在谷歌now中。

他给出了一种展示内容的优雅方式。

1.3列表菜单式每一个列表都是进入该应用各项功能的入口,并且模块之间的切换需要返回到列表主页。

在设计层级结构的应用导航中可以考虑列表菜单模式。

1.4仪表盘式在需要使用关键指标或数据作为应用入口的时候,可以采用仪表盘式。

但不要载入过多的信息,对于要展示的关键指标或数据需要经过仔细的研究再做决定。

1.5陈列馆式可用来呈现实时内容,比如新闻、菜谱、或照片。

可采用网格布局或轮盘布局。

字幕式的文本比浮层式的文本更清晰易读。

陈列馆式的设计模式最适合呈现经常更新的、视觉效果直观的无层级内容。

1.6选项卡菜单IOS标签栏的作用是在应用的主要类别之间进行切换;而工具栏上显示的是工具或指向特定页面的可执行操作。

IOS系统中的标签栏限制在5个以内,如果应用的主要类别超过5个,那么你可以把“更多”放在最右侧的第五个选项卡上。

在扁平式信息结构的应用中,因为所有的主要类别都可以从主页进入,所以用户可以直接从一个主要类别切换到另一个。

Instagram针对进行单一操作的用户(拍照)所以他们把行为召唤放置在标签栏上。

安卓系统主导航提供三种不同选项卡模式:固定选项卡:固定选项卡同时显示多个顶级内容视图,可以方便在不同视图间进行切换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

uip_buf:定义如下u8_t uip_buf[UIP_BUFSIZE + 2];所有的数据处理都是通过处理它来完成的。

比如接受的数据存储在这里,要发送的数据有会放在这里。

uip_len:uip_buf有用数据的字节uip_appdata:uip_buf第一个可用字节的指针uip_conn:总是指向当前连接的指针,定义:struct uip_conn *uip_conn;下面是TCP连接的结构,用来区别不同的TCP连接,uip_tcp_appstate_t appstate是可以读写的且在实践应用中需要重定义,其他项read-only。

struct uip_conn {uip_ipaddr_t ripaddr; /**< The IP address of the remote host. 远程主机IP地址*/u16_t lport; /**< The local TCP port, in network byte order. 本地TCP端口号,网络字节顺序*/u16_t rport; /**< The local remote TCP port, in network byte order.本地远程连接主机TCP端口号*/u8_t rcv_nxt[4]; /**< The sequence number that we expect toreceive next. */u8_t snd_nxt[4]; /**< The sequence number that was last sent byus. */u16_t len; /**< Length of the data that was previously sent. */u16_t mss; /**< Current maximum segment size for theconnection. */u16_t initialmss; /**< Initial maximum segment size for theconnection. */u8_t sa; /**< Retransmission time-out calculation statevariable. */u8_t sv; /**< Retransmission time-out calculation statevariable. */u8_t rto; /**< Retransmission time-out. */u8_t tcpstateflags; /**< TCP state and flags. */u8_t timer; /**< The retransmission timer. */u8_t nrtx; /**< The number of retransmissions for the lastsegment sent. *//** The application state. */uip_tcp_appstate_t appstate;};uip的应用事件:1.接收数据:uip_newdata()为真,即远程连接的主机有发送新数据。

uip_appdata指针指向实际数据。

数据的大小通过uIP函数uip_datalen()获得。

在数据不是被缓冲后,应用程序必须立刻启动。

2.发送数据:应用程序通过使用uIP函数uip_send()发送数据。

uip_send()函数采用两个参数;一个指针指向发送数据和数据的长度。

如果应用程序为了产生要发送的实际数据需要RAM 空间,包缓存(通过uip_appdata指针指向)可以用于这方面。

在一个时间里应用程序只能在连接中发送一块数据。

因此不可以在每个应用程序启用中调用uip_send()超过一次;只有上一次调用的数据将会发出后才可以。

注意,调用uip_send()以后会改变某些全局变量,在应用函数返回前它不能被调用。

3.重发数据:uip_rexmit()为真,应用程序要重发上一次发出的数据。

重发就好像原来那样发送,也就是通过uip_send()。

4.关闭连接:应用程序通过调用uip_close()关闭当前连接。

这会导致连接干净地关闭。

为了指出致命的错误,应用程序可以中止连接,调用uip_abort()函数完成这个工作。

如果连接已经被远端关闭,uip_closed()为真。

应用程序接着可以做一些必要的清理工作。

5.报告错误:有两个致命的错误可以发生在连接中,不是连接由远程主机中止,就是连接多次重发上一数据和被中止。

uIP通过调用函数报告这些问题。

应用程序使用两个测试函数uip_aborted()和uip _timedout() 去测试那些错误情况。

6.轮询:当连接空闲时,uIP在每一个时候周期性地轮询应用程序。

应用程序使用测试函数uip_poll()去检查它是否被轮询过。

7.监听端口IP维持一个监听TCP端口列表。

通过uip_listen()函数(在应用程序的初始化调用),一个新的监听端口打开。

当一个连接请求在一个监听端口到达,uIP产生一个新的连接和调用应用程序函数。

如果一个新连接产生,应用程序被调用,测试函数uip_connected()为真。

8. 打开连接在uIP里面通过使用uip_connect()函数打开一个新连接。

这个函数打开一个新连接到指定的IP地址和端口,返回一个新连接的指针到uip_conn结构。

如果没有空余的连接槽,函数返回空值。

为了方便,函数uip_ipaddr()可以用于将IP地址打包进两个单元16位数组里,通过uIP去代表IP地址。

例子:void connect_example1_app(void) {if(uip_connect(uip_conn->ripaddr, 8080) == NULL) {uip_abort();}}void connect_example2(void) {u16_t ipaddr[2];uip_ipaddr(ipaddr, 192,168,0,1);uip_connect(ipaddr, 8080);}9.数据流控制过函数uip_stop()和uip_restart(),uIP提供存取TCP数据流的控制途径。

设想一个应用程序下载数据到一个慢速设备,例如磁盘驱动器。

如果磁盘驱动器的作业队列满了,应用程序不会准备从服务器接收更多的数据,直到队列排出空位。

函数uip_stop()可以用于维护流控制和停止远程主机发送数据。

当应用程序准备好接收更多数据,函数uip_restart()用于告知远程终端再次发送数据。

函数uip_stopped()可以用于检查当前连接是否停止。

有了以上的知识,相信编写uip应用程序就简单多了。

有三个函数在编写程序时调用:uip_init()(系统初始化时调用)、uip_input()(接受到数据时调用)、uip_periodic()(隔一段时间调用,0.5s)当用到特定的功能时还需相应的调用如下函数:uip_udp_periodic()、uip_arp_timer()以上具体函数的用法在uip代码注释中有详解。

移植uip时要编写三个底层函数:void tapdev_init(void)(特定底层网络芯片的初始化函数)、unsigned int tapdev_read(void)、void tapdev_send(void)编写main()循环时可以参照unix文件夹下的main.c。

#define UIP_APPCALL你的应用函数名(不是上面所说的main函数,main函数只是调用uip的接口函数)(uip协议栈会调用这个函数,按照你的要求处理数据)所有uIP提供的函数1.ARP地址解析协议:ARP协议映射了IP地址和以太网MAC物理地址,它在以太网上的TCP/IP操作是需要的。

ARP在uIP里实现的是包含一个IP到MAC地址的映射。

当一个IP包要在以太网上发出,查询ARP表,去找出包要发送去的MAC地址。

如果在表里找不到IP地址,ARP请求包就会发出。

请求包在网络里广播和请求给出IP地址的MAC地址。

主机通过发出一个ARP回应,响应请求IP地址。

当uIP给出一个ARP回应,更新ARP表。

为了节省储存器,一个IP地址的ARP请求覆盖发出的请求输出IP包。

它是假定上层将重新发送那些被覆盖了的数据。

每十秒表更新一次,旧的条目会被丢弃。

默认的ARP表条目生存时间是20分钟。

2.IP网际协议:uIP的IP层代码有两个职责:验证输入包的IP头的正确性和ICMP 和TCP 协议之间多路复用。

IP层代码是非常简单的,由9条语句组成。

事实上,uIP的IP层极大地简化了,它没有实现碎片和重组。

3.ICMP因特网信息控制协议:在uIP里,只有一种ICMP信息实现了: ICMP回响信息。

ICMP回响信息常常用于ping程序里的检查主机是否在线。

在uIP里,ICMP回响处理在一个非常简单的方式。

ICMP类型字段的改变是从 \echo"类型到 \echo reply"类型,从而 ICMP调整校验和。

其次,IP地址里的IP头交换,包发回到原先的发送者。

4.TCP传输控制协议:为了减少储存器的使用,uIP里的TCP没有实现发送和接收数据的调整窗口。

输入的TCP段不会通过uIP缓存,但必须立即由应用程序处理。

注意这不能避免应用程序自己缓冲数据。

输出数据时,uIP不能在每个连接有超过一个未解决的TCP段。

连接状态在uIP,每个TCP连接的完全态包含当地和远端的TCP端口编号,远程主机的IP地址,重发时间值,上一段重发的编号,和连接的段的最大尺寸。

除此之外,每个连接也可以保持一些应用状态。

三个序列号是,期望接收的下一个字节的序列号,上一发送段第一字节的序列号,下一发送字节的序列号。

连接的状态由uip_conn结构表现,可以在图5看到。

一个uip_conn结构数组用于在uIP里保持所有的连接。

数组的大小等于同时的最大数量的连接,它在编译时间里设置。

struct uip_conn {u8_t tcpstateflags; /* TCP状态和标志. */u16_t lport, rport; /*当地和远端端口. */u16_t ripaddr[2]; /*同等远端的IP地址. */u8_t rcv_nxt[4]; /* 我们期待接收的下一个序列号. */u8_t snd_nxt[4]; /*上一个发送的序列号. */u8_t ack_nxt[4]; /* 通过从远端的下一个应答去应答序列号. */u8_t timer; /* 重发时间r. */u8_t nrtx; /*计算特殊段的重发数量. */u8_t mss; /* 连接的最大段大小. */u8_t appstate[UIP_APPSTATE_SIZE];};图5: uip_conn 结构输入处理TCP输入处理和检验TCP校验和一起开始。

相关文档
最新文档