自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

周子plus的专栏

记录点滴,分享点滴

  • 博客(28)
  • 收藏
  • 关注

原创 基于Eclipse IDE断点不能停下的问题解决(断点标志上带斜杠)

问题描述:手动suspend可以停到程序中的某一行,但是在该行上打上断点,断点显示带一个斜杠,并且程序重新跑起来不能停到断点位置。如下解决办法,将菜单“RUN”下的“Skip All Breakpoints”选项去掉勾选就可以了(这个操作可能是自己也可能是别人为你解决问题时不经意间选上的)。

2016-07-14 16:56:04 1279

原创 使用VS2010统计代码行数

代码行数统计VS2010中本身集成了非常强大的查找功能,使用正则表达式可以非常快捷、准确的统计代码行数。统计代码行数所用正则表达式:“^:b*[^:b#/]+.*$”通过查找的功能选项还可以限定查找的文件类型,进而对指定范围的文件进行统计。其中“#开头和/开头或者空行”都没有计入代码量,但是这个规则也不是特别严格,对于下面的情况不适用:/*xxxxxx*xxx

2015-03-31 21:44:45 1750

原创 寻找两个字符串中最长的公共子串源码(不使用strcmp)

一种不使用strcmp来寻找两个字符串中最长的公共子串的方法。

2015-03-29 21:55:29 750

原创 二叉树的非递归遍历及算法分析

用递归遍历的优点是算法简单明了,缺点也十分明显:对于栈的消耗比较大。尤其是在嵌入式应用中,嵌入式处理器资源往往有限。每次递归调用,都会涉及到通用寄存器、SP指针、PC指针等的压栈。当树的深度比较大时,对于栈的消耗会变得非常严重,很有可能造成栈的溢出。因此,二叉树的非递归遍历方法就显得非常有实际应用价值。下面是非递归遍历的算法,这里使用了数据结构栈,利用其先进后出的特点,用结点入栈出栈过程手工模拟递归调用过程中的栈操作。

2015-03-20 22:29:56 2481

原创 堆排序

堆排序利用了大根堆的两个特点:1.      堆顶元素是最大元素;2.      后一次堆调整可以在前一次的基础上进行;堆排序利用了数组的一个特点:1.      快速定位指定索引的元素;使用了以上的特点使得对无序数组进行排序变得简单而高效。

2015-03-20 22:25:58 559

原创 SVN分支管理策略

版本库布局在将数据导入到版本库之前,首先需要考虑如何组织数据。如果使用一种推荐的布局,以后的操作将会更容易许多。有一些标准的,推荐使用的组织版本库结构的方法。大多数人创建一个 trunk 目录掌管开发的 “主干”,一个 branches 目录存放分支副本,以及一个 tags 目录存放标记副本。如果一个版本库只掌管一个项目,那么人们通常创建这些顶级目录:/trunk/branches

2015-03-20 22:08:12 4378

转载 Linux下的密码破解和密码保护

以单用户方式进入系统,修改root的密码然后再重新启动即可。过程如下所示。对于LILO:当系统启动到出现LILO引导画面时,对于图形引导方式按TAB键进入文本方式,然后在LILO处输入linux single回车即可进入免密码的控制台,进入以后使用passwd命令修改root的密码即可。对于GRUB:当系统启动到出现GRUB引导画面时,按字母e键,进入GRUB编辑状态。按键盘上或下

2014-07-06 22:35:42 504

原创 watchdog的正确用法

关于watchdog应该有过单片机学习经历的人,都比较熟悉。但watchdog的正确用法,恐怕大家如果没有经历过实际产品的开发不会有深入的理解。瑞萨RL78系列的单片机自身带有watchdog,当启用watchdogtimer定时器后,在watchdog timer溢出时间间隔的75%会产生watchdog中断。至于在watchdog中做什么,好多示例程序,都会在中断处理函数中喂狗,使watc

2014-07-06 22:31:52 7196

转载 How To Be an Effective Team Leader

Coach, Don't DemonstrateWhen you're under a time crunch, it's tempting to demonstrate a task rather than to provide supportive directions. When you say "Let me show you how" your motivation is proba

2014-07-01 21:30:40 870

转载 How To Be an Effective Team Member

Working on teams can be rewarding, but at times it can be difficult and downright frustrating. If there are poor communicators on your team, you may often feel left in the dark, confused or misunderst

2014-06-12 21:41:54 1039

原创 Linux device drivers学习笔记(6)——uart primary driver testing code

#include #include #include #include #include #include #define N 128void Delay(unsigned int t);int main(int argc, char **argv){int fd,send_n,recv_n,pipe_fd[2];pid_t pid;char buf

2014-05-14 21:39:33 568

原创 Linux device drivers学习笔记(5)——uart primary driver code

#include #include #include #include #include #include #include #include #include #include #include #include #include /*macro define*///module related#define DEVIC

2014-05-14 21:28:18 836

原创 交叉编译工具链

交叉编译工具链有如任何其它开发活动一般,嵌入式开发的第一步是建立(setting up)用于构建嵌入式Linux内核(当然包括驱动程序)及应用程序的工具链(toolchains )。不过,嵌入式开发需要是跨平台工具链。跨平台是什么意思呢?一般开发活动是在本地编译,使用是本地的工具链;而由于嵌入式的软硬资源(内存不足、没有本地编译器或操作系统都没有)限制等没法进行本地开发。需要在Linux-x8

2014-05-11 15:54:30 724

原创 Linux中断函数应避免使用不可重入函数

中断处理函数应该避免调用不可重入函数,因为新的中断可能发生并打断正在执行任务中,如果当前任务调用了一些不可重入的函数,将会产生错误。一些常用库函数如printf,malloc,free等都是不可重入函数,因为在函数中引用了全局变量,例如,printf会引用全局变量stdout,malloc,free会引用全局的内存分配表。关于可重入函数和不可重入函数可重入函数也可以这样理解,重入即

2014-05-11 15:52:59 2285

原创 linux系统时间

1、  对于获取系统时间的需要,linux提供了localtime函数。#include#includeint main(void){         time_tnow;         //实例化time_t结构         structtm *timenow;         //实例化tm结构指针         time(&now);        

2014-05-11 15:50:47 550

原创 Linux device drivers学习笔记(4)——Outline

Linux设备驱动学习学习新技术需要抓住要点,然后从全局把握技术的流程,再进而细化技术的细节,最后从本质上掌握技术。看了这么长时间的Linux Device Drivers,也配合看了其他从网上找的资料,终于是找到了门路,现在基本上从全局可以把握技术的流程了,至于细化技术细节,还需要更进一步的学习。要点Linux设备驱动主要分为两大类(几乎每个介绍Linux驱动的资料上都会这么介绍):

2014-05-11 15:49:02 882

原创 软中断

软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和"信号"有些类似,同时,软中断又是和硬中断相对应的,"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断"(《Linux内核源代码情景分析》第三章)。在RL78/G14中的“BRK”虽然在芯片手册中注明为“software”,但

2014-05-11 15:46:43 590

原创 关于dup2

关于dup2dup2实现的是文件描述符fd所指向的文件表(实际操作的文件)的备份,例如dup(fd0,STDOUT_FILENO),这个操作实现的是将文件描述符STDOUT_FILENO所指向的文件表的内容修改成和fd0所指向的文件表的内容一样,所谓的做fd0所指向文件表的备份。这样呢,通过文件描述符STDOUT_FILENO所访问的文件表和通过文件描述符fd0所访问的文件表是一样的。但是系统

2014-05-11 15:29:04 903

原创 vs2005工程转为vs2010工程

Stdafx.h中的如下代码需要替换:// 如¨?果?您¨²必À?须?使º1用®?下?列¢D所¨´指?定¡§的Ì?平?台¬¡§之?前¡ã的Ì?平?台¬¡§,ê?则¨°修T改?下?面?的Ì?定¡§义°?。¡ê// 有®D关?不?同ª?平?台¬¡§的Ì?相¨¤应®|值¦Ì的Ì?最Á?新?信?息¡é,ê?请?参?考? MSDN。¡ê//#ifndefWINVER             

2014-05-11 15:25:00 702

原创 Linux device drivers学习笔记(3)——uart driver相关

1、  搞了半天原来是测试程序中调用write的速率远远大于驱动中发送数据的能够达到的最大速率,就好比我建好了一个管道,管道中还附带了一个蓄水池,但是最高通过流速为1000立方每秒,突然管道的入口加入了10000立方每秒的水流,整个管道不崩溃才怪啊。2、  但问题又出现了,如何提高uart1驱动的信息传输速率。再有就是,驱动程序不应该给调用者强加任何策略,所以呢,调用write的速率为多少,是

2014-05-11 11:18:32 730

原创 Linux device drivers学习笔记(2)——关于tasklet和workqueue

1、  关于tasklet和workqueueTasklet与workqueue的不同应用环境总结如下:a)        必须立即进行紧急处理的极少量任务放入在中断的顶半部中,此时屏蔽了与自己同类型的中断,由于任务量少,所以可以迅速不受打扰地处理完紧急任务。b)        需要较少时间的中等数量的急迫任务放在tasklet中。此时不会屏蔽任何中断(包括与自己的顶半部同类型的中断)

