ptz 发布的文章

解压缩时,要把压缩包中的目录结构完整的解压缩到VIM\vimfiles目录中。完成后,应该分别找到VIM\vimfiles\doc\NERD_tree.txt文件和VIM\vimfiles\plugin\NERD_tree.vim文件。然后在vim中输入命令:helptagsVIM\vimfiles\doc,将NERDTree的帮助文档添加到vim中。

最后在_vimrc添加如下内容: " NERDTree map :NERDTreeToggle

(注意和:NERDTreeToggle之间有个英文空格)

重启vim后,按下F10键,就可以在左侧看到一个目录树了。在目录树窗口中按下?键可以查看详细的帮助信息。

最常用的操作键有: C(大写C键) 将光标所在目录设置为根目录 u(小写u键) 转到上一级目录 o(小写o键) 展开(或折叠)光标所在目录的子目录。如果光标所在位置是一个文件,则在编辑窗口中打开该文件

此外在目录树窗口中输入目录:Bookmark收藏名还可以将光标所在目录添加到收藏夹中。下次使用:BookmarkToRoot收藏名可以直接转到该目录,并且以该目录作为根目录。更多命令可以参考NERDTree的帮助文档(:help NERD_tree.txt)。

vim NERD tree 书签 有两个概念需要说明 一个是 NERD tree 启用后,显示的目录 一个是vim的当前目录

两个是不一样的 例如 我 NERD tree 显示的是 d:\phpnow\htdocs\drupal 目录 然后我新建一个文件 a.php 保存之后去查看 a.php 并不是在 d:\phpnow\htdocs\drupal 下面 而是在 vim.exe 所在的目录 即当前目录 打开vim 之后 用 :pwd 查看当前目录

修改当前目录 可以在vim配置文件里面 加上 :cd D:\PHPnow\htdocs\drupal
或者在 vim 里面 用 :cd 目录地址 命令切换目录

Bookmark bookmark_name 将选中结点添加到书签列表中,并命名为name(书签名不可包含空格); 如与现有书签重名,则覆盖现有书签。

OpenBookmark bookmark_name 打开指定的文件。(参数必须是文件书签) 如果该文件在当前的目录树下,则打开它的上层结点并选中该书签

ClearBookmarks [] 清除指定书签;如未指定参数,则清除所有书签

加好标签之后 就可以 :OpenBookmark bookmark_name 打开目录树 方便编辑不同项目

简便方式是这样的

修改vim 配置文件 加上

"NERDTree map :NERDTreeToggle =""

保存之后 再打开vim

按 CTRL + t vim 下方出现

再在后边补上你用 :Bookmark 命令添加的书签的书签名称 然后回车 就看到你希望显示的目录树了

ps:

最好在 vim配置里面 加上

let NERDTreeBookmarksFile='/usr/share/vim/NerdBookmarks.txt'

制定书签存放的位置 出问题了可以手动修改他 over

http://blog.csdn.net/hadeys/article/details/6962979 "==== F3 NERDTree 切换 map :NERDTreeToggle imap :NERDTreeToggle

  1. 常用快捷键:

    o - 打开所选文件或目录 enter - 相当于o go - 类似o, 但光标仍然停留在NERD_tree t - 在新标签中打开所选文件 T - 类似t, 但光标仍然停留在NERD_tree i - 在一个水平分割窗口中打开文件 gi - 类似i, 但光标仍然停留在NERD_tree s - 在一个垂直分割窗口中打开文件 |NERDTree-s| gs - 类似s, 但光标仍然停留在NERD_tree O - 递归打开所选目录 ctr+w+h 光标focus左侧树形目录,ctrl+w+l 光标focus右侧文件显示窗口

http://blog.csdn.net/ThinkHY/article/details/5471576

"NERDTree plugin

let NERDTreeWinPos = "right" "where NERD tree window is placed on the screen

"let NERDTreeWinSize = 31 "size of the NERD tree

