自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

smstong的成长轨迹

关注Internet,专注OS。

  • 博客(465)
  • 资源 (30)
  • 收藏
  • 关注

原创 All data types in Python are “reference type“

Python只有一种数据类型,引用类型。

2022-11-01 23:51:47 449 1

原创 对于C++拷贝构造函数的思考

【代码】对于C++拷贝构造函数的思考。

2022-09-15 22:13:10 493

原创 实例分析Python3 MRO 和 super()

原文链接:https://www.linuxexam.net/2020/04/python3-mro-and-super.html1 MRO vs DFLRAttribute searching is the core concept for Python classes. The searching order is important as it determines which cl...

2020-04-10 14:02:59 674

原创 实例分析Python3 MRO 和 super()

原文链接:https://www.linuxexam.net/2020/04/python3-mro-and-super.html1 MRO vs DFLRAttribute searching is the core concept for Python classes. The searching order is important as it determines which cl...

2020-04-10 13:59:49 490

原创 命令行测试Gmail服务器发送邮件

我刚刚写了一篇博客,使用openssl来测试Gmail发送邮件。感兴趣的同学请点击下方链接。https://www.linuxexam.net/2020/01/test-gmail-from-command-line.html文章是用英文写的,如果感兴趣的人多,我可以考虑翻译成中文。...

2020-01-31 13:49:55 1474

原创 How to configure postfix to send email via Gmail

此博文为copy版本,可能不及时更新,要想查看最新版本,请访问:https://it.smallstrong.org/2019/05/how-to-configure-postfix-to-relay-email.html?view=classic1. Why relay via Gmail?Today it's very hard to set up an email server ...

2019-05-21 12:43:36 716

原创 Build your own KMS server to activate MS Windows and MS Office

网速问题,不常来CSDN了,想要阅读更多博文,请访问我的个人博客站。http://linuxexam.netNote: It's illegal to activate Windows/Office by a non-authorized KMS server. This article is for learning purpose only. Buy a license from Mic...

2019-05-17 08:11:59 2282

原创 一个基于KVM虚拟机的PXE服务器的实现

各位博友你们好,由于本人自去年5月份开始移居海外,事情繁多,一直没有更新CSDN博客。现在基本稳定下来了,于是又有心情开始写写博客了:)鉴于目前工作原因,博文内容会多与Linux服务器运维有关,偶有编程小技巧。另外,我搭建了自己的wordpress系统,将来其博文会和CSDN同步。由于网络速度问题,会先发到我的workpress上,随后再同步到CSDN。由于工作繁忙,基本上是随手记录,各种错误...

2018-09-24 02:59:40 2433

原创 TQ2440开发板学习纪实(10)--- 实现多任务处理,最简单OS模型

Keywords: Mutitasking,Context Switch,Thread0 多任务(多线程,多进程)基本概念0.1 CPU与多任务对于“多任务(Multitasking)”,不同的应用领域有不同术语。在操作系统领域,一般称为“多任务”;在应用程序设计领域,一般称为“多线程”;而在Unix领域,更多的人喜欢用“多进程”来表示相同的意思。本文着眼于OS层,所以使用“多任务

2017-01-13 11:16:53 1588

原创 C语言中通过全局变量引用汇编语言中的全局标签

