sooof2012历史日志

耿明军工作日志:
网上内容请查看
http://kb.microembedded.com/sooof

2012年4月11日星期三
ubuntu安装smb共享文件夹
见./sooof/ubuntu_samba_install.txt

售后
1查看频偏
./kal -f 948600000 -u

2012年4月12日星期四
A、售后中央民族大学
B、搭建公司版本管理器
初步成功
所用软件trac+svn+postgresql

2012年4月13日星期五
A:与杜博士解决linux下matlab安装
B:完善./sooof/USRP_e100.guide.txt
C:完善./sooof/USRP_n2100.guide.txt

解决问题:
1、matlab与连接USRP N210问题?
解答:
(windows/ubuntu10.10都可用以下软件)
需要软件版本matlab20llb和usrp_v2_1R2011b.zip

以上软件存放目录:
matlab20llb------\\View\微嵌共享工具S\Matlab\Matlab2011b
usrp_v2_1R2011b.zip-------\\View\微嵌共享工具S\微嵌软件配置方案\ETTUS

2、linux matlab的安装
mount -t iso9660 /home/matlab.iso /cdrom -o loop,iocharset=cp936
cd /cdrom
./install

安装usrp_v2_1R2011b.zip
apt-get install zip
mkdir usrp_v2_1
cd usrp_v2_1
zip usrp_v2_1R2011b.zip


2012年4月16日星期一
ubuntu网卡配置脚本
http://kb.microembedded.com/interfaces_config

FAQ(用debootstrap制作livedvd)
1、could not find kernel image: vesamenu.c32
解答:
修改syslinux.cfg
在./isolinux/下添加vesamenu.c32
2、livedvd进入选择Install Ubuntu Server会出现
Boot loader
/install/vmlinuz
解答:
cp /cdrom/install/vmlinuz image/install/
cp /cdrom/install/initrd.gz image/install/

2012年4月17日星期二
trac_svn_postgresql安装
http://kb.microembedded.com/trac_svn_postgresql-an-zhuang

LabVIEW
虚拟仪器
按照自己需要来组织起来的数据采集系统。(涉及的基础理论是数据采集和数据信号处理)
LabVIEW是图形化的编程语言和开发环境。
所有的虚拟仪器都包括前面板和程序框图两部分。
前面板:图形用户界面,也是虚拟仪器的前面板。(相当于传统仪器的面板)
    a、控制器:开关、旋钮、按钮、和其他输入设备。
    b、指示器:图形、LED、和其他显示输出对象。
程序框图:定义程序功能的图形化源代码。(相当仪器箱的功能模块)
    从前面板获得用户的输入信息,进行相关的计算和处理。最后在输出控件中将处理的结果反馈给用户
    a、控制器的连接端子。
    b、指示器的连接端子
    c、函数
    d、常量
    e、子虚拟仪器
    f、结构
    g、连线
可仿真标准仪器
在程序框图中可以显示函数模板(函数模板是创建程序框图会用到的对象的集合,该模板的每一个顶层图标都表示一个子模板)
编程选项:
DAQ Assistant:自动生成代码
NI-DAQmx API:


2012年4月18日星期三
linux下备份分区表和MBR
问:Linux如何备份/恢复分区表?
答:备份分区信息,使用命令:
#fdisk /dev/hda -l >/tmp/pattern.bak
备份MBR,使用命令:
# dd if=/dev/hda of=/tmp/mbr bs=512 count=1
说明:主引导记录512字节中前446是程序代码,后64字节包含分区表信息,最后2字节标识是MBR。
恢复分区表,使用命令:
# dd if=/tmp/mbr of=/dev/hda bs=1 skip=446 count=66

2012年4月19日星期四
# Openbts2.09_64S光盘说明文档:
http://kb.microembedded.com/openbts2-09_64s_info
# MicroEmbedded_livedvd10.04_V9说明
http://kb.microembedded.com/gnuradio_1004_3-50_v09_info
# MicroEmbedded_livedvd10.04_V8测试
http://kb.microembedded.com/gnuradio_1004_3-50_v08_info

2012年4月20日星期五
a、RFID和GPS频段:(./sooof/frequncy_band.txt)
b、完善./sooof/常用名词解释.txt
c、完善./sooof/UHD_install.txt


2012年4月23日星期一
a、软件所修改合同
b、天津备货
FAQ:
在Ubuntu上安装Apache,每次重启,都会出现以下错误提示:

    Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName

解决办法

修改 httpd.conf 文件

打开终端,输入以下命令:

    sudo vim /etc/apache2/httpd.conf

默认情况下,这个是一个空文件,在文件中加入以下内容:

    ServerName localhost

保存文件退出,再次重启apache,错误提示没有了。


2012年4月24日星期二
a、到中央民族大学取支票
b、去软件软件所送合同

新硬盘安装
1用 将硬盘瞬时分成四个区
然后进入winpe(准备装系统的那个区分成fat格式)
2、进入dos命令行
运行
format c: /q /s
3、重启选硬盘启动,看看能否进入dos系统
4、运用ghost将映像ghost回c:盘



2012年4月25日星期三

SVN FAQ:
1>
 * Restarting web server apache2          
Syntax error on line 56 of /etc/apache2/mods-enabled/dav_svn.conf:
DAV not allowed here
解决:
<Location /svn>  添加
DAV svn
SVNPath /home/svn/me_diary
AuthType Basic
AuthName "project subversion repository"
AuthUserFile /etc/subversion/passwd
Require valid-user
</Location>      添加


补丁的制作与应用:
a>两个文件之间的补丁
    制作补丁
     diff -uN /usr/local/src/gnuradio-3.3.0/usrp/host/lib/usrp_basic.cc usrp_basic.cc > usrp_basic.cc.patch
    应用补丁
    cp usrp_basic.cc.patch /usr/local/src/gnuradio-3.3.0/usrp/host/lib/
    pushd cd /usr/local/src/gnuradio-3.3.0/usrp/host/lib/
    patch -p0 < ./usrp_basic.cc.patch
    popd



gnuradio软件64M修改为52M方式为
1、
       cp usrp_basic.cc.patch /usr/local/src/gnuradio-3.3.0/usrp/host/lib/
       pushd cd /usr/local/src/gnuradio-3.3.0/usrp/host/lib/
       patch -p0 < ./usrp_basic.cc.patch
       popd
2、修改/usr/local/src/openbts-2.6.0Mamou/apps/OpenBTS.config

TRX.Path ../Transceiver/transceiver
#TX.Path ../Transceiver52M/transceiver
替换为
#TRX.Path ../Transceiver/transceiver
TX.Path ../Transceiver52M/transceiver

信号发生器的接入跟外接52M高精度时钟是一样的
1、
   * 焊接SMA的连接处到:J2001
   * 移动R2029到R2030(或删除R2029和焊接0欧姆电阻)
   * 将C926 C925 互换(的的0.01uF)
   * 拆下C924
2、将信号发生器的馈线接入J2001的SMA上
   a、调信号发生器的frequency(64M或52M)
   b、调信号发生器的amplitude到-3dbm

2012年4月26日星期四
a、完善./sooof/svn.txt
b、画usrp2的pcb图
c、usrp_e100的文件系统
d、服务器的开机自启动其中虚拟机的设定
    (在vmware exsi 的配置--->软件--->虚拟机启动/关机--->属性 中设置)

2012年4月27日星期五
a、画usrp2的pcb图
b、完善./sooof/hisopenbts2.6_52.txt
c、完善./sooof/hisopenbts2.6_64.txt

硬件设计
1、建立项目文档(eg:090104myprj_diary_mj.doc)
2、需求分析,划分功能块;
3、为每个功能选择实现电路,尽量选择成本低、元件容易购买、可靠性高的成熟电路
4、对自己不熟悉的电路进行仿真,并搭配面包版进行调试;
5、调试方案
6、硬件仿真、
    a、单纯的硬件仿真一般使用multisim
    b、需要用cpu的可以用protues
7、用面包板搭建电路是,注意走线规范、清晰,搭完电路要仔细检查,确认无误后再开始调试(电源用红线,地线用黑线,
输入、输出和中间连接分别使用不同的颜色;输入信号要布置在容易操作的地方。)





2012年5月2日星期二
a、画usrp2的pcb图
b、填写西工大的归档文件