nmap :NERDTreeToggle" Open and close the NERD_tree.vim separately

  这是一款供Vim使用的插件,看名字可以知道,它和同属一个作者。使用这款插件,你可以对多种文件类型的文件进行不同方式地、快速地注释。这对使用Vim来写代码或者修改配置文件的同学来说,无疑是提升效率和快感的一件利器。你可以到这个插件,将压缩包里面的doc/和plugin/文件夹丢到~/.vim/下面就是安装了。为了可以使用其帮助文档,你还需要在Vim中执行:helptags ~/.vim/doc/来注册。

install details The NERD Commenter requires Vim 7 or higher.

Extract the plugin files in your ~/.vim (*nix) or ~/vimfiles (Windows). You should have 2 files: plugin/NERD_commenter.vim doc/NERD_commenter.txt

Next, to finish installing the help file run:
helptags ~/.vim/doc

See |add-local-help| for more details.

Make sure that you have filetype plugins enabled, as the script makes use of |'commentstring'| where possible (which is usually set in a filetype plugin). See |filetype-plugin-on| for details, but basically, stick this in your vimrc filetype plugin on

  简单介绍下NERD Commenter的常用键绑定,以C/C++文件为例,详析的使用方法,请:h NERDCommenter。在Normal或者Visual 模式下:

,ca,在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
,cc,注释当前行
,c,切换注释/非注释状态
,cs,以”性感”的方式注释
,cA,在当前行尾添加注释符,并进入Insert模式
,cu,取消注释
Normal模式下,几乎所有命令前面都可以指定行数
Visual模式下执行命令,会对选中的特定区块进行注释/反注释

注:各命令前缀是可以自己设置的,通常是逗号’,'或者’\’.

你好,我按照NERD Commenter安装好了,但是为什么我按,cc就给当前行删除了呢?我试了下\cc,管用了,为什么呢?能不能把这个配置或者什么给我讲清楚,网上我找不到资料,谢谢你了! ↑ @ September 8, 2011,2:37 pm()

有一个选项mapleader定义了所代表的字符,许多插件的键映射使用了这个,可以根据需要在配置文件里面set mapleader=,设置, ^_^

这个命令前缀怎么设置呢? ↑ @ April 1, 2011,8:01 pm()

let mapleader=”,”
参考:h 

记录以作备用。

前几天准备换掉RHEL5,来个其他的linux发行版。查了查,终于发现一个比较适合我的,就是arch linux,只包含一些最基本的模块,其他的都有手动去安装。但是坑爹的是网上的中文教程全部是2010版本,内含setup的图形界面,而12.08.04只有命令行模式安装方式。还好还有wiki,但是wiki的中文也是不够详细,详细的还是要看英文。

下载安装镜像和配置虚拟机都略过。 进入安装模式以后第一件事是要进行分区,分区很重要,怎么分区是由后面的grub的模式来决定的。grub有3种模式,分别对应grub-bios-gpt,grub-bios-mbr,grub-uefi。当时我因为一时糊涂,结果选择了grub-uefi这个分支世界线,结果就bad end了一天啊。所以建议走grub-bios-gpt和grub-bios-mbr这两条线,最后我选择了grub-biso-gpt这条世界线,终于一次good end了。

选择grub-bios-gpt的话,就需要用gdisk或者cgdisk来分区,千万不要用fdisk,会挂的。gdisk是直接命令行界面,cgdisk有写图形界面的样子。这次我选择了gdisk,使用 命令 gdisk /dev/sda。 根据界面提示分区如下。 大小 编码 文件系统 挂载 2M ef02 无文件系统 512M 8300 linux filesystem /boot 61.5G 8300 linux filesystem / 2G 8200 linux swap swap

2M的这个区是一定需要的因为grub-bios-gpt指明需要这个区,并且这个区推荐在最前,比/boot还要靠前,他的编码是ef02,这个一定要选对,文件系统为无。 512M 这个区其实不一定要这么大,不过我是为了以后如果可以更换为grub-uefi而预留的,刚好也可以作为一个/boot区域。 61.5G,我是直接作为一个主目录 2G,我是作为交换区域来用的。