2014-05-11 11:15:13 741

原创 Linux device drivers学习笔记(1)

1、  对于LDD3上所介绍的技术:休眠,唤醒,阻塞和非阻塞操作,异步通知这一系列的操作所针对的对象都是进程。所以,在讨论驱动程序时,需要将现在的思路换一换,现在写程序的思路还停留在前后台系统中,即使在有操作系统的情况下也是如此。所以,要学习Linux下多进程和多线程的编程,伴随而来的是进程之间的通信问题,同步问题,调度问题……记录一下,fork可以创建子进程,子进程与父进程共享代码段,但是数据段

2014-05-11 11:09:51 965

原创 裸奔系统和带操作系统的系统差别

1、  裸奔系统和带操作系统的系统差别。a)        裸奔的系统很自由,一切东西都由开发人员来安排,所以开发人员认为这个任务比较紧急,就可以作为重点来考虑,在循环中占主要位置来写。在实时性方面,尤其是中断函数方面,可以以硬件能够达到的最快速度来响应中断,进而做出中断处理。[BZ(1] 所以在响应的时间方面,具有无可比拟的优势。但缺点也存在,因为太自由,一切东西都是白纸,所有想实现的功能都

2014-05-11 11:03:24 5156

原创 程序内存空间的分配

关于程序内存空间的分配MCU的memory中分为不同的area,比如说RL78/G14的memory map如下图:其中不同的memory area有不同的用途。按照从下向上的顺序:1、  Code flash memory这个顾名思义就是目标程序所占据的位置。这里应该更确切的说一下,程序中涉及到代码的部分肯定是占据这个空间的。2、  Special function

2014-05-11 10:59:05 1253

原创 程序变量

程序变量阐明变量的代码作用域,自动存储时期的根源通过链接概念,说明变量文件作用域的根源C语言中变量的分类1、  自动存储变量(Auto)在一个代码块内(或者是在一个函数头部作为参量)声明的变量,无论是否存在存储类修饰符auto,都属于自动存储变量。此类变量具有自动存储时期、代码块作用域和空链接。未经初始化,此类变量的值是不确定的。2、  寄存器变量(Register)在

2014-05-05 21:07:07 1073

原创 code和const的区别

code和const的区别。用code声明的对象会被编译器安排在ROM中,而ROM通常是只读的,无法更改。用const声明的对象可能会被安排在ROM中,但也可能在RAM中。如果在ROM中,当然不能修改了;如果在RAM中,理论上仍然可以修改,只是编译器不允许你去修改而已。const对象只能在声明时初始化一次

2014-05-04 22:27:12 3771

原创 混合运算的数据类型统一

这个和编译器和C的版本都有关系。基本转换是这样的。double↑long↑unsigned↑int在做运算的时候,自左向右的方向是由编译系统自己完成而且一定完成的转换。也就是char和int做运算结果一定是int类型的。而自下而上的转换看表达式,如果int和long做运算,则int转成long,最后结果是long类型。如果int和float运

2014-05-04 22:26:05 1000

转载 交换两个变量的值,不使用第三个变量

通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下:int a,b;a=10; b=15;int t;t=a; a=b; b=t;这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。

2014-04-20 15:36:35 778

空空如也

空空如也

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

TA关注的人

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