认识网卡,我们上网必备组件之一。

网卡工作在osi的最后两层,物理层和数据链路层,物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。物理层的芯片称之为PHY。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。以太网卡中数据链路层的芯片称之为MAC控制器。很多网卡的这两个部分是做到一起的。他们之间的关系是pci总线接mac总线,mac接phy,phy接网线(当然也不是直接接上的,还有一个变压装置)。

下面继续让我们来关心一下PHY和MAC之间是如何传送数据和相互沟通的。通过IEEE定义的标准的MII/GigaMII(Media Independed Interfade,介质独立界面)界面连接MAC和PHY。 阅读全文 »

 


来南京将近5个月了,比预计规划多了2个月,仅管如此,当在我心理预期之内。但凡新产品开发,一般情况下,实际时间都要比计划有所延迟,只是延迟多少不定而已,然侧面反映了项目研发计划管理的能力。

虽延迟时间在心理预期之内,但由于项目中某件事情的发生,从8月中旬开始,心想早着回去了,且随着时间的推移,愈加强烈。

回去的日子上周五定好了。当此之时,感觉时间极慢,怠工消极,虽不当,却也无法。此时心思,早已远去……

 


在MinGW GCC下编译带sleep()函数的测试程序,不管是包含了unistd.h头文件,还是stdio.h、stdlib.h头文件,就是找不到该函数的定义!

在linux下,sleep()函数的头文件是:unistd.h,但在MinGW GCC下没有了这个函数的定义,但是在windows.h文件中有Sleep()函数的定义,其单位是ms级的延迟处理。根据这种情况,我们可以采用如下的处理:

#if defined(WIN32) || defined(WIN64)
#include <windows.h>
#define sleep(n) Sleep(1000 * (n))
#else
#include <unistd.h>
#endif
 


1.系统和平台熟悉

在一个新的平台上开发或者移植一款软件的时候,首先应该充分了解平台或者操作系统的各种属性,这些属性包括但不仅限于:

1)系统的任务调度,任务间的通信机制

任务调度包括是否是多任务实时操作系统,任务以何种方式存在的,如何添加和管理任务?任务间的优先级如何设置?任务间的优先级设置?任务堆栈?任务间的通信机制包括了解系统提供的通信机制,各种通信机制的优劣,通信细节等等。

案例1:

曾经在某一个平台上做一个软件,创建了多个任务,由于各个任务实现者不一样,一个漫不经心的错误造成了本该是高优先级的任务没有在优先级上体现出来,A,B,C,D4个任务,本来应当是A>B>C>D,结果设置成A>C>B>D,为此debug了一上午。

教训: 阅读全文 »

 


从最最基本的层面上讲,每个员工都应该为最求两种基本的能力而奋斗,它们是:编程技能和做员工的技能。

编程技能是指能写出好的,稳定的,有效率的,可维护的,以及所有其它褒义形容词能描绘的代码的能力。这些是程序员们喜欢花时间反复唠叨,讨论,阅读的东西。

做员工的技能是指做一个好的雇员和同事的能力。它意味着有求必应,善于交流,能够按期完成,善于接受反馈,有能力把复杂的事情解释清楚,以及其它一些类似的技能。

一个极端的例子

对两个人的形象描绘: 阅读全文 »

 


当前一个项目中需要用到音频,用到的音频芯片是CS4344,驱动是从linux内核自带的AT73C213音频IC驱动移植过来的。

在用自己写的应用程序播放音频文件的时候,发现随着播放不同的音频文件,内存的使用越来越多,甚至高达27或28M(总共内存是32M)。由于在这之前没有关注过linux的cache机制,判断内存是用top命令的used的值来判断的,因此将这个问题判断为内存问题。

由于音频驱动是alsa架构,而播放音频的应用程序是直接用系统函数write写的,即直接写音频文件到音频设备,开始判断为是应用程序导致的内存问题。于是移植了alsa-lib和alsa-utils,但用aplay测试的时候,总是不能设置参数,提示:Invalid argument,后面自己写的基于alsa-lib的测试程序也是出现这个问题,google了好多资料,也无济于事。

于是怀疑是不是音频驱动的问题,经查,原来移植驱动的时候,把采样频率的最大值最小值设定为同一个值,如下所示的14,15行:  阅读全文 »

 


最近对单独的进程进行编译时,提示下列编译错误:

这是因为程序中使用了数学函数sqrt和asin的缘故。 阅读全文 »

 


在使用ls命令时,每个文件在Linux下面都会记录3个主要的修改时间:

  •  modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。
  •  status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来说,更改了权限与属性,就会更新这个时间。
  • •access time(atime,存取时间):当“取用文件内容”时,就会更新这个读取时间。举例来说,使用cat去读取 ~/.bashrc,就会更新atime了。

举例来说,我们来看一看/etc/man.config文件的时间。 阅读全文 »

 


为什么要在linux命令前加上 ./ ?

简述

执行unix或linux中除了path系统变量外的目录下的命令都要加./。

修改用户的 .bash_profile,在 PATH一行最后加上 “:.” (一个冒号,一个点) ,然后退出重新登陆用户就ok了! PATH中没有定义路径,加上就ok了。

./表示当前目录,这是因为linux的默认搜索目录里没有当前目录,所以如果你在当前目录需要执行程序就要加上路径./,用全路径代替也是可以的。

win/dos的默认搜索路径里有当前目录,所以不需要加。其实加上也是一样的效果。

什么时候才需要在命令前加上./ ?  阅读全文 »

 


用户程序有可能要花费很多时间,如果将它放在前台运行,将导致无法继续做其他事情,最好的方法就是将它放在后台运行,甚至可能希望在用户注销系统后,程序还可以继续运行。让我们来看看如何实现linux程序后台运行

1. &命令实现后台运行程序

将程序放到后台运行的最简单方法就是在命令最后加上“&”,示例如下:

reille@ubuntu:  updatedb & ← 在后台执行 locate 数据库更新命令

2,前台运行程序的fg命令 

如果用户当前已有程序在后台运行,可以输入fg命令,将它从后台移到前台运行:

reille@ubuntu:   fg ← 放到前台执行的命令会显示出来

3,在退出后让程序继续运行的nohup命令  阅读全文 »

© 2012 velep.com | reille blog | 管理| 粤ICP备15065318号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量