汇编语言和C语言混合编程中,在C语言中通过全局变量来引用汇编中的数据定义非常普遍,然而却存在同名不同义的陷阱。1 测试代码在汇编语言中的定义整数变量studentID,并赋初值,如下: .global studentID .datastudentID: .word 12345678 .text ldr r0, =studentID /* studentID被当

2017-01-13 09:43:44 5535 1

原创 TQ2440开发板学习纪实(9)--- 利用Undefined异常模拟BLX指令

在博文 《紧急求助!ARM-GCC对于函数指针调用的编译有错误?》中,我提到了GCC在编译函数指针调用的时候,会生成绝对地址跳转指令BLX。而S3C2440A这款CPU不支持BLX指令,从而导致陷入Undefined异常。本文就利用这个Undefined异常,来模拟BLX指令,从而让使用BLX指令的程序可以正常运行在S3C2440上。1 Undefined异常的处理流程ARM9在执行未定义指令时,会

2017-01-03 14:51:33 1261 1

原创 TQ2440开发板学习纪实(8)--- 从NAND Flash读取数据,把代码搬运到SDRAM运行

因为依赖于S3C2440的开机自动从Nandflash复制数据到片内SRAM执行,目前我们的可执行程序体积仍然不能大于4KB的限制。而我们的程序目前已经非常接近这个限制大小了,为了能够继续开发,必须突破这个限制。为此需要实现代码搬运功能,把程序从Nandflash搬运到SDRAM中去,并跳转到SDRAM执行。本文为啥不实现NandFlash写? 因为对于我们的实现目前尚未需求。更重要的是,写操作涉及

2016-12-30 16:39:15 2649

原创 紧急求助!ARM-GCC对于函数指针调用的编译有错误?【已经找到原因】

函数指针是实现回调函数的基础,回调函数是C程序架构的基础。所以函数指针的重要性不言而喻。然而最近在ARM开发板上测试程序时,发现函数指针虽然能编译通过,但是运行时确总是报错。如下是一个最简单的测试程序源码。static void test(){ puts("test\n");}static void(*f)() = test;void Main(void){ led_init

2016-12-27 17:17:28 1944

原创 TQ2440开发板学习纪实(7)--- 基于中断的UART串口接收

UART0的发送、接收、错误分别产生不同的中断,可以分别控制。本文仅对UART0的接收采用中断方式,发送仍然采用轮训方式。这样有个很大的用处,那就是程序陷入死循环是,可以通过UART0发送给ARM一个信号,来终止程序的运行。关键代码片段:1 取消相关中断屏蔽位/* unmask interrupt for UART0 */ rINTMSK &= ~(1<<28); rINTSUBMS

2016-12-27 17:02:17 1075

原创 TQ2440开发板学习纪实(6)--- 启用IRQ中断,告别低效的轮询!

前面的实验中,无论是按键的状态,还是串口的发送接收状态,都是通过轮询的方式进行读取,不仅低效而且严重浪费CPU计算周期,在实际的生产环境下决不能使用!从本文开始,我们进进入一个新的时代,中断处理。0 中断、异常、软中断,傻傻分不清在CPU中断处理领域,术语比较混乱。而且有时候同一个术语在不同的语境含义也不相同。这里我们以S3C2440的数据手册为准解释相关概念。异常,英文名Exception。是相

2016-12-27 10:56:38 1320

原创 TQ2440开发板学习纪实(5)--- 设置UART串口,输出Hello World!

0 串口,UART,RS232,RS485傻傻分不清0.1 串行通信与并行通信串口名字表示采用的通信方式为串行而不是并行。那么串行与并行的区别是啥呢?很简单,串行就是同一时刻只能传输一个bit,而并行则可以同时传输多个bits。乍一看,仿佛并行通信速度更快,而且并行的信号线越多,传输数据快。CPU的总线就是使用并行通信的,总线带宽也从8一路飙升到了目前的64。然而这是在CPU的内部,对于设备间通信而

2016-12-23 18:13:23 2708

原创 TQ2440开发板学习纪实(4)--- 初始化片外RAM,让程序有更大内存空间

到目前为止,我们的程序只能使用S3C2440的片内4KB的RAM。这么小的内存空间,显然不能应付实际的应用。是时候使用片外的RAM了,本文将详细介绍片外RAM的初始化过程。0 ROM,RAM,SRAM,DRAM,SDRAM傻傻分不清作为软件出身的软男,很难从根本上弄清楚ROM,RAM,SDRAM,SRAM等等的原理,这里我们只要了解基本的特性就可以了。ROM,NorFlash: 只读内存,掉电不丢