2012年5月3日星期三
a、画usrp2的pcb图

软件无线电的组成:
A、天线
B、射频前端
    发射时:主要完成 上变频、滤波、功率放大。
    接收时:         滤波、放大、下变频。
C、宽带A/D、D/A转换器
D、通用和专用的数字信号处理器以及各种软件。

软件无线电的基本结构:
A、射频低通采样数字化结构;
B、射频带通采样数字化结构;
C、宽带中频带通采样数字化结构;


中频有两种意思
  其一、按频率的高低来划分时。中频(MF,Medium Frequency)是指,频段由300KHz 到3000KHz的频率,多数作AM电台。在白天传播距离短,夜间由于可以利用电离层反射信号,所以可以作远距离传播。但是较易受到其它电波干扰。
  其二、按其在电路中的位置与作用来划分时:中频信号是指高频信号经过变频而获得的一种信号。为了使放大器能够稳定的工作和减小干扰.一般的接收机都要将高频信号变为中频信号。


2012年5月4日星期四

普通的GSM手机由:软件和硬件两大部分组成。其中软件是手机的工作程序,控制硬件各部分电路按一定模式进行工作。
硬件包括:电源部分、逻辑音频部分、射频部分、时钟部分。
一、电源部分:
1.组成
手机电源电路分为逻辑电压和射频电压两大类。其中,逻辑电压为1.8V或2.8V的恒定电压;射频电压为2.8V的跳变电压。
2.作用
电源部分主要把3.6V电池电压,按电路不同要求提供所需的工作电压。
二、逻辑音频部分:
1.组成
手机逻辑电路分音频处理电路和逻辑控制电路(包括人机接口电路)。其中,音频电路分为:受话电路、送话电路、耳机(蓝牙耳机)送受话等电路;逻辑控制电路(人机接口电路)分为:键盘扫描电路、显示屏电路、振铃电路、振动电路、背光灯电路、SIM卡、照相电路、MP3/MP4等电路。
2.作用
a.逻辑部分作用:逻辑部分是手机的所有组成部分的指挥控制中心;一切接收、发射的数据处理及功能电路均由它控制完成。
b.音频部分作用:发射时,把声音转化为电流信号经处理后,形成四路发射基带信号。接收时,接收基带信号在音频内还原成模拟信号后,经过放大后推送听筒发声。
三、射频部分:
1.组成
手机射频电路由:接收电路、发射电路、本机振荡电路(本机电路、频率合成电路、频合电路、锁相环电路)等电路组成。
2.作用
a.接收电路:把基站发送来电磁波转为微弱交流电流信号进行解调,得到接收基带信号。
b.发射电路:把发射基带信号调制成的发射频率信号,经功放放大后由天线转为电磁波辐射出去。
c.本机振荡电路:产生四段不带任何信息的本振频率信号,对接收信号进行解调;并对发射基带信息进行调制和发射鉴相。
四、时钟部分:
1.组成
GSM手机中的时钟有:32.768KHZ和13MHZ两个。
2.作用
a.32.768KHZ时钟:提供时间显示,并在手机待机时转为运行时钟。
b.13KHZ时钟:1)给CPU作运行时钟(管开机);2)送本振电路作射频参考(管信号)。


linux下python的开发环境安装
apt-get install spe

2012年5月5日星期五
电容的基本作用:
a、电路中的交流电通过,不让电路中的直流电通过;
b、与电感联合使用,构成LC协振电路。
(1uF=10e6pf
lF =10e6uF=10e12pF)

电感的基本作用:
a、单独使用主要作为滤波电感等之用;
b、与电容联合使用,构成LC协振电路。
(1mH=1000uH
1H=1000mH=1,000,000uH)


2012年5月7日星期一
搬家

2012年5月8日星期二
a、税务月报
b、给杨会计关于月开票金额
c、63所RFX2400测试
d、西工大

2012年5月9日星期三
a、武汉万利欣合同
b、西工大文档
c、注册地址变更

2012年5月10日星期四
a、画usrp2的pcb图


2012年5月11日星期五
a、画usrp2的pcb图



2012年5月14日星期一
a、画usrp2的pcb图
b、预约工商变更


2012年5月15日星期二
a、画usrp2的pcb图
b、调试在N210+WBX运行接收声音机频段的脚本


2012年5月16日星期三
a、画usrp2的pcb图
b、南邮发货前检查

2012年5月17日星期四
a、浙江工业大学合同(发快件)
b、武汉basic RX(发快件)

2012年5月18日星期五
a、天津发XCVR2450
b、原产地翻译
c、浙江工业大学合同
3、西工大()


2012年5月21日星期一
出差南邮



2012年5月22日星期二
制作南邮的liveDVD

