数字设计
LC3是一个16位单总线 CPU,涉及中断、简单IO、栈、系统服务等方面的硬件实现,另外LC3有自己的C语言编译器、汇编器和仿真器,是系统学习计算机软硬件的好途径!以下几 篇是LC3的CPU源码、编译器源码、汇编器源码和仿真器源码,源码面前了无秘密,从中可以熟悉从逻辑门电路到完整计算机体系结构再到高级语言实现的全过 程。
美国计算机泰斗Yale N. Patt的LC-3 CPU VHDL源码,配合《计算机系统概论》一书学习效果更佳!
另一套LC3 CPU VHDL源码及设计文档,对LC3进行了一些取舍和改造,比如NZP改为NZC,更贴近现实CPU硬件架构。使用ASM方法进行VHDL编码,更适合数字设计初学者。
LC-3 CPU的汇编器、Linux下的仿真器源码及相关手册。
LCC for LC3编译器源码,关于LCC编译器源码分析参见《可变目标C编译器》一书。
LC3的微架构,数据通路及控制,流水线等方面资料。
VOIP
Asterisk语音处理过程与业务无关,是一个统一的过程,处理对象有RTP和File,不管外界RTP或 File输入格式如何,进入Asterisk后默认转换为signed linear格式,从Asterisk输出(发送或写文件)时再从slinear格式转换为外界RTP或File格式。
- RTP语音还原工具RTP2Wav
RTP语音还原工具,过滤pcap、cap包中语音保存为wave格式文件,支持g711、g723、g726、g729、ilbc、gsm、speex、L16/SLINEAR、DVI4/ADPCM格式,是voip专业人员的好工具。
- 语音格式转换工具convert
语音媒体格式转换工具,支持wav、vox、sln、raw、alaw、al、pcm、ulaw、ul、mu、ogg、ilbc、gsm、g729、g726、g723、au、mp3等语音格式相互转换。
- 混音工具mixer
混音工具,支持mp3、wav、vox、sln、raw、alaw、al、pcm、ulaw、ul、mu、ogg、ilbc、gsm、g729、g726、g723、au格式混音,目前只能进行两个文件混音。
使用sipp进行sip注册,呼叫,会议压力测试。
在Asterisk基础上开发的一个VOIP Loadbalancer,兼容SIP,H323和IAX协议,7种负载均衡策略!
除负载均衡功能外还支持路由重试,号码变换和协议转换功能,功能超强!
Asterisk支持SIP,H323,IAX,MGCP 等VOIP协议,可以用作多种协议网关,本文介绍如何使用Asterisk作为SIP-H323协议网关。
通过Request-URI,Via,Record-Route,Route,Contact协议头讲解SIP请求和响应的路由机制。
全面介绍H323协议。
全面介绍SIP协议。
以SER为例介绍SIP Proxy架构,包括媒体穿越NAT,Radius预付费实现。
SER基本模块的安装配置,包括数据库,NAT穿越。
STUN在SIP穿越NAT中的工作原理和过程。
介绍SIP穿越NAT技术,有些也适用于H323。
Citron NAT穿越方法解决私网下H323终端作被叫的问题。
传真移植到以太网进行传输的技术。
TCP/IP协议栈
- VC下的TCP/IP协议栈代码
在wpcap驱动基础上实现的TCP/IP协议栈,包括TCP,UDP,IP,ARP,ICMP协议,可以在VC下调试。
一套用于嵌入式系统的开源TCP/IP协议栈,支持Socket。
穿越NAT前先了解NAT是什么!
从代码实现的角度彻底理解NAT。
一种通过代理方式帮助TCP和UDP穿越NAT的方法。
把PPP点对点协议移植到以太网上。
SNMP是面向基于IP的网络管理,通过MIB库定义的对象,SNMP监控网络各协议层的状态、修改网络设备配置、接收网络事件警告。
FTP文件传输协议。
TFTP简单文件传输协议
嵌入式
嵌入式数据基于文件系统,Berkeley DB、sqlite和mSql是三种具有代表性的嵌入式数据库:前两者是本地数据库,只能本机访问,不接受网络连接,mSql是网络数据库,可以接收本机 或网络上其他机器连接;Berkeley DB不支持SQL,后两者都支持SQL。
- linux2.6 O(1)调度算法实验
本文从Linux 2.6 代码中提取出O(1)核心算法和相关的数据结构并进行测试。
- 嵌入式NAT实现代码
从Linux源码中剪裁而来,实现对称NAT功能,很容易移植到嵌入式设备里。
- 嵌入式MVC模式的web服务器
三个源文件分别实现Model、View、Controller功能,你能领略到C语言也能实现MVC模式,并且很容易移植到你的嵌入式设备。
- 最简单的51操作系统
实现在时钟触发下两个任务切换,你可以看到任务切换时需要对那些寄存器压栈和出栈操作。
编程技术
- C语言中字符串处理
字符串处理是编程最重要的基本功之一,C语言中字符串处理远没有Java等语言方便,为方便C语言开发,以下提供了常用字符串处理源码,功能包括字符串分 割、带通配符比较、解析文件名、字符串整理、字符串替换、字符串查找、大小写转换、字符串与数字转换、十六进制打印等等。
死锁是多线程编程中比较难解决的问题,本文介绍一套Linux环境下线程死锁检测代码,对死锁现象及解决办法进行实例演示,并给出所有相关源代码。
一个程序中最消耗系统资源的代码量其实非常少,大部分代码实际上只可能执行一次,甚至一次都没有被执行过,对于这些部分进行优化毫无意义,如何才能快速找 到一个程序里面值得优化的地方,本文以一个Linux C实例讲解了gprof和cachegrind两个性能检测工具的使用方法。
单核CPU性能已经很难再提高,多核、超线程CPU可以同时运行更多的线程,使机器性能大幅度提升,多核、超线程CPU已经成为大势所趋,同时多线程编程将成为程序员的必备技能。
本文介绍一个利用C和Posix Thread实现半同步/半异步(Half-Sync/Half-Async)并发模式。
C语言的通用垃圾收集器(GC)实现,支持多线程。
一个多线程动态内存管理模块,可以有效地检测C语言中内存泄漏和内存越界等错误。
Linux内存调试的瑞士军刀,让内存不再泄漏!
C,C++通用makefile模版示例。
包括Socket,Time,Thread方面的移植。
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
靠着彼此能听懂的语言,彼此能看懂的符号交流沟通,网络把世界各地的人联系起来,这是网络的力量!
靠着约定好格式和接口相互通讯调用,SOA站在网络的肩膀上把各行各业的软件联系起来,这就是SOA的伟大!