2016-12-22 15:10:49 2051 1

原创 TQ2440开发板学习纪实(3)--- 设置时钟频率,让CPU运行的更快

0 原理0.1 时钟源自哪里所谓的时钟,就是电压高低的变化,只有不断的0,1交替变化,CPU才能被驱动运行。S3C2440支持多种时钟源,这通过CPU针脚OM3和OM3来选择。对于QT2440板子来说,OM3和OM2均直接接地,这就意味着时钟源来自针脚XTIpll和XTOpll,这两个针脚在TQ2440的核心板上被连接上了一个12MHz的晶振。0.2 S3C2440的时钟原理与设置CPU、RAM、U

2016-12-21 14:03:36 6803 1

原创 一个C语言运算符优先级导致的问题

检测某个数的某个二进制位是否为0,是常见的控制逻辑,如下代码所示:if (x & (1<<2) == 0) { printf("x的第2个二进制位为0\n");}然而实际上,上述代码永远不会执行printf,也就是说 x & (1<<2) == 0这个表达式始终为0。原因在于在C语言里,==运算符的优先级高于&,导致上面的表达式相当于:if ( x & ((1<<2) == 0) )因为1

2016-12-21 09:24:23 1312

原创 TQ2440开发板学习纪实(2)--- 设置堆栈并调用C函数

本文根据上一篇TQ2440开发板学习纪实(1)—最简单的独立运行汇编程序进化而来。0 ARM堆栈(Stack)基础知识ARM支持满减类型的堆栈,满的意思是说堆栈指针SP(即R13)总是指向刚刚入栈的数据单元。与满相对应的就是不满,这种类型的栈指针SP指向栈顶的下一个空白单元。减的意思是说,栈底的内存地址大,栈顶地址小,压入数据时,栈向地址小的方向扩展。目前我们只有4KB的内存可用,范围为:0x000

2016-12-20 18:39:46 1088

原创 TQ2440开发板学习纪实(0.1)--- GNU Freestanding(Naked)C ARM交叉开发环境创建与测试

0 由来在我的博文 GNU ARM交叉汇编环境的搭建与测试中,详细讲解了GNU ARM汇编环境的创建与使用方法。实际开发中,直接使用汇编语言写的代码往往很少,尽在系统启动和性能要求极其苛刻的时候才会用到汇编代码。在可读性、可移植性、逻辑表达能力方面,C语言的表现要比汇编强太多,正是C语言的这种优势造就了Unix世界,造就了Linux在多种平台上顺利编译运行的活泼场面。所以,在嵌入式开发领域,C语言是

2016-12-13 14:41:37 2781

原创 TQ2440开发板学习纪实(0.0)--- GNU ARM交叉汇编环境的搭建与测试

对ARM进行裸机开发时,汇编是必不可少的,因为C语言无法直接操作CPU的内置寄存器,也就无法完成很多硬件初始化的功能,如内存控制器的初始化。市面上大多数讲解ARM汇编开发的书籍都把ADS作为开发环境,因此使用的汇编语言也就是ARMASM,开发平台也限制到了Windows。然而在嵌入式领域,Linux作为开发环境更加普及,那么如何在Linux下进行ARM的汇编程序设计呢?其实,Linux平台上早就有了

2016-12-13 07:03:25 1139

原创 Freestanding C与交叉编译器的生成原理分析

0 问题由来以前也用过C51写过简单的裸机程序,但是并没有认真的考虑过其与Linux环境下一般C语言程序的不同,只是想当然地认为C是跨平台的语言,并没有考虑过C语言的标准问题。今天在编译GCC交叉编译器时,遇到了种种问题,不得不重新考虑C语言的实现标准,否则很难清晰的了解交叉编译器的编译过程。1 C编译器的两种实现要求C语言标准的正式文档中明确提出了C编译器的两种实现标准:1.1 conformin

2016-12-12 10:00:27 5277