下面是格式化 mkfs.ext4 /dev/sda2 mkfs.ext4 /dev/sda3 mkswap /dev/sda4 && swapon /dev/sda4 这个交换区,总觉得好像没有运行起来。。。 mount /dev/sda3 /mnt mount /dev/sda2 /mnt/boot

然后就是根据实际情况配置网络 ifconfig eth0 192.168.1.103 这个是IP地址 route add default gw 192.168.1.1 这个是网关 vi /etc/resolv.conf 使用VI来打开DNS配置文件添加下面两句 nameserver 218.2.135.1 nameserver 61.147.37.1

静态IP地址的可以试试看ping 网关,如果不通,那么就肯定是IP和网关没设置号。 然后在试试看ping 随便一个网站看看比如说ping . 如果提示错误的意思大致是超出范围的,那就肯定是DNS没设置好。

配置好网络然后就可以安装了 pacstrap /mnt base base-devel arch linux 基础包

pacstrap /mnt grub-bios grub-bios 和syslinux只需要一个

genfstab -p /mnt >> /mnt/etc/fstab 生成分区表

arch-chroot /mnt 切换根目录

vi /etc/hostname 设置主机名 xyz

vi /etc/hosts 设置host
127.0.0.1 localhost.localdomain localhost xyz
:1 localhost.localdomain localhost xyz search xyz

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 设置地区

vi /etc/locale.gen 找到开头为en_US和zh的行,把前面的注释符去掉

vi /etc/locale.conf
LC_COLLATE="C"

vi /usr/share/i18n/locales/zh_CN 找到LC_TIME段落,并添加 week 7;19971130;5 first_weekday 2 first_workday 2

locale-gen 生成地区信息

mkinitcpio -p linux

pacman -S grub-bios

modprobe dm-mod

grub-install --target=i386-pc --recheck --debug /dev/sda mkdir -p /boot/grub/locale

cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo

grub-mkconfig -o /boot/grub/grub.cfg 生成grub配置信息

passwd root 生成root密码

exit

umount /mnt/boot

umount /mnt

reboot

OK这样就安装好了,可以进入archlinux了,当然后面还有很多需要自己配置的东西

本次网卡移植参考国嵌实验

在include/configs/tq2440.h中

58行左右 / modified by ptz , for tq2440, dm9000 /

define CONFIG_DRIVER_CS8900 1 / we have a CS8900 on-board /

//#define NETWORK_DRIVER_CS8900 1

define NETWORK_DRIVER_DM9000 1

if defined (NETWORK_DRIVER_CS8900)

define CS8900_BASE 0x19000300

define CS8900_BUS16 1 / the Linux driver does accesses as shorts /

elif defined (NETWORK_DRIVER_DM9000)

define CONFIG_DRIVER_DM9000 1

define CONFIG_DM9000_USE_16BIT 1

define CONFIG_DM9000_BASE 0x20000300

define DM9000_IO 0x20000300

define DM9000_DATA 0x20000304

endif

112行左右 / add by ptz, for tq2440, PING CMD/

define CONFIG_CMD_PING

119行左右 / modified by ptz , for tq2440, dm9000 /

define CONFIG_IPADDR 192.168.1.105

define CONFIG_SERVERIP 192.168.1.103

define CONFIG_ETHADDR 00.01.02.03.04.05

在打开 driver/net/dm9000x.c 吧MII接口的注释掉 388行左右 / delete by ptz, for tq2440, for dm9000 /

if 0

i = 0; while (!(phy_read(1) & 0x20)) { / autonegation complete bit / udelay(1000); i++; if (i == 10000) { printf("could not establish link\n"); return 0; } } / see what we've got / lnk = phy_read(17) >> 12; printf("operating at "); switch (lnk) { case 1: printf("10M half duplex "); break; case 2: printf("10M full duplex "); break; case 4: printf("100M half duplex "); break; case 8: printf("100M full duplex "); break; default: printf("unknown: %d ", lnk); break; } printf("mode\n");

endif

这样就修改好了

