- 博客(76)
- 资源 (1)
- 收藏
- 关注
原创 c语言与设计模式(2)——简单工厂模式
为什么要使用工厂模式?当看到“new”,就想到“具体”。因为“new”的右值总是一个实例。有了具体实例就违法了针对接口编程的原则了。在技术上,new没有错,错在“产品经理”们,错在改变。针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。为什么呢?如果代码针对接口而写,那么通过多态,它可以与任何新类实现该接口。当代码使用大量的具体类是,等于是自找麻烦,因为一旦加入新的具体类,就必须改变代...
2019-12-27 23:26:42
295
原创 c语言与设计模式(1)——单例模式
万事开头难,所以我先捡一个简单的来写,希望后面越写越简单(aws: 长得丑,想得美)。单例模式可以说是最简单的设计模式了,单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。代码如下,/*************************...
2019-12-15 21:30:53
335
原创 c语言与设计模式(0)——基础
写在前面据上次写博客,已经好久好久了,期间一段时间,努力奋进,发粪涂墙,终于从技术菜鸟已然变成了技术老菜鸟。此次回归博客主要是想熟悉下人类的语言,因为每天面对着电脑,与人交流的能力在弱化,再加上单身没人要,回家就是刷手机,感觉整个人都废了。正值想(瞎)重(优)构(化) 公司代码之时,看了一些关于设计模式的文章,故此作为观后感记下来加深记忆,加强表达力,万一有人看,运气好没准有人还会评论批判下,...
2019-12-01 22:31:30
347
转载 socket编程备忘录
#include int socket(int domain, int type, int protocol);socket的三个形参搭配整理如下:------------------------------------------------------------------TCP、UDP socket: 最常用的socket,不解释tcp_socket = socket(AF_INET, S
2015-09-15 08:41:20
446
转载 华为3G模块EM770W在LINUX下的驱动安装
嵌入式平台下3G网络服务器(3G+PPP+BOA+ARM).rar 嵌入式linux 平台下网络服务器(3G+PPP+BOA+ARM)you_set@163.com一、华为3G模块EM770W在LINUX 下的驱动1. EM770W为华为3G WCDMA模块,支持HSPA(HSPA data rate - 7.2 Mbps DL / 2 Mbps UL),更适合于无线视频服务器和监控器。E
2015-09-15 08:41:14
1026
转载 Linux 时钟处理机制
Linux 时钟处理机制在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等。所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统的运作方式。本文分析了 Linux 2.6.25 内核的时钟处理机制,首先介绍了在计算机系统中的一些硬件计时器,然后重点介绍了 Linux 操作系统中的硬件时钟和软件时钟的处理过程以及软件时钟
2015-09-15 08:40:34
380
转载 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.36
参考博文:http://blog.youkuaiyun.com/jie12310/article/details/4564853一、系统安装与配置系统环境: 虚拟环境: VMWare Workstation 7.1.4(英文版) 操作系统: CentOS-6.0-i386(原内核2.6.32,将会把内核升级至2.6.36) 注:CentOS 是RedHat的一个社区版本. (由于
2015-09-15 08:40:27
590
转载 Linux下的lds链接脚本基础
http://blog.chinaunix.net/space.php?uid=361890&do=blog&id=16284140. Contents1. 概论2. 基本概念3. 脚本格式4. 简单例子5. 简单脚本命令6. 对符号的赋值7. SECTIONS命令8. MEMORY命令9. PHDRS命令10. VERSION命令11. 脚本内的表
2015-09-15 08:40:20
388
转载 devtmpfs文件系统创建设备节点
一、devtmpfs概述 1.devtmpfs 的功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev,缩短 GNU/Linux 的开机时间。 2.重要解释 Devtmpfs lets the kernel create a tmpfs very ear
2015-09-15 08:40:17
1111
原创 函数的传出参数
对于函数的传出参数,如果这个参数是通过函数体内部的变量赋值得来,它必须比函数体内的那个变量多一级指针,并且这个变量不能位于stack区。eg:(错误之处欢迎指正) 点击(此处)折叠或打开 #includestdio.h> #include
2015-09-15 08:40:11
554
原创 linux内核中等待队列 (函数wait_event与wake_up)
根据内核3.1.6版本源码、书籍和网上资料,对几个函数进行分析 介绍这几个函数,不得不先介绍等待队列wait_queue_head_t与完成量completion。 等待队列用于使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当时间发生后由内核自动唤醒。 完成量机制是基于等待队列的,内核利用该机制等待某一操作的结束。这两种经常被
2015-09-15 08:40:07
577
转载 vboxmanage.exe error failed to lock media when compacting
在windows下执行vboxmanage.exe 命令给virtual box扩容时,出现此错误,原因是没有关闭virtual box 管理员在2009年8月13日编辑了该文章文章。 --> --> window._bd_share_config={
2015-09-15 08:40:03
2178
转载 VirtualBox虚拟vdi磁盘扩容
前提:平台: windows xp + VirtualBox + Ubuntu 11.04 问题:准备尝试给 Ubuntu 11.04 升级内核到 Linux 3.4.10, 下载内核源代码后, 拷贝了当前 Ubuntu 11.04 内核的配置 config-2.6.38-8-generic 配置文件. 还有很多新增属性, 直接敲回车跳过(貌似敲回车就是选择了Y).make 后
2015-09-15 08:39:58
467
转载 短信模块开发 tpdu格式(一)
1.1. 基本知识 短信模块开发指通过串口 at 命令驱动短信猫进行短信发送和接收操作。 短信猫操作分为三种模式: block,pdu 和 Text 短信传送有三种编码方式: 7 位, 8 位, UniCode 1.1.1. 相关文档 Gsm03.38 规范: Alphabets and language-specific information 着重介绍短信发送中对字
2015-09-15 08:39:54
621
转载 GSM短消息的pdu和text模式的区别是什么?
一共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。Block Mode已是昔日黄花,目前很少用了。Text Mode是纯文本方式,可使用不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。Text Mode比较简单,而且不适合做自定义
2015-09-15 08:39:52
691
原创 计算字符串数组有多少个字符串
举例如下:高亮部分为计算方法。注意点:字符串数组,即指针数组,所以不能直接像sizeof(数组名)那样得到,variant_keys中每一成员都是一个指针,所以,sizeof(variant_keys[0])的值为4。即variant_keys[0]代表的是一个指针(指向只读变量)。所有,有多少个指针就有多少个字符串。因为variant_keys是 指针数组 ,不是指针,所以sizeof(va
2015-09-15 08:39:44
1773
原创 works[0]——对 i.mx6 的认识
淘宝上截了几个图:可以知道处理器的框架和各个系列之间的区别 管理员在2009年8月13日编辑了该文章文章。 --> --> window._bd_share_config={"common":{"bdSnsKey":{},"bdText":
2015-09-15 08:39:42
450
原创 linux-2.6.37.4的移植(1)——移植前准备及设置分区
参考博客:http://blog.youkuaiyun.com/laoniu_c/article/details/17919695 虽然2.6内核里已经有了2440的代码,但是还是想从2410移植,这样遇到的问题肯能还多一点,技术不熟,希望能够成功。首先,美其名曰“站在巨人的肩膀上”,find -iname s3c2410、 find -iname smdk2410。(-iname查找时不区分大
2015-09-15 08:39:39
444
原创 u-boot2010.06的移植(6)——支持yaffs下载
先占个座,未完待续。。。。。。 管理员在2009年8月13日编辑了该文章文章。 --> --> window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdM
2015-09-15 08:39:37
357
原创 ldd学习准备
转载自http://blog.youkuaiyun.com/yanghanxing110/article/details/21884111 很多人和我一样应该都是从应用开发,想着手开始驱动的学习,我现在也是在做嵌入式这方面的开发,但对于驱动的掌握也不太好,我现在手上有本《LINUX设备驱动程序》第三版的书,我通过这本书及网上资源的学习,尽量每天都把学习的内容及编写的代码贴出来,下面就开始了。
2015-09-15 08:39:33
332
原创 关于数组名和字符串
通过一个例子的结果来分析: 点击(此处)折叠或打开 #includestdio.h> int main(void) { char a[2] = {1,2};
2015-09-15 08:39:30
752
原创 字节对齐的位运算
很多程序需要对n字节对齐,把a按n字节对齐的位运算为:(a + n - 1) & (~(n - 1)),即如果 qn 管理员在2009年8月13日编辑了该文章文章。 --> --> window._bd_share_config={"common":
2015-09-15 08:39:26
790
原创 【转】C语言字节对齐
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访
2015-09-15 08:39:23
299
原创 标准I/O库函数
FILE *fopen(const char *path, const char *mode); path:相对路径,绝对路径均可,相对路径是相对于当前路径说的。 mode: "r" 只读,文件必须已存在 "w" 只写,如果文件不存在则创建,如果文件已存在则把文件长度截断(Truncate)为0字节再重新写,也就是替换掉原来的文件内容 "a" 只能在文件末尾追加数据,如
2015-09-15 08:39:20
322
转载 vi配置
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进 等功能的。为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc。在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至脚本, 所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,即创建的命令为:$vi ~
2015-09-15 08:39:15
560
转载 关于strtok的参数问题
写了一段小程序,发现又一个知识点没有掌握好。 点击(此处)折叠或打开 #includestdio.h> #includestring.h> int main(void) {
2015-09-15 08:39:11
626
原创 u-boot2010.06的移植(5)——支持nandflash、分区及环境参数的设置
nandflash应该算是研究了很长时间了,但是还是有的地方没搞懂,有知道的大侠还望不吝键盘。我用的是K9F2G08U0A,貌似第三节已经介绍过了。在此不费口舌。直接切入重点难点。在此移植过程中,犯了一个低级的错误,导致我花了半年的时间捣鼓nand(有点夸张哈),马虎害死人啊。s3c2440和s3c2410的nand寄存器不一样,需要拿两者的芯片对照修改。寄存器不一样导致了底层寄存器操
2015-09-15 08:39:08
508
转载 expected declaration or statement at end of input
经谷歌,可能出现此原因有以下几点:、1、大括号,小括号不匹配。2、文件末尾有空行。3、自己定义的函数名和库文件中的函数名冲突。 管理员在2009年8月13日编辑了该文章文章。 --> --> window._bd_share_config=
2015-09-15 08:39:03
2971
转载 嵌入式Linux常用工具下载官网
arm linux gcc 交叉编译 http://www.arm.linux.org.uk/;;; ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/; ;;http://www.gnuarm.com/files.html#binaries linux gcc 编译器 http://gcc.gnu.o
2015-09-15 08:39:01
532
原创 宏定义的顺序
一直以为宏定义是有顺序的,今天发现,原来没有,测试了下,代码如下: 1 #include 2 3 int main() 4 { 5 #define M N+1 6 #define N 1 7 8 int i = M; 9 printf("
2015-09-15 08:38:56
3346
原创 source insight 里的函数有时候会突然变黑
source insight 里的函数有时候会突然变黑,同步了下,没有效果。后发现这个工程的所有文件都没有加进去。至于加进去的文件为何被删除了,没有深入了解。 找到原因了方法自然就有了:project -> add and remove project files 重新把整个工程的代码添加下,然后同步。ok。 管理员在2009年8月13
2015-09-15 08:38:54
3817
原创 u-boot2010.06的移植(4)——支持norflash
norflash 的支持非常简单,仅需要了解几个宏的意思即可容易的写出来,并且这几个宏旁边都有注释,在此就不介绍了。高版本的u-boot可能还需要了解一下结构体,等移植高版本的u-boot的时候再详细介绍。如果说难点的话,CONFIG_ENV_ADDR 可以讲讲,可以看到源码 #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x0F0000) /
2015-09-15 08:38:51
383
原创 u-boot2010.06的移植(3)——支持nand启动
为什么要支持nand启动?这是面试的时候问的一个问题,结果我说是就是多一种支持,事后想想回答的太笨了啊,最起码也得回答个nand便宜啊,至于从sd卡驱动,以后再说。。 nand启动原理很简单,就是用nand的读方法从当前地址拷贝到链接地址,其中的难点是写地址。 以K9F2G08 (256M*8bit) 为例,其地址周期如下图:
2015-09-15 08:38:47
318
转载 UBOOT-2012-10在OK6410平台的移植(三)uboot 2012.10编译配置
1.安装交叉编译器 这里选择一个比较新的版本:ARM-Linux-gcc 4.5.1 在/usr/local目录下新建一个目录arm,把4.5.1版本拷贝到这里。 然后设置环境变量:在/root/.bashrc文件最后一行添加如下内容: export PATH=$PATH:/usr/local/arm/4.5.1/bin 保存后注销系统,重新登录后可以用export命令查看是否生效:
2015-09-15 08:38:43
343
原创 u-boot2010.06的移植(2)—— 时钟、SDRAM、UART
一、设置时钟:本板子是外接的12MHz晶振。通PLL(设置MPLLCON寄存器的)倍频到200MHz,并设置时钟分频比(CLKDIVN寄存器)为FCLK:HCLK:PCLK = 1:2:4 。s3c2440手册clock中有这么一个note:If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mod
2015-09-15 08:38:41
419
转载 ORR R0,R0,#R1_nF:OR:R1_iA
ORR R0,R0,#R1_nF:OR:R1_iA 终于看懂这是啥玩样了! 我是先看到这东西才开始疑惑的:这是S3C2440手册关于时钟介绍时的一部分,很明显它扯到了协处理器P15的C1寄存器,让我们来看看这是啥:原来iA位和nF位是控制CPU总线模式的:orr r0,r0,#R1_nF:OR:R1_iA这命令的意思肯定是让CPU的总线模式从“fas
2015-09-15 08:38:37
1099
原创 关于静态变量和变量初始化问题
下面四个子函数的代码,起区别就是定义的变量的属性(是不是静态的)以及有没有初始化:通过下面对代码的简单调试,可以简单的得出: static int cnt = 0;他仅仅起的是一个初始化的作用,即我认为,在若干次执行test1()函数时,static int cnt = 0; 只在第一次test1()函数被调用的时候初始化为0,当test1()第二次或更多次被调用时,cnt为保
2015-09-15 08:38:33
850
转载 set_irq_reg()函数
在中断处理函数中,首先要保存被中任务的现场,最后要恢复现场。都要用到下面的函数:static inline struct pt_regs *set_irq_regs(struct pt_regs *new_regs){ struct pt_regs *old_regs; old_regs = __this_cpu_read(__irq_regs); /
2015-09-15 08:38:29
757
原创 read 函数返回值
在编写file_operation的read函数时,编写完成后,cat不出来,原因是因为read的返回值为0;read的返回值应不小于读出的字节数。write懒得研究了。。。 管理员在2009年8月13日编辑了该文章文章。 --> --> window
2015-09-15 08:38:25
707
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人