转载 【转】TTL电平与RS232电平差异

转自:http://blog.csdn.net/skywalker_leo/article/details/18403351 这两天在调试带UART的蓝牙模块,由于刚开始分不清UART电平和RS232电平的区别,直接将蓝牙上UART的RX和TX接到PC上串口的TX和RX,导致所有数据都是乱码。后来才弄清楚:在UART上使用的TTL电平,而PC的串口是RS232,它有自己的电平定义,所以在

2016-11-25 14:55:28 897

转载 串口通信的基本知识

串口通信的基本知识本文介绍了串口通讯的基本概念、数据格式、通讯方式、典型的串口通讯标准等内容。串口通讯,RS232,RS485,停止位,奇校验,偶校验1 串口通讯    串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。    串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。2 串口通讯

2016-11-24 18:38:18 2648

原创 Linux系统调用图解(摘自《Assebly Language Step by Step》)

有图有真相,这个是目前我找到的解释Linux系统调用机制的最好图解。1 INT 80H 指令导致软中断,保存下一条指令地址到栈,IP寄存器装入80H号中断向量,进入Linux系统服务分配器。2 IRET 指令,之前保存到栈中的地址出栈赋给IP,中断返回到用户程序。

2016-11-23 16:57:53 1150

原创 TQ2440开发板学习纪实(1)---最简单的独立运行汇编程序

0 如何做到简单TQ2440开发板,采用的CPU是三星S3C2440,核心板附加了2MB运行ROM和64MB运行RAM,并且搭配了64MB的Nand Flash。而S3C2440直接支持从NandFlash启动,其原理就是加电后,CPU内使用硬件逻辑把NandFlash开头的4KB数据复制到片内称之为stepping stone的特殊内存中。这个特殊的stepping内存只有在设置为Nandflas

2016-11-07 13:05:41 1350

原创 最详尽解释Linux内核源码中的container_of宏及其标准C版本实现

在Linux内核源码文件 include/linux/kernel.h中,定义了container_of宏,源码如下:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type:

2016-10-22 10:58:22 3010

原创 GCC和C99中结构体的标签式初始化语法差异

GCC很早就支持标签式初始化结构体,标准C则是C99之后才对此进行了支持。两者语法不同,效果相同。例子:struct Student { char *name; int age; float score; double money;};传统GCC初始化代码:struct Student s1 = { age: 18, money: 100.23,}

2016-10-15 14:42:49 2733

原创 一点小感受:界面和程序的分离

1 Windows程序,界面和程序是源码级混合Windows系统下的GUI程序,界面(GUI)与程序其他部分逻辑上是分离的,但是源码上直接交互,界面功能直接通过调用Win32 API来实现。例:CreateWindow()。甚至线程模型很多功能都和GUI窗口绑定到了一起,如消息队列。2 Linux程序,界面和程序是通过协议通信2.1 CUI程序和文本终端通过终端协议交互

2016-09-07 10:27:49 8547

原创 关于时间--地球公转与闰年

地球自转周期并不是完美不变的,而是在变慢,为了让UTC时间与地球自转始终吻合,闰秒被采用,详见我的博文关于时间–地球自转与闰秒。这篇文章我们来谈谈地球公转和闰年的问题。地球绕太阳公转也并不是完美的原型轨道,而且公转周期也不是自转周期(天)的整数倍,而是365.2422天。在目前的历法中,一年有365天,这样日历上每1年就会比地球公转快0.2422天,4年下来就会快上0.9688天。以此推算,40年以

2016-08-19 15:59:00 2568

原创 关于时间--地球自转与闰秒

说明:秒是一个国际单位,也叫铯秒,固定为铯-133原子基态两个超精细能级间跃迁辐射9,192,631,770周所持续的时间。天也是一个长度单位,但是在不同的时间标准里,一天的长度是不同的。1 时间是个啥古人很自然的发现太阳有规律的升起与落下,于是把太阳的升落周期称作一天,把草木的生死周期称作一年。而这一切都是围绕太阳而产生的,也就是说时间是人们对太阳的感觉。今天,我们知道了,昼夜交替和四季变化

