- 博客(33)
- 资源 (8)
- 收藏
- 关注
原创 gitlab的自动备份经历
前提gitlab手动备份gitlab自动备份crontabfind和rm双备份机制代码前提之前休假的时候,公司里搭建的gitlab服务器莫名宕机,为此还被召唤回公司。到公司以后鼓捣了一下,发现是硬盘损坏,这下没辙了只能放弃。 休假完以后到公司重新更换硬盘、重装系统、安装gitlab,让大家重新申请账号、提交版本库。整个过程耗时耗力,回头想想当时要是要是做了双硬盘备份,也就不会有这么麻烦
2015-11-25 17:33:03 23429 1
原创 IAR自建文件注释模板
1,打开IAR,依次点击Edit->Code Templates->Edit Templates;会弹出CodeTemplates.ENU.txt文件2,在文件的末尾处添加:#TEMPLATE "&FileDeclare>&FileHeader",&Description,&Version="v0.1",&Author="gang.cheng",&date="$DATE$",&Bu
2015-05-05 10:30:45 4602
原创 让hg版本库自动化测试
前言在嵌入式开发中,测试是很重要的一个环节,但是开发人员往往会忽视它。所以把自动化测试与代码紧密结合在一起是这篇文章的主题。我们开发人员平时维护代码的时候使用最多的是版本库工具,很多时候代码修改完了,本地一编译,通过就提交了。但是却忽视了一个问题:程序编译通过就一定能正常运行了?显然是不对的。前期准备这里需要准备以下工具:1,linux -- 这里我使用了ubuntu2,
2014-10-20 12:57:45 1860
原创 C语言求质数的算法
qianya上次被出了一题质数的C语言求解题目,当时用了最粗暴的算法,回来仔细参考资料,其实答案有很多种:1,小学生版本:判断 x 是否为质数,就从 2 一直算到 x-1。static rt_uint32_t array1[ARRAY_LEN];void func1(void){ for (rt_uint32_t i = 1; i { a
2014-06-13 12:38:44 19652 4
转载 contiki的rime协议分析-channel
摘要: Rime协议栈所有通信都是通过通道channel标识的,本文介绍通道channel结构体及相关函数,包括channel_init、channel_open、channel_close、channel_lookup、channel_set_attributes。PS:channel有通道、信道、渠道、频道等含义,本文将其翻译为通道,理由是Rime中cha
2014-04-27 09:53:53 1795
原创 contiki的rime协议分析-abc
前言 一直在关注contiki,特别是对里面的网络部分特别感兴趣。这里要提及2个人:1,Jelline大神,帖子比较详细介绍了contiki的资料,入门是够了。2,原同事,他的帖子对contiki的一些app应用以及移植也介绍比较详细,对于网络的应用和IOT(物联网)讲的比较多。大家都可以去他们的帖子参考学习下。我这里就会记录一些我对rime学习的一些心得。rim
2014-04-24 22:45:40 3639
原创 contiki的5种定时器理解
一,概述Contiki的定时器包含一个硬件时钟模型,五个定时器模型,五种timer简述如下:timer --be used to check if a time period has passed[1]stimer --be used to check if a time period has passed[1]ctimer --Active timer, calls a fun
2014-04-17 17:46:04 3289
原创 uip的yeelink实现
前言物联网的IPV6应用是一个趋势,contiki是集成了6lowpan的一个集成开发工具。uip是集成在内部的,支持IPV6以及IPV4,这里先通过IPV4与平台连接建立一个数据通道。后续会跟进IPV6以及6lowpan的应用。而且uip不需要OS支持,以事件驱动的方式编程,占用的RAM以及ROM都符合嵌入式的需求。之前我们需要了解一些背景知识:1,http的相关知识2,ye
2014-03-28 09:49:12 5976 21
原创 cooja的原理
最近一直在关注cooja的实现,看了很多源代码,大概理解了一点点,总结一下:1,contiki的代码里面:platform目录里面有cooja这个平台,在这个平台里面有软件实现contiki仿真的底层实现:SYS首先我们看到sys,这部分代码是软件实现了线程,与contiki里的线程是不同的,这个线程是linux平台的NET这里是net的抽象接口,与通常contiki平
2014-03-04 21:08:10 4136 1
原创 RTThread的finsh在IAR 430上移植的可行性
RTThread的finsh是个好东西,如果想移植到IAR 430平台,是需要一些移植工作的,因为finsh需要重新定义一个section,然后把代码放入指定section;那么我们来看看在IAR430平台下如何实现这些:一,链接文件的修改:以我用的msp430f1611为例,找到lnk430f1611.xcl拷贝一份,找到// --------------------------
2013-12-30 17:35:12 3439 1
原创 自动删除-IAR项目工程生成垃圾文件的工具
做嵌入式开发,IAR工程编译会产生很多垃圾文件,在版本库提交的时候手动去删除会很麻烦。制作一个python脚本:代码如下# -*- coding: utf-8 -*-# in order to delte the files that with extendsnames# 任务:需要对指定格式的文件进行批量删除,如''exe",".swf"等等。# # 步骤:#
2013-03-12 17:55:47 4354
原创 内存的slab算法
•Slab分配模式把对象分组放进缓冲区(尽管英文中使用了Cache这个词,但实际上指的是内存中的区域,而不是指硬件高速缓存)。因为缓冲区的组织和管理与硬件高速缓存的命中率密切相关,因此,Slab缓冲区并非由各个对象直接构成,而是由一连串的“大块(Slab)”构成,而每个大块中则包含了若干个同种类型的对象,这些对象或已被分配,或空闲。上面是slab算法的定义。由此我们可以看出,sla
2012-05-14 16:27:29 2189
原创 观察者模式-在wsnos中的应用以及拓展
为什么要使用设计模式虽然设计模式并不是万能钥匙(如果世上真有此物的话),但设计模式可确保通过熟知和公认的解决方案解决常见问题。模式存在的实施基础在于:大多数问题其他人或开发团队已经遇到并解决了。因此,模式提供了一种在开发人员和组织之间共享可使用的解决方案的机制。无论这些模式的出处是什么,这些模式都利用了大家所积累的知识和经验。 这可确保更快地开发正确的代码,并降低在设计或实现中出现错误的可
2012-03-20 09:11:02 1143 1
转载 static_cast 与reinterpret_cast
static_cast用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由
2012-03-08 17:07:28 686
转载 FatFS文件系统详解-附移植建议
在这里http://elm-chan.org/fsw/ff/00index_e.html下载源码,只有800多K,小的可怜,还可以下载示例程序,有AVR、Win32、lpc等多平台已实现的方案。打开看src文件夹,一个option文件夹、00readme.txt、diskio.h、ff.c、ff.h、ffconf.h和interger.h。移植时需要修改的文件主要包括ffconf.h和interg
2012-02-08 10:13:39 2899 1
转载 More Effective C++:指针与引用的区别
指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因
2012-02-07 15:17:42 602
转载 Templates(C++模板类)
Function templatesFunction templates are special functions that can operate with generic types. This allows us to create a function templa
2011-08-10 11:00:43 954
转载 MCS51之裸奔框架C++
本程序主要表现了C++多文件系统的MCU构建方法,任何支持C++的MCU/ARM/DSP都可用此法构建。说实话在51上玩C++是很郁闷的~~~一般别玩~~~这里主要讲构建之法.特别要注意变量的重复定义问题: 最好每个C/CPP文件包含与自己同名的H头文件,在
2011-07-29 20:09:21 2211
原创 RT-Thread的优先级算法
RT-Thread的优先级有3种级别,最大分别是8,32,256.我们逐一来分析,在此之前看一下下面的变量:const rt_uint8_t rt_lowest_bitmap[] ={ /* 00 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 10 */ 4, 0, 1, 0, 2, 0, 1, 0, 3,
2011-06-10 15:45:00 3347
转载 C语言编程中的字节对齐问题
一.什么是字节对齐,为什么要对齐?<br /> 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。<br /> 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误
2011-05-18 10:12:00 1322 1
转载 RFID与Zigbee优缺点对比
对于大型移动性强的物体,RFID技术仍然存在许多问题,特别是读写距离问题,然而结合网络通信功能的Zigbee技术,无疑给身份识别和管理技术注入新的强大的活力。 身份识别是人们生活和生产管理中非常重要的一件事,为了便于管理人们将个人,车辆,货物进行了编号,这就产生了身份证号,银行卡号,车牌号,条形码等。人们使用了条形码读码器,刷卡机等设备将这些编号读进计算机,进行数字化处理以提高管理的效率.为了进一步改进这个数字化的手段,人们又发明了射频卡(RFID)技术。然而,对于汽车,集装箱等大型移动性强的物
2011-05-06 11:22:00 5063
转载 (转)arm汇编语言调用C函数
<br />于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,关于ATPCS的详细内容可以查看ADS1.2 Online Books ——Developer Guide的2.1节。这篇文档要讲的是汇编代码中对C函数调用时如何进行参数的传递以及如何从C函数正确返回。<br /> 不同于x86的参数传递规则,ATPCS建议函数的形参
2011-04-11 08:24:00 3474
转载 volatile关键字
这几天写了个“怪”程序,说它“怪”,是因为在单片调试它的时候,有一个变量的值老是不变的。最典型的“怪”语句是:_uKey=P2;。结果_uKey的值还是初定义时的值(0x00),我被它气死了。上网问高手,好在用高手指点用volatile这个关键字。一用真的行了。我不理解这个关键字的含意,上网找了点资料,如下:volatile用于防止相关变量被优化。例如对外部寄存器的读写。对有些外部设备的寄存器来说,读写操作可能都会引发一定硬件操作,但是如果不加volatile,编译器会把这些寄存器作为普通变量处理,例如连续
2011-03-18 11:00:00 919
转载 数组的指针、指针数组以及指向指针的指针
考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。一维数组在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。例如:int a[10];int *p;p=&a[0]//和p=a是等价的。因为a是数组名,所以他是该数组的地址,同时因为第一个元素为a[0],那么&a[0]也代表了该数组的地址。但是我们是不是就说一个数组名 和该数组的第
2011-03-17 08:30:00 4810 1
转载 单片机IO口设置推挽和开漏的区别
一般情况下我们在电路设计编程过程中设置单片机,大多是按照固有的模式去做的,做了几年这一行了,也没碰到过什么问题。昨天就遇到了这样一个问题,电路结构如图1:在这种情况下STC单片机与410单片机通讯是没问题的但是与PC就无法通讯了,STC收不到PC的命令,以前410的位置是用的STC的片子一直没问题,我想也许是驱动能力不够,在410TX端加了上拉,不过没起作用。用示波器监视串口得到的
2011-03-16 13:16:00 4908 1
转载 c语言静态变量和静态函数
static C语言<br /> C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。<br /> 由于C语言代码是以文件为单位来组织的,在一个源程序所有源文件中,一个外部变量或函数只能在某个文件中定义一次,而其它文件可以通过extern声明来访问它(定义外部变量或函数的源文件中也可以包含对该外部变量
2011-02-23 11:34:00 839
转载 WinCE驱动开发问题精华集锦(一)
<br />在mediaplayer全屏播放的时候,我可以用键盘上的某一个键调节声音大小,现在我想在屏幕上显示调节的结果就跟我们看电视一样能出来一些标记。当声音变大在屏幕上就增多,当声音变小的时候就减少 <br />得到播放窗口的DC,然后在上面显示一个不同颜色的矩形或者其它形状。 <br />在ce自制平台中如何添加自己的驱动?cec文件和reg,bib文件有何区别?看混了,不知道如何才能让驱动注册到平台中。另外,reg和bib是我在编写驱动必须要自己写的么 <br />CE 的驱动分为本机驱动和流驱动,
2011-01-19 14:43:00 827
转载 函数指针和指针函数
【函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:int (*f)(int x);double (*ptr)(dou
2010-12-13 09:38:00 685
转载 keil 51 关于*** ERROR L107: ADDRESS SPACE OVERFLOW 的分析
<br />51编译时一个奇怪的问题<br /> 答案:<br /> <br />我用KEIL选用small模式编译一个程式时老时出错,信息如下。<br />*** ERROR L107: ADDRESS SPACE OVERFLOW<br />... ...<br />Program Size: data=217.6 xdata=0 code=5314<br />Target not created<br />芯片我选的是AT89C52,RAM有256呀,怎么会OVERFLOW呢?<br />但是如果
2010-12-02 17:21:00 4506
原创 解决mdk生成bin烧录lpc1343无法运行问题
<br />最近拿到了lpc1343的最小系统板,arm cortex-M3,好东西啊。<br />拿起手册赶紧看起,看完系统时钟跟GPIO部分就忍不住要跑程序了。呵呵<br />具体的配置就不说了。写好程序就开始编译。<br />通过LPC1343 芯片本身自带的USB BootLoader 来更新我自己的程序,这个功能太爽了。<br />首先mdk生成的是hex文件,需要转化为bin文件,用keil自带的工具可以实现<br />使用FROMELF命令行生成BIN的文件,<br />使用方法如下:<br
2010-11-28 20:38:00 4533 3
翻译 ProtoThreads如何工作的
最近把手头的SD卡更新NK到NAND项目完成,总算抽空上网瞎逛游了。正好群里面有人推荐了一个系统,说是对小资源的单片机非常适合。这里我就推荐2篇网文:http://www.daxia.com/bibis/moredata30_1234764_43130.shtmlhttp://blog.csdn.net/t_larry/archive/2008/10/18/3097191.aspx这2
2010-11-28 20:30:00 10566 2
13.56MHz RFID Antenna
2011-02-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人