打开 u-boot 主上目录下的 Makefile , 找到 smdk2410_config, 在其下 , 加入 smdk2410_config : unconfig @(MKCONFIG)(@:_config=) arm arm920t smdk2410 NULL s3c24x0 tq2440_config : unconfig @(MKCONFIG)(@:_config=) arm arm920t tq2440 ptz s3c24x0

根据需要配置CROSS_COMPILE

在 board 子目录下建立自己的开发板 ptz/tq2440 目录,然后,将 smdk2410 目录下的文件拷入此目录中,然后,将 tq2440 目录下的 smdk2410.c 改 为tq2440.c ,同时还得修改 board/ptz/tq2440/Makefile 文件。 COBJS :=tq2440.o flash.o

在 include/configs/ 下建立 tq2440.h 配置头文件,把smdk2410 的相应头文件复制一份在相同目录下,并改名为 tq2440.h

编译测试一下是否能够通过 [...]# make distclean [...]# make tq2440_config Configuring for tq2440 board... [...]# make CROSS_COMPILE=arm-linux-

如果没有错误出现,就可以进行下一步的修改了。

fork 作用是建立一个子进程,父子进程之间在fork()之后分道扬镳,子进程会获得一个父进程数据的副本。

在fork语句之前,printf有没有增加"\n"是非常重要的。如果没有"\n"那么printf的内容会写入显示缓冲,那么fork之后,子进程也会获得这个缓冲,所以如果在fork之前有printf,并且没有增加 "\n" 那么最后同样的内容,子进程和父进程会都打印一遍。

但是如果增加了 "\n" 就是立即显示了,那么子进程就不会有相应的显示缓冲,所以只会打印一遍.

最近做用430结果被BT定时器折腾了。BT定时器和以前接触过的AVR的普通定时器不太一样。以前的定时器都是计数到FF然后产生溢出中断。而BT定时器不一样。 MSP430 basic timer 基本定时器中断时间的计算 - ptz19861212 - ptz19861212的博客 BT定时器是在相应的选择位产生进位的情况下产生中断的。比如说,如果我们选中BTIPx为001的话,那么BTCNT2中的数据为 0x00,0x01,0x02,0x03然后在0X04的时候,也就是在Q1向Q2进位的时候产生中断。而且不管高位的数据,这个例子中Q3-Q7中的数据没有任何影响。

CC1101 在使用不定数据包长度的情况下,有一个需要注意的地方。当通讯不畅的时候,很可能长度字节接收出错,如果这时候,接收数组的长度不够的话,就会造成接收函数写入数组越界,所以在接收函数中需要加入对长度字节的判断,使得数组不会越界。

  1. 基本解释   typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。   在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。   至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。

- 阅读剩余部分 -

C中结构体数组的使用

在.h中

typedef struct value_channel

{

unsigned char dir;

unsigned int ADCValue[128];

}v_c;

extern v_c value[4];

在.c中

v_c value[4];

函数指针

void ( * fp)(void);

void fun_start_01(void);

{

......

}

void fun_start(void)

{

switch(cs)

{    

    case 01:

        fp=fun_start_01;

    break;

}

}

( * fp)();

函数地址

typedef void( * dis_turn)(void);

void dis_turn_1(void)

void dis_turn_2(void)

dis_turn dis[]={dis_turn_1,dis_turn_2};

main()

{

dis[0]();

dis[1]();

}

实现菜单

typedef void(*FUN_P)(void);//(int Data) typedef struct Message_Item { unsigned char cStatus; FUN_P fnProcess; }MSG_ITEM;

MSG_ITEM MSGMap[]={{0x00,fun_start},{0x01,fun_normal},{0x02,fun_set0},{0x03,fun_gas},{0x04,fun_set}};

void SearchMSGMAP(void) //(unsigned char cStatus) { unsigned char n=0; for(n=0;n<UBOND(MSGMap);n++) { if(MSGMap[n].cStatus==(cs>>4)) //(cStatus>>4)) {

MSGMap[n].fnProcess();

}

}

}