2016-08-19 14:57:13 2586 2

转载 国家授时中心:2015年6月30日全世界钟表将拨慢一秒钟

转自:http://www.zgg.org.cn/jgwh/kpgy/kepu/201501/t20150114_494710.html“要是时间能停下来那就好了,哪怕只有一秒钟。”以往在动画中出现的桥段即将发生在现实中啦。1月12日,中科院国家授时中心预告, 2015年6月30日(格林尼治时间)实施一个正闰秒,全世界的钟表都需要拨慢一秒钟。这也就意味着,2015年的这天就比平常多出一秒来。这多出

2016-08-18 17:04:37 1976

转载 oracle之Flash Recovery Area全面介绍

refer to: http://blog.sina.com.cn/s/blog_4ab088470106b36f.htmloracle之Flash Recovery Area全面介绍 1. 设置闪回恢复区闪回恢复区主要通过3个初始化参数来设置和管理db_recovery_file_dest:指定闪回恢复区的位置db_recovery_file_dest_size:指定闪回恢复区的可用空间大小db

2016-08-08 13:21:42 2215

原创 今天发现百度地图街景拼接的一处BUG

无聊在百度地图上逛街景,无意中发现一处拼接的错位。希望地图大牛们能分析出错位的原因。

2016-08-03 09:46:04 3215

原创 NCR(Numeric Character Reference)简单介绍

1 从字符编码谈起读写文字是人与动物的最大区别,不同的种族发明了不同的语言文字,对这些文字进行二进制表示是计算机领域必须要解决的问题。文本处理在计算机程序中占有相当大的比例,尤其是在web程序中,几乎大部分程序逻辑都是为了最终输出处理过的文本。目前世界上存在有很多种字符编码标准,各个标准并不完全兼容,甚至完全不同,从而导致了“乱码”这个让很多程序员都胆战心惊的东西。尽管目前统一的编码规范UNICOD

2016-07-27 09:48:34 3713

原创 没有前九条的第十条编程规则:Greenspun's tenth rule

1993年Philip Greenspun提出了编程第十条规则:Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.有意思的是,虽然名为“第十条”,但是并不存在

2016-06-15 15:01:36 4673

原创 标准C函数库和POSIX函数库的关系

The C POSIX library is a specification of a C standard library for POSIX systems. It was developed at the same time as the ANSI C standard. Some effort was made to make POSIX compatible with standard C

2016-06-08 18:07:16 12099 1

原创 (void)printf("hello world"); int a=2; void(a);中的(void)有什么用?

1 函数调用时前面加(void)#include <stdio.h>int main(void){ (void)printf("hello"); return 0;}函数调用时,前面加个(void)到底是做什么用的?其实对于程序的编译运行没有任何影响,目的很简单就是让源代码顺利通过一些严格的检查工具的检查如lint。如果返回值不被处理,有些检查工具就会报警告,为了消除这种无所谓

2016-06-08 17:46:01 5548 1

原创 C与C++函数声明时的几个小的语法差异

