89C51单片机,每计时一秒将P1端口翻转一次,晶振频率12MHz,这里另外一个中断方式的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 	org 	8000h		;定位
	ljmp 	start
	org 	8100h
start:
	mov 	sp, #60h
	mov	r1, #20	
	clr	a
	mov	tmod, #10h	;置T1为方式1
loop:	mov	tl1, 0fch
	mov	th1, #4bh	;设初值,定时为50ms
	setb	tr1		;启动定时器T1
	jnb	tf1, $		;查询TF1是否溢出
 
	clr	tf1		;清除溢出标志
	djnz	r1, loop	;1s时间未到,重装计数器
	mov	r1, #20		;1s时间到,重装r1
	cpl	a		;a取反
	mov	p1, a		;输出a
	ljmp	loop
 
	END
Tags: ,.

ubuntu每次关机时都会“嘀”的一声,在笔记本中则可能是“嘟嘟”的巨响,而且终端的操作也经常会发出这种声音,甚是难听!彻底解决的办法是禁用驱动系统喇叭的内存模块,在终端输入命令:

sudo modprobe -r pcspkr

或者:

sudo rmmod pcspkr
Tags: ,.

Here I am in the contemporarily latest distribution of ubuntu 9.04. The problem showed up when I updated the firefox to the version 3.0.9, that firefox kept telling me to restart for an update in every tabs in terms of “your browser has been updated and needs to be restarted”. While searching the solution online, I found this a bug of firefox, which is caused by a plugin. So I went to the menu: Tools>>Add-ons and disabled the plugin called “ubuntu firefox modification”, then after I restarted the firefox, the trouble is gone.
您的浏览器已经更新,需要重新启动。可能的解决办法:firefox的工具>>附加组件,关闭 Ubuntu Firefox Modification组件,重启浏览器即可。

Tags: ,.
安装前的准备

首先, 要知道你的显卡的型号, 并下载到相应的驱动程序. 我的显卡是集成的, nVidia Geforce 6100 nForce 405, 在nvidia的驱动支持列表里面可以找到,同时在驱动下载页面搜索并下载到名如NVIDIA-Linux-x86-180.51-pkg1.run

接着,安装编译驱动程序所需要的包: build-essential pkg-config xserver-xorg-dev libc-devsudo 等等。

$ sudo apt-get install  build-essential pkg-config xserver-xorg-dev libc-devsudo
Tags: ,.

POJ 的一道题,算法很简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    int n;
    char b2h[17] = "0123456789ABCDEF";
    int flag[4] = {1,2,4,8};
    cin>>n;
    while (n--)
    {
        string s;cin>>s;
        int len = s.length();
        int mod = len%4;
        int num = 0;
        for (int i=mod;i>0;i--)
        {
            if (s[mod-i]=='1')
            {
                num += flag[i-1];
            }
        }
        if (mod)
            cout<<b2h[num];
        for (int i=mod;i<len;i+=4)
        {
            num = 0;
            for (int j=0;j<4;j++)
            {
                if (s[i+j]=='1')
                {
                    num += flag[3-j];
                }
            }
            cout<<b2h[num];
        }
        cout<<endl;
    }
    return 0;
}
Tags: .

This phenomenon merely happens when your windows had been shutdown innormally or the USB device is unmounted innormally. To fix this problem, just do as the ‘Details’ tell you:

sudo mount -t ntfs-3g /dev/sdb1 /media/yourvolume -o force

As the command complishes, you will make it when try mount the very volume another time. Good luck!

Tags: ,.
  • 尽量减小变量的作用域
    • 全局变量
    • 类 public 变量
    • protect 变量
    • 文件级变量
    • private 变量
    • 函数级 static 变量
    • 函数级临时变量
    • 语句级临时变量
  • 尽量减少 free variable
  • 减少使用复杂的逻辑语句。
  • 只有在需要的时候才定义类,函数或者变量。或者说不要有从来都不用的类, 函数或者变量。
  • 使用统一风格的缩进格式。
  • 聪明的数据,傻瓜的代码
  • 深刻理解const 语句,尽量使用 const 语句。
  • 如果能够使用引用,就不要使用指针
  • 尽量用 private 代替 protect 语句。
  • 类继承 不要超过 3 级以上
  • 尽量减少类的个数。
  • 区别对待 BUG
    • 功能限制不是 BUG , BUG 是正确输入的产成了错误的输入。
    • 如果输入的数据的是错误的,那么程序不应该产生输 出,而是给出错误处理。 尽量不使用没有 else 的 if 语句。尽量不使用没有 default 的 switch 语句。 如果 else 的部分什么都不干,那么给出空语句。
  • 关于拷贝构造函数和等号的操作符重载
    • 尽量建立自己的拷贝构造函数,改变默认的拷贝构造 函数。拷贝构造函数的内容一般是 assert(false) 语句。意思是说不可以调用拷贝构造函数,也就是这 个类的对象不能作为函数的参数传递,也不能用 aClass obj(oldobj) 的形式创建对象。只有确定需 要以上功能的时候,才编写拷贝构造函数。等号的操 作符重载类似。
  • 尽量多的使用 assert 函数。
  • 用对象组合代替类继承 。
Tags: .

运行期(runtime)判断
下面的程序可以在运行期判断 endianess:

int IsBigEndian (void)
{
        static const int v =1;
        return *(char*)&v?0:1;
}
Tags: ,.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 配置部分
# 下面的变量可以在shell 的环境变量里面指定。
# 也可以象下面这样在 Makefile 里面指定。
# CC=gcc                      # 编译器
# CFLAGS=-Wall -Werror -g     # 编译器参数
# LD=gcc                      # 连接器参数
# LDFLAGS= $(LIBS)  -lpthread # 连接器参数
# DEPENDFLAG=-MM              # 生成依赖关系文件的参数
# INCLUDES=-Idir1 -Idir2      # 指明包含外部头文件的目录
# LIBS=-la -lb -lc            # 指明引用外部的库文件
CFLAGS:=$(CFLAGS) $(INCLUDES)
LDFLAGS:=$(LDFLAGS) $(LIBS)
 
#指明项目中,包含源程序的所有的子目录。
SRCDIRS=.
#指明最终生成的可执行文件的名称
PROGRAMS=test.exe
 
#下面的部分一般不用改动
 
#从所有子目录中得到源代码的列表
SRCS=$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))
 
#得到源代码对应的目标文件的列表
OBJS=$(SRCS:.c=.o)
 
#得到源代码对应的依赖关系文件的列表
#依赖关系文件就是一个目标文件依赖于
#哪些头文件和源程序,依赖关系是自动
#生成的,并且用 include 语句包含在
#Makefile 中。
DEPENDS=$(SRCS:.c=.d)
 
#指明默认目标是生成最终可执行文件。
all: $(PROGRAM)
 
#生成依赖关系文件
%.d:%.c
        $(CC) $(DEPENDFLAG) $(CFLAGS)  $< |\
        sed "s?\\(.*\\):?$(basename $<).o $(basename $<).d :?g" \
        > $@ || $(RM) $@
 
$(PROGRAMS): $(OBJS)
        $(CC) $(LDFLAGS) -o $@ $(filter %.o ,$+)
 
# 包含入依赖关系文件
include $(DEPENDS)
 
# 删除生成的中间文件
clean:
        rm $(OBJS) $(DEPENDS) $(PROGRAMS)
Tags: ,.

剪切复制文本区域

1. 把光标移动到区域的首字符
2. C-@ 设置标记
3. 把光标移动到区域后的第一个字符
4. C-w 剪切,M-w 复制
5. C-y 粘贴

Tags: ,.