2012年5月23日星期三
1、make[1]: Leaving directory `/tmp/tmp.O2mvgpwqBd/gfxboot-theme-ubuntu/po'
mkdir -p boot
mkbootmsg -O -v -L ../.. -l boot/log -c boot.config boot/init
make: mkbootmsg: Command not found
make: *** [bootdir] Error 127
Failed to build gfxboot theme
解决:
中间过程曾遇到一个小问题,UCK命令行提示mkbootmsg: command not found ,
大约是没有找到mkbootmsg文件,上网搜了一下解决方案是:安装gfxboot 和gfxboot-dev两个包,于是apt-get intstall安装了这两个包,再重新做了一下,就ok了。
未完的事情:

2、
Packing SquashFS image...
libraries/remaster-live-cd.sh: line 470: mksquashfs: command not found
Failed to create squashfs image to /home/me/tmp/remaster-iso/casper/filesystem.squashfs, error=127
Build ended at 2012-05-23 02:36:25
解决:
apt-get install  squashfs

2012年5月24日星期四
去嘉兆谈合作
买华南理工大标书

2012年5月25日星期五
写华南理工大标书


2012年5月28日星期一
写华南理工大标书
到嘉兆取授权函
打印标书

2012年5月29日星期二
标书有点问题重新打印标书
封标
下午去广东送标书
2012年5月30日星期三
去华南理工的招标
去深圳嘉兆
2012年5月31日星期四
写合同---武汉理工大
询问华南理工大关于招标结果

2012年6月1日星期五
清点货物,(确认华南的数量是否够)

2012年6月4日星期一
2012年6月5日星期二
2012年6月6日星期三
做u2_bom
2012年6月7日星期四
面试
2012年6月8日星期五
面试

2012年6月11日星期一
                        宋健上班
联系华南理工大邓老师

2012年6月12日星期二
                    
讲解焊接流程
下午给赵讲解公司的情况


2012年6月13日星期三
给武汉供货
浙大发货
 下午
中标服务费


2012年6月14日星期四
修改gerber文件
采购LFRX/TX

2012年6月15日星期五
杜博士电脑
给杜博士开发票
浙江吴老师发票
售后openbts
调试时钟版

2012年6月18日星期一
华南合同
2012年6月19日星期二
华南合同
2012年6月20日星期三
华南合同
2012年6月21日星期四
宋健讲时钟版



2012年6月25日星期一
核对XCVR2450元件
2012年6月26日星期二
中科院计算所合同
python学习
2012年6月27日星期三
中科院计算所参观
核对XCVR2450原理图

2012年6月28日星期四
核对XCVR2450原理图
修改XCVR2450

2012年6月29日星期五
修usrp1(换ad9513)
杜博士来拿设备。



2012年7月2日星期一
投板
名词:
PSK:
相移键控
定义 :移相键控方法是通过改变载波信号的相位值来表示数字信号 1,0的。如果用相位的绝对值表示数字信号1,0,则称为绝对调相。如果用相对偏移值表示数字信号1.0,则成为相对调相。
  PSK的一般表达式:si(t)=(2E/T)^1/2*cos[ω0t+φi(t)],0≤t≤T,i=1,2,...,M
  其中φi(t)=2πi/M.
  若为二进制PSK(BPSK),M=2.
ASK:
幅移键控ASK (Amplitude Shift Keying)
  ASK指的是振幅键控方式。这种调制方式是根据信号的不同,调节正弦波的幅度。
  幅度键控可以通过乘法器和开关电路来实现。载波在数字信号1或0的控制下通或断,在信号为1的状态载波接通,此时传输信道上有载波出现;在信号为0的状态下,载波被关断,此时传输信道上无载波传送。那么在接收端我们就可以根据载波的有无还原出数字信号的1和0。对于二进制幅度键控信号的频带宽度为二进制基带信号宽度的两倍。
  幅移键控法(ASK)的载波幅度是随着调制信号而变化的, 其最简单的形式是,载波在二进制调制信号控制下通断, 此时又可称作开关键控法(OOK)。 多电平MASK调制方式是一种比较高效的传输方式,但由于它的抗噪声能力较差,尤其是抗衰落的能力不强,因而一般只适宜在恒参信道下采用。
FSK:
FSK(Frequency-shift keying)- 频移键控是利用载波的频率变化来传递数字信息。它是利用基带数字信号离散取值特点去键控载波频率以传递信息的一种数字调制技术。它还有另一个含义刷街,

QAM:
正交振幅键控是一种将两种调幅信号(2ask和2psk)汇合到一个信道的方法,因此会双倍扩展有效带宽。

BPSK:
二进制相移键控(BPSK)就是根据数字基带信号的两个电平,使载波相位在两个不同的数值之间切换的一种相位调制方法。


2012年7月3日星期二
收货,核对清单
测试武汉理工货物

2012年7月4日星期三
收货,核对清单


2012年7月5日星期四
收货,核对清单
修改xcvr2450

2012年7月6日星期五
听陈明阔讲课
跟杜博士去听

2012年7月9日星期一
整流电路:
整流电路(rectifying circuit)把交流电能转换为直流电能的电路。大多数整流电路由变压器、整流主电路和滤波器等组成。

2012年7月10日星期二
电容器的作用很多,滤波,振荡,去耦,储能。
0.1uF的电容器是最常见的,数字电路中,几乎每个IC旁都有一个,多用作去耦。


Linux——VIM 中文显示乱码解决:

打开/etc/vim/vimrc文件后,只需要在文件最后添加以下代码就可以了:
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set encoding=prc


2012年7月11日星期三
百度出问题

2012年7月12日星期四
给胡老师学生讲课


2012年7月13日星期五
用sfdisk 备份分区表:
sfdisk -d /dev/sdc  > par.data
用sfdisk 恢复分区表
sfdisk    /dev/sdb  < par.data --force

liveUSB的四种制作方法:(见方案liveusb)

ettus的liveUSB的制作:
1、利用ubuntu将U盘分区
    a、fat32(0xob) ubuntu
    b、ext3(0x83)  casper-rw
2、将10.10拷贝到fat32区
3、在linux中cp文件系统到ext3区
4、进入分区
chmod 755 ./




2012年7月16日星期一
江波
张      上班
电力陶过来调试gnuradio3.6

2012年7月17日星期二
电力陶过来调试gnuradio3.6
制作liveUSB(建方案中的liveusb)

2012年7月18日星期三
电力陶过来调试gnuradio3.6
杜博士带来通信原理实验书
杜博士合同

2012年7月19日星期四
合同(qq346228506)
usrp+rfx900


2012年7月20日星期五
UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。


将文件系统移到新硬盘的方法:
1、将需要移的文件系统打包
cd /
tar jcvf root904.tar.bz2 ./*
2、利用fdisk在新硬盘建立分区
3、利用liveDVD进入到live模式,挂载分区
mount /dev/sda5 /mnt
4、解压文件系统
tar xjvf root904.tar.bz2 -C /mnt
chmod 755 /mnt
5、安装grub
#:mount     /dev/sda5     /mnt  (上面已做)
#:mount -t  proc   proc   /mnt/proc
#:mount -o bind   /dev   /mnt/dev
#:mount -o bind   /sys   /mnt/sys
#:chroot     /mnt   /bin/bash

#:(/usr/sbin/)grub-install /dev/sda
#:update-grub
#:exit
6、

FAQ:
1、不能引导分区,出现错误grub Error 15: File not found
解决:
a、在grub引导界面时,安C键
grub>root (hd0,4)
grub>kernel /boot/vmlinuz root=/dev/sda5
grub>boot
 (文件系统在sda5中,所以第一句为(hd0,4))

2、
查看分区uuid的方法,终端输入 blkid 或 ls -l /dev/disk/by-uuid,通常后者比较有效
3、
/dev/sda5 no fount or not a block device
解决:
修改/etc/mtab




2012年7月23日星期一

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
建立一个档案大小为512M
dd if=/dev/zero of=/tmp/loopdev bs=1024k count=512
格式化
mke2fs -j /tmp/loopdev
挂载
sudo mount -t ext3 -o loop /tmp/loopdev  /media/cdrom0/
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
mke2fs -v /dev/[xxx] 创建ext2文件系统
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
          -s --shell
          -m 创建/home
          -k 密码

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
1建立一个档案大小为64M
dd if=/dev/zero of=/tmp/swap bs=4k count=16382
     if指的是要被转换的输入档案格式 /dev/zero 可以由man zero 来查看内容;
     of指的是输出的档案
     bs指的是一个扇区占用几个kb
     count指的是要使用多少个bs,所以最后的容量为bs*count=4k*16382=64M
2使用mkswap将/tmp/swap格式化为swap的档案格式
mkswap /tmp/swap
3使用swapon来将/tmp/swap启动
4使用free来查看swap的增加
 要每次都启动该档案,就将swapon /tmp/swwap 写入/etc/rc.d/rc.local当中即可!
5使用swapoff /tmp/swap关掉swap文件
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
cat > .bash_profile <<"EOF"    用cat创建和编辑一个文件,遇到EOF结束
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


linux下上网配置:
./sooof/
1、配置网卡:
#ifconfig eth0 192.168.130.111
2、配置路由:
#route add default gw 192.168.130.1
查看路由是否配置成功:
#route -an
3、配置DNS
在/etc/resolv.conf
中加入
nameserver 192.168.130.1
 
设静态ip见:
http://kb.microembedded.com/interfaces_config

2012年7月24日星期二
PADS 2007:
COPPER 这个铜.是死铜.不会避开别的网络.COPPER 这个铜是完全铜皮,死铜是isolate copper (孤铜)
COPPER CUT OUT 这个这个铜就是上对上面的COPPER挖铜.
COPPER POUR 这个是灌铜.它有自开别的网络.LAYOUT推荐用这个.
COPPER POUR  CUTOUT 同上.


在PADS中,大面积覆铜有3个重要概念:
Copper(铜皮)
Copper Pour(灌铜)
Plane(平面层)
这3个概念对应3种的大面积覆铜的方法,对于刚接触PADS的用户来说,很难区分。
下面我将对其做详细介绍:
Copper表示绘制一块实心的铜皮,将区域中的所有连线和过孔连接在一块,而不考虑是否属于同一个网络。假如所绘制的区域中有VCC和GND两个网络,用COPPER命令会把这两个网络的元素连接在一起,这样就有可能造成短路了。
COPPER CUT表示在上面介绍的实心铜皮建立挖铜区。

Copper Pour:灌铜。它的作用与copper相近,也是绘制大面积的铜皮;但是区别在于“灌”字,灌铜有独特的智能性,会主动区分灌铜区中的过孔和焊点的网络。如果过孔与焊点同属一个网络,灌铜将根据设定好的规则将过孔,焊点和铜皮连接在一起。反之,则铜皮与过孔和焊点之间会保持安全距离。灌铜的智能性还体现在它能自动删除死铜.

COPPER POUR CUT:在灌铜区建立挖铜区。比如某些重要的网络或元件底部需要作挖空处理,像常见的RF信号,通常需要作挖空处理。还有变压器下面的,RJ45区域。

综上所述,Copper会造成短路,那为什么还用它呢?
虽然Copper有它的不足,但它也有它的使用环境。例如,有LM7805,AMC2576等大电流电源芯片时,需要大面积的铜皮为芯片散热,则这块铜皮上只能有一个网络,使用copper命令便恰到好处。
因此Copper命令常在电路板设计的早期使用。在布局完成后,使用copper将特殊区域都绘制好,就可以免得在后续的设计过种中犯错。

简言之,在电路板设计过程中,此两个工具都是互相配合使用的

2012年7月25日星期三
安装ubuntu 1204+gnuradio3.6.1
测试ofdm 的802.11

2012年7月26日星期四
修改WBX

2012年7月27日星期五
发货苏州+发货测试



2012年7月30日星期一
恢复N210 FPGA

解决方法:开机长按S2键、然后刷FW、FPGA的bin


2012年7月31日星期二
写ppt
1、gnuradio安装
2、依赖分析
2012年8月01日星期三
接待客户,演示ni的例子

2012年8月02日星期四
售后陶锋调试n210的OFDM的802.11

2012年8月02日星期四
税务月报
2012年8月03日星期五
备货,交接





2012年8月16日星期四
1、国家电网合同

2、负载电容
  负载电容是指晶振的两条引线连接IC块内部及外部所有有效电容之和,可看作晶振片在电路中串接电容。负载频率不同决定振荡器的振荡频率不同。标称频率相同的晶振,负载电容不一定相同。因为石英晶体振荡器有两个谐振频率,一个是串联揩振晶振的低负载电容晶振:另一个为并联揩振晶振的高负载电容晶振。所以,标称频率相同的晶振互换时还必须要求负载电容一至,不能冒然互换,否则会造成电器工作不正常。 把电能转换成其他形式的能的装置叫做负载。电动机能把电能转换成机械能,电阻能把电能转换成热能,电灯泡能把电能转换成热能和光能,扬声器能把电能转换成声能。电动机、电阻、电灯泡、扬声器等都叫做负载。晶体三极管对于前面的信号源来说,也可以看作是负载。对负载最基本的要求是阻抗匹配和所能承受的功率。

2012年8月17日星期五
企业400qq合同,付款


2012年8月20日星期一
东南大学备货
国家电网uart调试

2012年8月21日星期二
国家电网zpu调试

2012年8月22日星期三
国家电网FPGA调试

2012年8月23日星期四

2012年8月24日星期五


2012年8月27日星期一
国家电网uart调试

2012年8月28日星期二
企业qq办公版试用
ADC有两个基本特征:
a、抽样率  :ADC测量模拟信号的速度。
b、动态范围:是ADC区别最低信号值与最大信号值的精度。



2012年9月17日星期一



2012年9月18日星期二
fx2代码阅读环境配置

2012年9月19日星期三
fx2代码阅读


2012年9月20日星期四


2012年9月22日星期五

2012年9月24日星期一
FPGA程序在一般在/usr/local/share/usrp/rev4/中    默认文件为std_2rxhb_2tx.rbf。
修改默认文件的源码文件为 usrp_prims.cc

2012年9月25日星期二

sof是SRAM Object File,下载到FPGA中,断电丢失。

pof是Programmer Object File,下载到配置芯片中,上的重新配置FPGA。

用单片机配置 时,要将“.sof”文件转换成“.rbf(Raw BinaryFile)”文件,可打开QuartusII的File菜单,单击ConvertProgramming Fiks进行转换。



2012年9月26日星期三
安装keil出现错误:*** ERROR R208: RENEW LICENSE ID CODE (LIC),这么办?

之所以出现这个原因,是因为你的计算机的网络适配器不是一项,比如我的有1394网卡,安装虚拟机后,另有了两个虚拟网卡。在注册过程中将其他的网卡先暂时停用,只留一个网卡,即能注册成功





2012年10月08日星期一
SDCC生成的文件格式:
?sourcefile.asm - 程序的汇编文件
?sourcefile.lst - 程序的列表文件
?sourcefile.rst - 被链接器更新的列表文件
?sourcefile.sym - 由链接器生成的符号清单
?sourcefile.rel - 由汇编器生成的对象文件,提供给链接器使用
?sourcefile.map - 被链接器更新的最终存储器映射
?sourcefile.mem - 内存的使用情况摘要
?sourcefile.ihx - 用于生成Intel Hex格式文件模块

2012年10月09日星期二
bit文件的格式:

.bit是二进制文件,可以分为三个部分:头部冗余信息,配置数据,尾部冗余信息。
头部信息
配置数据
尾部信息

其中头部信息的格式可以参见《Tell me about the .BIT file format》.它里面包含了当前ISE工程名字、编译时间等信息,因此头部信息的长度是不确定的,72个字节左右。
第二部分是配置数据流,以0xFF FF FF FF AA 99 55 66开头,AA 99 55 66是Xilinx指定的同步字符。配置数据流的具体格式及含义可以参见参考文献,比如ug071.pdf的P95的Configuration Sequence,基本格式就是指令+数据,很清晰地给出哪个字节是什么命令,用来干什么。例如bit文件中,加载数据帧之后,有CMD寄存器的命令: START 0x5(0101b) 表示开始Start-Up Sequence。
最后一部分是尾部信息,由16个32bit的空操作指令:0x20 00 00 00组成。大家可以打开bit文件看,有很多20 00 00 00。这些表示空操作。这部分信息可以不用加载到FPGA。我认为Xilinx把bit文件后面加上这些空操作,是为了在SelectMAP时能让用户多给一些CCLK,完成StartUp.

2012年10月10日星期三
bit文件和bin文件的区别:
.bin文件和.bit的区别就在于,.bin只包含配置数据,没有前面的header inforamtion。


2012年10月11日星期四
画WBX图
2012年10月12日星期五
画WBX图



2012年10月22日星期一
c语言的编译过程:
gcc首先运行预处理程序cpp来展开hello.c中的宏并在其中插入#include文件所包含的内容;然后把预处理后的源代码编译成目标代码;最后,链接程序ld创建一个名为hello的二进制文件。
2012年10月23日星期二
调试XCVR2450
2012年10月24日星期三
调试XCVR2450
2012年10月25日星期四
调试XCVR2450
2012年10月26日星期五
ATSC

2012年10月29日星期一
广西师范标书
2012年10月30日星期二
发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。
使用Text模式收发短信代码简单(openbts采用的) ,实现起来十分容易,但最大的缺点是不能收发中文短信,所以你会看到乱码;
而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。
所以你需要bts里面加入PDU模式的短信处理,所以你需要知道PDU短信的格式,格式错误自然是乱码


2012年10月31日星期三
上面分别是移动和CDMA发来的短信PDU编码。

1、发送短信PDU编码:

 


目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。

A:短信息中心地址长度,2位十六进制数(1字节)。
B:短信息中心号码类型,2位十六进制数。
C:短信息中心号码,B+C的长度将由A中的数据决定。
D:文件头字节,2位十六进制数。
E:信息类型,2位十六进制数。
F:被叫号码长度,2位十六进制数。
G:被叫号码类型,2位十六进制数,取值同B。
H:被叫号码,长度由F中的数据决定。
I:协议标识,2位十六进制数。
J:数据编码方案,2位十六进制数。
K:有效期,2位十六进制数。
L:用户数据长度,2位十六进制数。
M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。

PDU编码协议简单说明

例1 发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是
08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01
对照规范,具体分析:
分段 含义 说明
08 SMSC地址信息的长度 共8个八位字节(包括91)
91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个
11 基本参数(TP-MTI/VFP) 发送,TP-VP用相对格式
00 消息基准值(TP-MR) 0
0D 目标地址数字个数 共13个十进制数(不包括91和‘F’)
91 目标地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 96 03 29 30 F0 目标地址(TP-DA) 8613693092030,补‘F’凑成偶数个
00 协议标识(TP-PID) 是普通GSM类型,点到点方式
00 用户信息编码方式(TP-DCS) 7-bit编码
00 有效期(TP-VP) 5分钟
06 用户信息长度(TP-UDL) 实际长度6个字节
C8 32 9B FD 0E 01 用户信息(TP-UD) “Hello!”

例2 接收:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“你好!”。手机接收到的PDU串可以是
08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21
对照规范,具体分析:
分段 含义 说明
08 地址信息的长度 个八位字节(包括91)
91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个
84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址
0D 回复地址数字个数 共13个十进制数(不包括91和‘F’)
91 回复地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 96 03 29 30 F0 回复地址(TP-RA) 8613693092030,补‘F’凑成偶数个
00 协议标识(TP-PID) 是普通GSM类型,点到点方式
08 用户信息编码方式(TP-DCS) UCS2编码
30 30 21 80 63 54 80 时间戳(TP-SCTS) 2003-3-12 08:36:45  +8时区
06 用户信息长度(TP-UDL) 实际长度6个字节
4F 60 59 7D 00 21 用户信息(TP-UD) “你好!”



2012年11月1日星期四
strip经常用来去除目标文件中的一些符号表、调试符号表信息,以减小程序的大小,在rpmbuild包的最后就用到。
2012年11月2日星期五

2012年11月5日星期一
北邮展示openbts

2012年11月6日星期二
c语言警告:
warning: incompatible implicit declaration of built-in function 'exit'
解决:
出错的原因是因为没有包含对应的都文件信息。可以尝试使用下面几种方法解决:
a、添加 #include <stdlib.h> 头文件
b、编译时使用 [-fno-builtin-exit] 选项关闭警告
示例:
$ gcc -fno-builtin-exit demo.c
 
warning: incompatible implicit declaration of built-in function 'exit'  
尝试编译如下代码:
#include <stdio.h>
 
int
main(void)
{
    int i = -10;
     
    if (i < 0) {
        exit(1);
    }
 
    return 0;
}
  编译信息如下:

$ gcc demo.c
demo.c: In function ‘main’:
demo.c:9: warning: incompatible implicit declaration of built-in function ‘exit’
出错的原因是因为没有包含对应的都文件信息。可以尝试使用下面几种方法解决:
添加 #include <stdlib.h> 头文件
示例
#include <stdlib.h>
#include <stdio.h>
 
int
main(void)
{
    int i = -10;
     
    if (i < 0) {
        exit(1);
    }
 
    return 0;
}
编译时使用 [-fno-builtin-exit] 选项关闭警告
示例

$ gcc -fno-builtin-exit demo.c
使用系统定义常量移植性更好
示例
#include <stdio.h>
#include <stdlib.h>
 
int
main(void) 
{   
    int i = -10;
     
    if (i < 0) {
        exit(EXIT_SUCCESS);
    }
     
    return 0;
}


2012年11月7日星期三
c语言警告:
warning: passing argument 2 of ‘count_main’ from incompatible pointer type
解决:

warning: passing argument 1 of ‘fprintf’ from incompatible pointer type



2012年11月8日星期四
c语言警告:
 warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char **’
解决:

2012年11月9日星期五
gcc 优化选项 -O1 -O2 -O3 -Os 
少优化->多优化:
O0 -->> O1 -->> O2 -->> O3
-O0表示没有优化,-O1为缺省值,-O3优化级别最高

//==================gcc参数大全:===========================


[介绍]
gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步
1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]

[参数详解]
-x language filename
 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。
  可以使用的参数吗有下面的这些
  `c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `assembler-with-cpp'.
  看到英文,应该可以理解的。
  例子用法:
  gcc -x c hello.pig

-x none filename
  关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型
  例子用法:
  gcc -x c hello.pig -x none hello2.c

-c
  只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
  例子用法:
  gcc -c hello.c
  他将生成.o的obj文件

-S
  只激活预处理和编译,就是指把文件编译成为汇编代码。
  例子用法
  gcc -S hello.c
  他将生成.s的汇编代码,你可以用文本编辑器察看

-E
  只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.
  例子用法:
  gcc -E hello.c > pianoapan.txt
  gcc -E hello.c | more
  慢慢看吧,一个hello word 也要与处理成800行的代码

-o
  制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,改掉它,哈哈
  例子用法
  gcc -o hello.exe hello.c (哦,windows用习惯了)
  gcc -o hello.asm -S hello.c

-pipe
  使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题
  gcc -pipe -o hello.exe hello.c

-ansi
  关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof关键字,以及UNIX,vax等预处理宏,

-fno-asm
  此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。     
-fno-strict-prototype
  只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.
  而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型

-fthis-is-varialble
  就是向传统c++看齐,可以使用this当一般变量使用.

-fcond-mismatch
  允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型

-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
  这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前两个参数)或者 signed char(后两个参数)

-include file
  包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include<filename>
  例子用法:
  gcc hello.c -include /root/pianopan.h

-imacros file
  将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中

-Dmacro
  相当于C语言中的#define macro

-Dmacro=defn
  相当于C语言中的#define macro=defn

-Umacro
  相当于C语言中的#undef macro

-undef
  取消对任何非标准宏的定义

-Idir
  在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他
  回先在你所制定的目录查找,然后再按常规的顺序去找.
  对于#include<file>,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找

-I-
  就是取消前一个参数的功能,所以一般在-Idir之后使用

-idirafter dir
  在-I的目录里面查找失败,讲到这个目录里面查找.

-iprefix prefix
-iwithprefix dir
  一般一起使用,当-I的目录查找失败,会到prefix+dir下查找

-nostdinc
  使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置

-nostdin C++
  规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创libg++库使用

-C
  在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的

-M
  生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下,很简单。

-MM
  和上面的那个一样,但是它将忽略由#include<file>造成的依赖关系。

-MD
  和-M相同,但是输出将导入到.d的文件里面

-MMD
  和-MM相同,但是输出将导入到.d的文件里面

-Wa,option
  此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序

-Wl.option
  此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.

-llibrary
  制定编译的时候使用的库
  例子用法
  gcc -lcurses hello.c
  使用ncurses库编译程序

-Ldir
  制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然
  编译器将只在标准库的目录找。这个dir就是目录的名称。

-O0
-O1
-O2
-O3
  编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高     
-g
  只是编译器,在编译的时候,产生调试信息。

-gstabs
  此选项以stabs格式声称调试信息,但是不包括gdb调试信息.

-gstabs+
  此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.

-ggdb
  此选项将尽可能的生成gdb的可以使用的调试信息.

-static
  此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么
动态连接库,就可以运行.

-share
  此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

-traditional
  试图让编译器支持传统的C语言特性

[参考资料]
-Linux/UNIX高级编程
  中科红旗软件技术有限公司编著.清华大学出版社出版
-Gcc man page

运行 gcc/egcs

**********运行 gcc/egcs***********************
  GCC 是 GNU 的 C 和 C++ 编译器。实际上,GCC 能够编译三种语言:C、C++ 和 Object C(C 语言的一种面向对象扩展)。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。
  如果你有两个或少数几个 C 源文件,也可以方便地利用 GCC 编译、连接并生成可执行文件。例如,假设你有两个源文件 main.c 和 factorial.c 两个源文件,现在要编译生成一个计算阶乘的程序。
代码:

-----------------------
清单 factorial.c
-----------------------
int factorial (int n)
{
  if (n <= 1)
   return 1;
  else
   return factorial (n - 1) * n;
}
-----------------------
清单 main.c
-----------------------
#include <stdio.h>
#include <unistd.h>

int factorial (int n);
int main (int argc, char **argv)
{
  int n;

  if (argc < 2)
  {
    printf ("Usage: %s n\n", argv [0]);
    return -1;
  }
  else
  {
   n = atoi (argv[1]);
   printf ("Factorial of %d is %d.\n", n, factorial (n));
   }
  return 0;
}


-----------------------
利用如下的命令可编译生成可执行文件,并执行程序:
$ gcc -o factorial main.c factorial.c
$ ./factorial 5
Factorial of 5 is 120.

  GCC 可同时用来编译 C 程序和 C++ 程序。一般来说,C 编译器通过源文件的后缀名来判断是 C 程序还是 C++ 程序。在 Linux 中,C 源文件的后缀名为 .c,而 C++ 源文件的后缀名为 .C 或 .cpp。但是,gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。假设我们有一个如下的 C++ 源文件(hello.C):
#include <iostream>
void main (void)
{
  cout << "Hello, world!" << endl;
}

则可以如下调用 g++ 命令编译、连接并生成可执行文件:
$ g++ -o hello hello.C
$ ./hello
Hello, world!


**********************gcc/egcs 的主要选项*********
gcc 命令的常用选项
选项 解释
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,
例如 asm 或 typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO 以字符串“1”定义 MACRO 宏。
-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。
-E 只运行 C 预编译器。
-g 生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
-m486 针对 486 进行代码优化。
-o FILE 生成指定的输出文件。用在生成可执行文件时。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
-shared 生成共享目标文件。通常用在建立共享库时。
-static 禁止使用共享连接。
-UMACRO 取消对 MACRO 宏的定义。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。

 


 
2012年11月12日星期一
中文短信调试
2012年11月13日星期二
中文短信调试成功
2012年11月14日星期三
备货
发货张老师

2012年11月15日星期四
set -e ^?

2012年11月16日星期五
srandom( );
c语言随机数
srandom是用来初始化一个种子的。实际上就相当于给定了一个值。只不过这个值对其他变量没有用的。

要从随机数说起 调用随机数函数 rand() 的时候, 实际得到的这个随机数并不是绝对随机的,它是以一个初始值,通过一个算法,计算出来的“伪随机数"数列,每次调用rand()时,从这个数列依次取出一个值,做为随机数。这个初始的值就是"随机数种子", 也就是说,如果随机数种子相同,计算出的随机数数列是相同的。而srandom( x) 这个函数就是初始化随机数产生器,设定随机数种子用的。给定的x的就是随机数种子。可以验证,当你多次调用srandm(x)时,如果x取值相同,则得到的随机数数列是一样的。所以,若我们每次运行程序时,要得到不同的随机数序列,就应该用不同的种子来初始化这个随机数产生器。比如说,用时间初始化它,或者用getpid(),用进程的pid号初始化,由于每次运行程序时,它的pid号一般是不同的,所以能够产生不同的随机数序列。

2012年11月19日星期一
在vc++中程序中用了srandom()和random(),头文件为stdlib.h
random()函数的使用介绍
1、首先要让大家知道的是,random()在程序中调用是按时间来进行排序的,从你开始调用random()函数起程序就按照时间进行顺序的产生随机 数,每次应用程序开始,时间都会重置,故会出现每次开启应用程序,随机数虽然时随机的,但是顺序时固定的,大家应该先知道这个原理
2、如何让一个random()函数在每次开启程序时无顺序呢?小弟不才,结合OpenGL中的原理,进行了尝试。在你调用random()函数之前,首先写一个方法,该方法为:srandom(time(NULL));
该方法的意思就是让以后的随机数不再按时间进行排序,此后你如果再使用random()方法便不用担心它的顺序随机了。
例:
srandom(time(NULL));
for(int i = 0; i<10; i++){
NSLog(@”%d”,random());
}
试一下,看看其结果,是不是不再顺序随机了。
3、说到随机数,我还有些研究,随机数不仅用random(),还可以使用rand(),同样有srand(time(NULL));但是,在不使用 srand(time(NULL))之前,rand()的第一个随机值是16807,而random()的随机值第一个随机值是1804289383;这 就是说程序默认的随机数调用的是srand(1)或者srandom(1);你如果设置一下为srand(2),它第一个随机数便不再是16807,而是 33614,设为srand(3),则第一个随机数便是50421。这只是srand(..)的情况,如果是srandom(..),则无规律可谈。


2012年11月20日星期二
libosip2-3.0.3:
一个开源的sip协议栈
GNU oSIP库介绍 :
oSIP是SIP的实现. SIP代表Session Initiation Protocol(会话发起协议),被描述在RFC3261(不赞成RFC2543).该库目的是提供多媒体和通信的软件开发人员一种容易和强大的接口, 在他们的应用当中去初始化和控制基于会话的SIP.SIP是IEFT的一个开放标准的H.323的替代.

2012年11月21日星期三
2012年11月22日星期四
2012年11月23日星期五



2012年11月26日星期一
ImportError: No module named gnuradio
2012年11月27日星期二
Asterisk SIP注册问题如何检查Asterisk SIP注册问题

1, CLI看SIP配置:

Asterisk*CLI> sip show settings
Global Settings:
----------------
SIP Port:               5060
Bindaddress:            0.0.0.0
Videosupport:           No
AutoCreatePeer:         No
Allow unknown access:   Yes
Allow subscriptions:    Yes
Allow overlap dialing: Yes
Promsic. redir:         No
SIP domain support:     No
Call to non-local dom.: Yes
URI user is phone no:   No
Our auth realm          asterisk
Realm. auth:            No
Always auth rejects:    No
Call limit peers only: No
Direct RTP setup:       No
User Agent:             Asterisk PBX
MWI checking interval: 10 secs
Reg. context:           (not set)
Caller ID:              Unknown
From: Domain:          
Record SIP history:     Off
Call Events:            Off
IP ToS SIP:             AF31
IP ToS RTP audio:       AF31
IP ToS RTP video:       AF31
T38 fax pt UDPTL:       No
RFC2833 Compensation:   No
SIP realtime:           Disabled

Global Signalling Settings:
---------------------------
Codecs:                 0x10c (ulaw|alaw|g729)
Codec Order:            g729:20,ulaw:20,alaw:20
T1 minimum:             100
Relax DTMF:             No
Compact SIP headers:    No
RTP Keepalive:          0 (Disabled)
RTP Timeout:            0 (Disabled)
RTP Hold Timeout:       0 (Disabled)
MWI NOTIFY mime type:   application/simple-message-summary
DNS SRV lookup:         Yes
Pedantic SIP support:   No
Reg. min duration       60 secs
Reg. max duration:      3600 secs
Reg. default duration: 120 secs
Outbound reg. timeout: 20 secs
Outbound reg. attempts: 0
Notify ringing state:   Yes
Notify hold state:      No
SIP Transfer mode:      open
Max Call Bitrate:       384 kbps
Auto-Framing:           No

Default Settings:
-----------------
Context:                from-trunk
Nat:                    RFC3581
DTMF:                   rfc2833
Qualify:                0
Use ClientCode:         No
Progress inband:        Never
Language:               (Defaults to English)
MOH Interpret:          default
MOH Suggest:           
Voice Mail Extension:   asterisk

----

2, CLI看注册情况:

Asterisk*CLI> database show
/SIP/Registry/0*****9                                 : 122.195.160.***:5060:3600:0******9:sip:0*****9@122.195.160.***

/dundi/secret                                     : 6NF3Poe8zly0JUpG2AQULQ==;0taCWBssP23vXmdZT7X5DQ==
/dundi/secretexpiry                               : 1289544916


3, 检查ip-tables状态:

service iptables status

2012年11月28日星期三
readline函数
#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
#include <readline/history.h>

int main(int argc, char ** argv)
{
        char * p;
        p = readline("请输入:");
        printf("%s\n", p);
        free(p);
        return 0;
}
编译此程序用命令:
gcc -Wall readline.c -lreadline
执行程序:
./a.out
得到输出:
请输入:hello
hello
2012年11月29日星期四
原型:char *strsep(char **stringp, const char *delim);   功能:分解字符串为一组字符串。从stringp指向的位置起向后扫描,遇到delim指向的字符串中的字符后,将此字符替换为NULL,返回stringp指向的地址。它适用于分割“关键字”在两个字符串之间只“严格出现一次”的情况。[1]如果“关键字”在字符串之间连续出现,可使用如下技巧解决:

2012年11月30日星期五
详细介绍Linux指令od
Linux指令:od

示例用法:od -c hello

Linux指令:od

od命令
用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。

语法:od [选项] 文件…
命令中各选项的含义:
- A 指定地址基数,包括:
d 十进制
o 八进制(系统默认值)
x 十六进制
n 不打印位移值
- t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数
除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。

说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal
Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。




2012年12月3日星期一
UNIX环境高级编程中的apue.h错误
apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编译时是读不到这个头文件的。

先在这个网站 http://www.apuebook.com/src.tar.gz 下载tar.gz格式的源码包,然后解压至某个目录,比如说/home/godsoul/下,然后进入目录apue.2e,把文件 Make.defines.linux 中的 WKDIR=/home/xxx/apue.2e 修改为 WKDIR=/home/godsoul/apue.2e ,然后再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk,如果是用的vi/vim编辑器,可以使用这个 命令  :1.$s/nawk/awk/g (注意前面有冒号)
然后在此目录下运行make命令,即回到 /home/godsoul/apue.2e 目录在终端中输入 “./make” (不含引号)

然后把 /home/godsoul/apue.2e/inlcude 目录下的 apue.h 文件和位于 /home/godsoul/apue.2e/lib 目录下的 error.c 文件都复制到 /usr/include 目录下,apue.2e/lib/libapue.a 到/usr/lib/和 /usr/lib64下。注意复制这文件你需要有root权限。之所以要这样做,是因为gcc在链接头文件时会到 /usr/include 这个目录下寻找需要的头文件,若找不到则报错。

最终还要编辑一下复制过来的 apue.h 文件
在最后一行 #endif 前面添加一行 #include “error.c”

然后进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为awk。

这样就不会报错了。

还又可能遇到的问题如下:

如果出现stropts.h找不到的情况,则下载glibc-2.11,解压缩
cp ./glibc-2.11/streams/stropts.h /usr/include
cp ./glibc-2.11/bits/stropts.h /usr/include/bits
cp ./glibc-2.11/sysdeps/x86_64/bits/xtitypes.h /usr/include/bits

在我的机器上编译时,提示ARG_MAX未定义,可以这么修改。
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:
#include “apue.h”

改好后make clean再重新make

2. 使用apue.h文件和libapue.a库。
假定/tmp下有一个文件:threadid.c,内容如下(apue线程章节的例子):
#include <apue.h>
#include <pthread.h>

pthread_t ntid;

void
printids(const char *s)
{
pid_t           pid;
pthread_t       tid;

pid = getpid();
tid = pthread_self();
printf(“%s pid %u tid %u (0x%x)\n”, s, (unsigned int)pid,
(unsigned int)tid, (unsigned int)tid);
}

void *
thr_fn(void *arg)
{
printids(“new thread: “);
return((void *)0);
}

int
main(void)
{
int             err;

err = pthread_create(&ntid, NULL, thr_fn, NULL);
if (err != 0)
err_quit(“can’t create thread: %s\n”, strerror(err));
printids(“main thread:”);
sleep(1);
exit(0);
}

使用如下命令编译:
cc -o threadid threadid.c -lapue -lpthread
可以运行一下:
dan@dan-laptop:/tmp$ ./threadid
new thread:  pid 17490 tid 816015696 (0x30a36950)
main thread: pid 17490 tid 823949040 (0x311c76f0)

3. 编译《UNP》
这个稍微麻烦些。

http://www.unpbook.com/unpv13e.tar.gz

我们首先产生一个目录,以后自己的代码就敲在这个目录里。
mkdir /home/dan/study/unp

仍然是下载到/home/dan/download/,解压缩,进入目录
cd /home/dan/download/unpv13e/
README文件中说的很详细:
========================================
Execute the following from the src/ directory:

./configure    # try to figure out all implementation differences

cd lib         # build the basic library that all programs need
make           # use “gmake” everywhere on BSD/OS systems

cd ../libfree  # continue building the basic library
make

cd ../libroute # only if your system supports 4.4BSD style routing sockets
make           # only if your system supports 4.4BSD style routing sockets

cd ../libxti   # only if your system supports XTI
make           # only if your system supports XTI

cd ../intro    # build and test a basic client program
make daytimetcpcli
========================================
这里只编译lib下的文件,这样可以产生libunp.a,复制这个静态库到/usr/lib/和/usr/lib64/
如果提示:
unp.h:139: error: conflicting types for ‘socklen_t’
/usr/include/bits/socket.h:35: error: previous declaration of ‘socklen_t’ was here
需要注释掉当前目录中unp.h的第139行。
复制libunp.a到系统目录:
root@dan-laptop:/home/dan/download/unpv13e/lib# cp ../libunp.a /usr/lib
root@dan-laptop:/home/dan/download/unpv13e/lib# cp ../libunp.a /usr/lib64/

4.使用unp.h和libunp.a
如果直接复制unpv13e/lib/unp.h到/usr/include,那么在别的目录编译书上代码时,很可会得到类似下面的错误:
In file included from daytimetcpsrv1.c:1:
/usr/include/unp.h:227: error: redefinition of ‘struct sockaddr_storage’
In file included from daytimetcpsrv1.c:1:
/usr/include/unp.h:249:30: error: ../lib/addrinfo.h: No such file or directory
/usr/include/unp.h:263: error: redefinition of ‘struct timespec’
/usr/include/unp.h:363: error: conflicting types for ‘gai_strerror’
/usr/include/netdb.h:647: error: previous declaration of ‘gai_strerror’ was here
/usr/include/unp.h:367: error: conflicting types for ‘getnameinfo’
/usr/include/netdb.h:653: error: previous declaration of ‘getnameinfo’ was here
/usr/include/unp.h:371: error: conflicting types for ‘gethostname’
/usr/include/unistd.h:857: error: previous declaration of ‘gethostname’ was here
/usr/include/unp.h:387: error: conflicting types for ‘inet_ntop’
/usr/include/arpa/inet.h:65: error: previous declaration of ‘inet_ntop’ was here
/usr/include/unp.h:395: error: conflicting types for ‘pselect’
/usr/include/sys/select.h:121: error: previous declaration of ‘pselect’ was here
daytimetcpsrv1.c: In function ‘main’:
daytimetcpsrv1.c:9: error: ‘MAX_LINE’ undeclared (first use in this function)
daytimetcpsrv1.c:9: error: (Each undeclared identifier is reported only once
daytimetcpsrv1.c:9: error: for each function it appears in.)
dan@dan-laptop:~/study/unp/4$ rm -f /usr/include/unp.h
解决方法有点傻:
进入我们开始时建立的目录:
cd /home/dan/study/unp
复制config.h和unp.h到此目录:
dan@dan-laptop:~/study/unp$ cp /home/dan/download/unpv13e/config.h .
dan@dan-laptop:~/study/unp$ cp /home/dan/download/unpv13e/lib/unp.h .
修改unp.h,
#include “../config.h”改成 #include “config.h”
添加一行:
#define MAX_LINE 2048
练习书上代码时,在unp目录下建立相应的章节目录,文件中添加一行:
#include “../unp.h”
编译时链接unp库就可以了。

以第四章的daytimetcpsrv1.c为例:
dan@dan-laptop:~/study/unp/4$ pwd
/home/dan/study/unp/4
dan@dan-laptop:~/study/unp/4$ cat daytimetcpsrv1.c
#include “../unp.h”
#include <time.h>

int main(int argc, char **argv)
{
int    listenfd, connfd;
socklen_t    len;
struct sockaddr_in    servaddr, cliaddr;
char    buff[MAX_LINE];
time_t    ticks;

listenfd = Socket(AF_INET, SOCK_STREAM, 0);

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13);

Bind(listenfd, (SA *)&servaddr, sizeof(servaddr));

Listen(listenfd, LISTENQ);

for (;;) {
len = sizeof(cliaddr);
connfd = Accept(listenfd, (SA *)&cliaddr, &len);
printf(“connection from %s, port %d\n”,
Inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)),
ntohs(cliaddr.sin_port));

ticks = time(NULL);
snprintf(buff, sizeof(buff), “%.24s\r\n”, ctime(&ticks));
Write(connfd, buff, strlen(buff));

Close(connfd);
}
}
编译:
cc -o daytimetcpsrv1 daytimetcpsrv1.c -lunp
运行一下:
root@dan-laptop:/home/dan/study/unp/4# ./daytimetcpsrv1 &
[1] 22106
root@dan-laptop:/home/dan/study/unp/4#
root@dan-laptop:/home/dan/study/unp/4# ./daytimetcpcli
usage: a.out <IPaddress>
root@dan-laptop:/home/dan/study/unp/4# ./daytimetcpcli 127.0.0.1
connection from 127.0.0.1, port 42064
Fri Aug 21 23:03:56 2009
root@dan-laptop:/home/dan/study/unp/4# netstat -nt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:13            127.0.0.1:42064         TIME_WAIT

2012年12月4日星期二
execlp
从PATH 环境变量中查找文件并执行


定义:
int execlp(const char * file,const char * arg,……);


头文件:
#include<unistd.h>


说明:
execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名, 找到后便执行该文件, 然后将第二个以后的参数当做该文件的argv[0]、argv[1]……, 最后一个参数必须用空指针(NULL)作结束。


返回值:
如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中。


相关函数:
fork, execl, execle, execv, execve, execvp


错误代码:
参考execve()。


示例:
#include<unistd.h>

main()
{
    execlp("ls","ls","-al","/zhmc",(char *)0);

}

输出:

2012年12月5日星期三
strcpy函数的用法
strcpy(s1,s2);strcpy函数的意思是:把字符串s2中的内容copy到s1中,连字符串结束标志也一起copy.
这样s1在内存中的存放为:ch\0;
在cout<<s1<<endl时,结果为ch;事实上,在内存里面是这样的存储结构:ch\0na

如果说s1的长度是6,那是错误的.你没有弄清strlen与sizeof的意思。
strlen函数的意思是测试字符串的字符长度,不含字符串结束标志的。
sizeof是个运算符,它的结果是字符串在内存中的所占字节大小,它要把\0算进去的。

strcpy函数原型1
char * strcpy(char *a,char *b)
{ while((*(a++)=*(b++))!=0);return a;}

strcpy函数原型2
char *strcpy(char *strDest, const char *strSrc);//strDest为目标,strSrc为源
{
     assert((strDest!=NULL) && (strSrc !=NULL)); //如果两个为空则不用复制,直接中止
     char *address = strDest;       //用address指向strDest开始地址
     while( (*strDest++ = * strSrc++) != ‘\0’ ) //复制,直到源串结束;
        NULL ; //空操作
     return address ;    //返回strDest开始地址                      
     }
}//就这个算法看来是多余.


 

#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
char s1[6]="china" ,s2[3]="ch";
cout<<s1<<endl;                    //china
cout<<strlen(s1)<<endl;         //5
cout<<sizeof(s1)<<endl;         //6
strcpy(s1,s2);
cout<<s1<<endl;                    //ch


for (int i=0;i<5;i++)
{
   cout<<s1[i]<<endl;
}
cout<<strlen(s1)<<endl;         //2
cout<<sizeof(s1)<<endl;         //6
return 0;
}
 
 

2012年12月6日星期四
2011-10-10 15:26 Git checkout git checkout master     //取出master版本的head。
git checkout tag_name    //在当前分支上 取出 tag_name 的版本
git checkout  master file_name  //放弃当前对文件file_name的修改

 

git checkout  commit_id file_name  //取文件file_name的 在commit_id是的版本。

commit_id为 git commit 时的sha值。

 

列出某一个commit ID(XXXXXXXXXXXXXXXX) 对应的补丁:

   $ git log -1 -p XXXXXXXXXXXXXXXX
   $ git format-patch -1 XXXXXXXXXXXXXXXX <===-1不可省略
        --stdout         //打印到标准输出
   $ git show XXXXXXXXXXXXXXXX
   $ git diff-tree -p XXXXXXXXXXXXXXXX



2012年12月7日星期五
ubuntu10.10编译gnuradio3.2.2结合openbts PDU(achemeris)可发中文
编译gnuradio3.2.2
./bootstrap
./configure
make
make instal
编译openbts PDU
git clone git://openbts.git.soureforge.net/gitroot/openbts/openbts
cd openbts
git branch -a
git checkout origin/achemeris/sms-split
须修改Transceiver52M/USRPDevice.h和Transceiver/USRPDevice.h 的
以下几行,否则找不到头文件
#  include <usrp/usrp_standard.h>
#  include <usrp/usrp_bytesex.h>
#  include <usrp/usrp_prims.h>
修改为:
#  include <usrp_standard.h>
#  include <usrp_bytesex.h>
#  include <usrp_prims.h>

./configure
make
make install



2012年12月10日星期一
openbts-2.6.0Mamou/Transceiver52M/USRPDevice.cpp
将以下行修改为
const dboardConfigType dboardConfig = TXA_RXA;(TXA为A板发射,RXA为A板接收)


2012年12月11日星期二
FAQ
RFX900:
AD8349管发射(发射有问题一般是这个芯片焊接不好)
2012年12月12日星期三
RFX900组成:
 -  I / Q调制器ADI公司AD8349(U101)[AD8349];
 -  I / Q解调器[800兆赫 -  2.7 GHz的](U2)ADI公司AD8347
[AD8347]。;
 - 两个EEPROM(U102和U1)的2千位Microchip的24LC025B[24lc024];
 - 两个VCO /频率合成器(U3和U103)ADI公司ADF4360-3
[ADF4360];
 -  U104和U4)两个低噪声放大器(Avago Technologies(安华高科技)MGA82563[mga82563]
13 dB的增益和噪声系数为2.2分贝;
 - 宽带功率放大器RF3315(U105)[rf3315];
 - 两台交换机发送/接收[DC  -  3 GHz的](U202和U209)赫
HMC174MS8[hmc174ms8];
 - 座6飞兆半导体74AC04逆变器(U204)[74AC04];
 - 表面波滤波器(SAW)915(MHz的SAWTEK856327 FIL1),[856327];
 - 两个电压调节器(U5和U6)ADI公司ADP3336 adp3336];
 - 电压调节器(U203)ADI公司ADP3336 adp3336];
 - 连接器(J3,J100,J202,J10116个引脚,64引脚J102,J2416个引脚,64引脚J1)
2012年12月13日星期四
U2组成:
该主板USRP2的组成如下:
- FPGA(U1)赛灵思Spartan-3 XC3S2000的Spartan3]将一个处理器
32位RISC软核AeMB 50 MHz和实施标准配置:
两个DDC板,确保混合,过滤和抽取
高达100 MS / s的信号,在FPGA内;
?提供DUC内插的基带信号
100 MS / s的移调他们所需的频率之前;
- 双CAN(U2)14位,105Méch/秒,72.4分贝SNR和动态编码
凌力尔特LTC228485分贝[LTC2284];
- 双DAC(U3),16位400 MS / s的(输出,但100 MS / s的输入)
ADI公司AD9777 AD9777];
- 两个子数模转换器(U4和U5)12位ADI公司的AD5623 ad5623];
- 两个CAN辅助(U6,U7)12位ADI公司的AD7922 AD7922;
- 以太网接口10/100/1000 Mbit / s的(U12)美国国家半导体公司
DP83865 DP83865];
- 2个扩展插槽(1 TX:J401,RX 1:J402),用于连接一到两个
子卡。注:只有一个USRP2是不兼容的MIMO 2x2的,但
连接几个也能够创建一个兼容的多输入多输出
8×8;
- 一个SD卡读卡器;
- 赛普拉斯的SRAM(U19)1 MB CY7C1356C的[CY7C];
- EEPROM(U11)2千位Microchip的24LC024 [24lc024];
杜马斯-00693426,第1版 - 2012年5月9日

LXII
- J101 J108连接器,J201,J204,J203,J301(MICTOR43-LA),J305,
J504,J505,J601(BEL 0826-1X1T-23-F),J707(IPASS SAS-X4-和-SHLD
IPASS-SAS-X4);
- 还有一点点的胶合逻辑:
O 100 MHz振荡器的超低相位噪声VCXO CRYSTEK
CVHD-950(U8)[Crystek];
?时钟分配电路(U9)1.2 GHz模拟设备
AD9510 AD9510];
?CPLD(U10)Xilinx的XC9572 VQ44,加载FPGA比特流
SD卡的FPGA [cpld9572];
O“串化器/解串器千兆位德州仪器TLK2701
(U13)[tlk2701];
两个2A开关稳压器凌力尔特(U14和U15)LT
3510 [LT3510];
o一个逻辑电平转换器(U17):ADI公司
ADG3301 [adg3301];
?一个开关2x2的800 Mbit / s的低差分信号
电压(LVDS)(U18)国家半导体DS90CP22,ds90cp];
?接收器的差分LVDS 3V(U20)美国国家半导体公司
DS90LT012AH的[ds90lt];
o一个CMOS线性稳压器(U22)美国国家半导体公司
LP38692MP [LP38692];
?双振荡器(U23)LTC6908 LTC6908];
O复位电路(U24)+ T和马克西姆MAX6749KA [max6749];
o三个电压转换器(U31,U32和U33)德州仪器(TI)
SN74AUP1T57 [SN74]。
2012年12月14日星期五


2012年12月17日星期一
2012年12月18日星期二
2012年12月19日星期三
2012年12月20日星期四
2012年12月21日星期五



2012年12月17日星期一
2012年12月18日星期二
2012年12月19日星期三
2012年12月20日星期四
2012年12月21日星期五





计划中的任务:
软件:
1、openbts(基于uhd)
2、蓝牙(usrp)
3、802.11n(usrp)
4、openbts(双板livedvd)
5、rfid
硬件:
1、调试TVRX2
2、XCVR2450
3、SBX
4、WBX












localhost
svn co http://localhost/svn/me_diary myproject --username
svn co file:///home/svn/repo




ċ
sooof.txt
(57k)
耿明军,
2013年11月14日 下午5:55
Comments