再访柳江

十一假期就要结束了。去年十一,来到这里还不到一个月。到现在,一年的时间已经过去了。下一个十一,将是人生中在学校时光里的最后一个十一了吧。

假期的前三天看了几本书,了解了一下Linux系统和Python语言。第四天和室友出去转了一下。先去了箭盘山公园,然后是蟠龙山公园。去年十一不曾去过的地方。然后便是故地重游。在来的时候看到,路边的LED信息屏上写着柳江7:30将有烟火晚会。

于是,找地方吃罢饭,又在柳江边歇息了一下,等待着烟火晚会的开始。随着时间的临近,柳江边人越来越多,到最后人满为患。

终于到了7:30但是烟火晚会还没有开始,大概是8:00开始吧。室友已经等得没有了耐心,于是我们就一起返程。

走在路上,发现大量的人流仍然在向柳江边烟火晚会的地点涌来,我们却与人流背道而驰,以至于我们行走的十分缓慢。

当柳江的视线渐渐地完全从我们背后消失时,背后的方向终于发出了砰砰巨响。夜晚天空中五彩的火花告诉我们,现在已经是八点整了。但是已经离去,便不会返回了。

心中仍然充满了遗憾。去年的十一,我们错过了柳江边的音乐喷泉。在我们坐上返程的公交车时,她却姗姗而来。然而现在,我们又错过了柳江边的烟火晚会。

隆隆的炮声,斑斓的烟火,仿佛欢送着我们的离去,又仿佛告诉我们,我们只是一个过客。

然而,错过了的东西,或许永不再来。

明年的十一,不知是否还能在这美丽的柳江岸边,欣赏这缤纷的柳江夜景。

箭盘山

箭盘山

箭盘山

箭盘山

人工瀑布

蟠龙塔

蟠龙山上观柳江

柳江

柳江

柳州东门城楼

柳州东门城楼

Linux文件执行权限

十一假期原来有7天,我竟然以为是五天!晕了,晕了,这日子真是过晕了。

继续学习Python。

在Windows系统中,可以依据Python文件的后缀名来识别是Python文件,从而启动运行。但是在Linux系统中,只是把.py文件当作普通的文本文件。对于此,看到一句话:“不知是Windows把我们的生活变的简单了,还是把我们自己变得更傻了。”对此不做评论,大千世界,天下大同并非很好。

可以在Python文件的第一行加上一行告诉系统,用什么程序来执行此文件:

#!/usr/bin/env python

于是在Linux下编写了一个简单的程序并保存为hello.py:

#!/usr/bin/env python
print(‘hello’)

但是在执行的时候却遇到了问题,省去python,直接在终端上输入:

./hello.py

提示权限不足。但是在提升至root权限后,仍然提示权限不足,如果在文件名前加上python:

python ./hello.py

可以执行。Linux菜鸟一个,所以 不明所以。

Python

最后发现原来是文件没有执行权限。在终端上输入:chmod -x ./hello.py

Python

更改文件的执行权限,在输入:

./hello.py

就可以运行了。

也可以鼠标右键单击hello.py,在快捷菜单中选择属性,选择权限栏,然后勾选“允许以程序执行文件”就OK了。

Python

Linux分区与文件目录结构

一直以来都十分迷惑Linux的分区与文件的关系,只是听说Linux是用文件来管理的分区的,但是由于习惯了Windows的分区与文件的关系,对于Linux的分区与文件还是不甚了解。

这个十一打算学习一下Linux以及Linux C,顺便看一下传说中的Python。于是在十一到来前,在图书馆借了几本厚厚的书。

Linux books

Continue reading “Linux分区与文件目录结构” »

由(void *)0引起的思考

最近准备了解下uC/OS II嵌入式实时操作系统,读代码的时候发现了程序中一个奇怪的的写法:(void *) 0。不明所以,便开始寻找答案。最后发现小小的void的竟隐藏着那么多东西。

一、void

void是空类型的意思,函数表示函数无返回值,或者无参数传递。比如void Delay10ms(void)。同时,void也不能这样定义变量,void p

二、void *p

然而,void *则表示无类型指针,也就是说void *可以指向任何类型的指针。比如:

这在VC++6.0编译是正确的。

编译是错误的,提示”cannot convert from ‘void *’ to ‘int *’”

所以可以把任何类型的指针赋值给无类型的,但是不可以把无类型的指针赋给有类型的。网上对于此的解释有一句话说的好:“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。

void是一个比较抽象的概念,所以不能利用无类型的指针获取指针所指向的数据。

程序输出的结果一样,都是变量b的地址。

运行正确,输出10。

然而

编译会出现错误。

把上面的程序中无类型指针强制转换成整型指针,则可以输出所指向地址内存中存储的值。

这样输出的结果为:10

三 void *p()

由上面可以推断

void *p()是定义一个返回值是无类型指针的函数(通用指针)

四、(void *) 0

所以,(void *) 0就是把0强制转化成无类型指针,它只能赋值给无类型指针,而不能赋值给有类型指针。

编译正确。

编译错误:“cannot convert from ‘void *’ to ‘int *’”

一般

NULL表示一个空指针。

ARM7学习-实时时钟RTC

LPC2138内部含有RTC电路,其RTC时钟可由独立的32.768kHz 振荡器或基于 VPB 时钟的可编程预分频器来提供。使用LPC2138内部的RTC电路,需要把RTC 专用的电源管脚 Vbat接上3.3V的电源。

编程环境:MDK-ARM Professional 4.72a

仿真环境:Protues 8.0

ARM7芯片:LPC2138

SPI芯片:74HC595(串转并)

每次按下按键,四个数码管将显示不同的数字,数字分别显示的是年、月日、时分、秒星期。

按键采用外部中断0,接口采用SPI接口。

ARM7 RTC

程序修改自:《ARM嵌入式系统设计与仿真》