1 无参函数的声明void f(){}int main(void){ f(10,“hello"); return 0;}上述代码在C语言中是完全正确的。但是在C++中确是错误的。void f() * 在C中表示函数f可以接受任何类型,任意数量的参数。(然而并没有提供如何利用这些参数的机制,如果想使用可变参数函数,格式为 void f(type a1,…))。 * 而在C+

2016-06-08 17:35:51 3500

探测IP小工具

通过捕获ARP来分析得出本子网的IP。基于Win32API和WinPcap开发。

2015-01-08

可启动CD/DVD的标准

无论是操作系统发行版还是LiveCD都是从光盘启动,光盘启动的原理是什么,可以自己制作启动光盘吗?你知道光盘启动的两种方式吗?

2013-02-26

Introduction To Algorithms 3rd edition (算法导论第三版)

算法导论2009年版本,第三版英文版。 截止2012年9月,中文版还停留在英文版第二版。

2012-09-24

Matlab And C#

Matlab 与 C#混合编程的三种方式。

2012-08-16

字节序与位序

详细的字节序与位序描述,以及需要注意的问题。

2012-02-15

C#写的基于TCP的聊天室程序源码

学习.Net平台下TCP编程入门程序。涉及到TCP连接的数据边界确定方法,多线程,异步编程APM。

2010-12-03

NAT以及MAP详解

NAT以及MAP详解,自己总结的文章。对于理解防火墙配置有良好的作用。

2010-03-20

Windows二进制字符串资源的处理方法

exe,dll里的资源很多,字符串处理比较特殊,希望大家有所收益。

2010-02-01

EXCEL VBA基本教程与常用函数

VBA几乎伴随与微软的每一个产品,WORD, EXCEL, PPT。要充分发挥EXCEL的功能,不用VBA是不可能的。这是两本基本的教程,适合初学者。

2010-01-03

glut+glew-- Windows平台开发OpenGL必备

由于微软对OpenGL的不再支持,使得在Windows平台开发OpenGL程序必须使用扩展库。glut和glew是不可缺少的两个基本扩展库。现在我把这两个库打包在一起,方便大家下载。

2009-12-26

反修饰VC++符号名称

C++中的函数和变量名,经过VC++编译后可以说是变得面目全非,这对于我们分析软件尤其是逆向工程带来不便,本软件让面目全非的符号名恢复到编译器源代码中的名字。既可以手工输入,也可以直接读取.def文件恢复。还附带了MFC4.2版本的def文件供测试使用。

2009-10-12

全球IPv4地址分配库

全球IPv4地址分配情况,chm格式。网络安全人士必备。

2009-04-17

SMDK2443_WINCE6.0_BSP Manual

安装SMDK2443_WINCE6.0_BSP的详细步骤。

2008-12-19

MySQL在Vista上的安装步骤

安装MySQL的详细步骤(VISTA平台)。

2008-12-19

Build Your Own .NET Language and Compiler

如果想深入学习.net,此书必备。 好不容易才在网上找到的。

2008-12-19

Eclipse中文教程

Eclipse越来越火了,无论做Java还是C/C++开发,Eclipse都是一个完美的跨平台IDE。

2008-11-11

构建嵌入式Linux系统(2008版)

2008版的,学习嵌入式Linux开发的必备读物。

2008-10-22

一个关于当前软件开发库与技术的详细分析

详细的分析了一个大型项目需要的各种技术与标准。对于企业软件开发高层技术决策有参考价值。

2008-10-22

DBUS在Linux内核及用户空间的使用

DBUS在Linux内核及用户空间的使用,与HAL及UDEV的关系。

2008-09-18

XWindow常识文章3篇

XWindow与Linux GUI基础知识。

2008-09-18

嵌入式MPEG-4解码系统的设计与实现.doc

嵌入式MPEG-4解码系统的设计与实现.doc,不错的文章。

2008-07-21

I2C总线驱动伪代码

I2C总线驱动伪代码,可方便地转化为你自己的语言,如C语言。

2008-07-21

I2C总线标准

I2C总线标准,学习 IIC总线必备。

2008-07-21

Windows核心编程(最新)

windows核心编程,最经典的Windows程序员必备案头书。

2008-07-21

对象标准COM和CORBA论长道短

关于对象标准COM和CORBA进行比较的好文章。

2008-04-25

Windows CE 编程(英文2版).CHM

Windows CE 编程(英文2版).CHM

2008-04-25

Windows CE 编程(英文2版).CHM

Windows CE 编程(英文2版).CHM

2008-04-25

BS_Contact_VRML-X3D_62.exe

浏览器察看VRML文件的插件

2007-12-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除