- 浏览: 286659 次
- 性别:
- 来自: 成都
最新评论
-
chd_wu:
都不如protobuf配合zmq啊
(转)Protobuf+RPC的几个C++实现
文章列表
使用Eclipse开发嵌入式linux应用程序
- 博客分类:
- Linux
1. 安装Eclipse for C/C++ developer的版本
2. 安装交叉编译工具链
若Eclipse使用不正常(如在新建工程的时候出现"Plug-in org.eclipse.cdt.ui was unable to load class org.eclipse.cdt.ui.wizards"错误等),可尝试用oracle官方提供的JRE替换掉ubuntu自带的OpenJDK,参考http://blog.csdn.net/zgrjkflmkyc/article/details/9263119
3. 在Project -> Pro ...
STM32启动过程分析
- 博客分类:
- STM32
硬件: STM32F1系列
软件环境:Keil 4.54
注:本文中提到的RTOS以RT-Thread为例,不涵盖所有RTOS的情况
在Keil MDK中新建工程时会根据所选的device自动生成启动代码文件startup.s,该文件的作用可根据其头部的注释看出
This module performs:;* - Set the initial SP;* - Set the initial PC == Reset_Handler;* - Set the vector table entries with the exceptions ISR address;* - Config ...
rt_mutex里owner的作用
- 博客分类:
- RTOS
在rt-thread源码中的rt_mutex_take()里有这样一段代码
if (mutex->owner == thread)
{
/* it's the same thread */
mutex->hold ++;
}
之前不理解在什么情况下线程会重复进入其所持有锁的保护区域,后来看到Vxworks Programmers Guide5.5里的一段解释和对应的例子
Mutual-exclusion semaphores can be taken recursively. This means that t ...
RingBuffer - 原理与实现
- 博客分类:
- 其他
1. 原理
参考http://blog.chinaunix.net/uid-9407839-id-3954445.html
环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。如果有多个读写用户访问环形缓冲区,那么必须添加互斥保护机制来确保多个用户互斥访问环形缓冲区。
图1、图2和图3是一个环形缓冲区的运 ...
附件是一篇介绍linux内核和驱动的英文slides,简明扼要,相比厚重的书籍更能突出重点,以下是基于该slides的一些笔记
linux内核源码查看(参考P59-P62):
1. 客户端方式:可利用Ubuntu12.04及之后版本自带的Kscope工具
2. Web方式:使用lxr(linux cross reference),登录http://lxr.free-electrons.com可直接使用而无需自行配置lxr。
linux内核配置(参考P71-P77):
1. make xconfig,图形化配置,支持全局搜索和将缺失依赖项的item显示为灰色,使用需安 ...
Vmware使用技巧
- 博客分类:
- 其他
使用版本: Vmware player 6
主机:Windows7
宿主机:Ubuntu10.04
参考附件sitara-linuxsdk-gsg.pdf文档中的”How to Build a Ubuntu Linux host under
VMware“一章(P13-P26)
1.文件共享
在“虚拟机设置->选项->共享文件夹”里设置主机下的共享位置,宿主机下的共享位置通常在/mnt目录下
2.设备共享
(1) 串行端口
在宿主机操作系统关闭的情况下,选择“虚拟机设置->硬件->添加”找到所需的串口设备。若Windows下串口为 ...
下图摘自NXP的SAA7144的手册
在写操作中,DATA传送完后slave器件内地址会默认自增,直到master产生stop信号。在读操作中,DATA传送完后若master产生了应答信号,则slave器件内地址自增,master不产生应答信号意味着master不再接收新的数据。
以下请参考附件TI_I2C.zip中的文档
Devices on the I2C bus only drive the bus lines LOW by connecting them to ground; they never drive the
bus ...
1.内核编程使用头文件
The base files are located in the include/ directory in the root of the kernel source tree. For
example, the header file <linux/inotify.h> is located at include/linux/inotify.h in the kernel source tree.
A set of architecture-specific header files are located in arch/< ...
http://blog.csdn.net/hinyunsin/article/details/6546670
前言:
我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。
比如,定义一个宏开关:
#define __DEBUG
当需要调试的时候,使用语句:
#ifdef __D ...
mbed项目http://mbed.org/是由ARM公司sponsor的一个开源项目,使用Apache2.0许可证。
目前对NXP的demo板支持的比较多,还有一款Freescale的,ST最近刚加入。感觉和Arduino很类似,API抽象度很高,比较简洁(但相对于用STM32库函数编写的代码,可读性较差),适合快速prototype开发,而且其使用了现在流行的Online IDE(内含Compiler)。但是目前对调试的支持似乎不足,还不适合专业的开发。
库程序基本基于C++构建,并使用了template,面向对象的比较彻底,所以完全看懂源码其实难度不小。另外,该项目还包含一个据说衍 ...
C语言中的大数(big integer)提升
- 博客分类:
- C/C++
第一个程序char.c
unsigned char x = 2;
signed char z = 5;
if((x-z)<0)
printf("x-z<0\n");
else if((x-z)>0)
printf("x-z>0\n");
输出结果是 x-z<0
第二个程序int.c
unsigned int x = 2;
signed int z = 5;
if((x-z)<0)
printf("x-z<0\n");
el ...
如何写出优美的C代码http://www.ibm.com/developerworks/cn/linux/l-cn-cobject/#author
用C语言实现持续的多态性http://www.ibm.com/developerworks/cn/linux/l-cn-cpolym/
C语言的强符号和弱符号http://blog.csdn.net/chgaowei/article/details/7173436
PS:IBM技术社区真是个好地方
DS-5和MDK-ARM(Keil)
- 博客分类:
- Keil MDK
DS-5的历史演变:SDT-->ADS-->RVDS-->DS-5
MDK = MDK-ARM = KEIL for ARM = KEIL MDK = Realview MDK
概念澄清参考http://www.myir-tech.com/resource/494.asp
早期的比较,来自英蓓特 http://www.embedinfo.com/wen-list.asp?id=352
Tool Component
RealView Development Suite
(RVDS)
RealView Microcontroller Develo ...
MDK-ARM 分散加载文件
- 博客分类:
- Keil MDK
Scatter Loading分散加载文件的概念http://www.keil.com/support/man/docs/armlink/armlink_Cegbbcjj.htm
Image映像文件组成http://www.keil.com/support/man/docs/armlink/armlink_Bhccdacb.htm
ARM映象文件各组成部分在存储系统中的地址有两种:一种是在映象文件位于存储器中时(也就是该映象文件开始运行之前,通俗的说就是下载到Flash中的二进制代码)的地址,称为加载地址;一种是在映象文件运行时(通俗的说就是给板子上电,开始 ...
Serial Wire Debug(SWD) is a two pin alternative to JTAG and has about the same capabilities except Boundary Scan is not possible.
ST-Link只支持SWD模式,而ST-Link/V2和Jlink同时支持SWD和JTAG模式.
参考STM32F100 reference manual第4版(以下简称RM)
RM第644页,关于芯片和SWD/JTAG的接口定义如下:
SWD模式下如果不接复位引脚,根据http://bb ...