分类存档: 嵌入式开发

HEX文件格式详解[转]

Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行拆分来分析其中的内容:

例如 “:1000080080318B1E0828092820280B1D0C280D2854”可以被看作“0x10 0x00 0x08 0x00 0x80 0x31 0x8B 0x1E 0x08 0x28 0x09 0x28 0x20 0x28 0x0B 0x1D 0x0C 0x28 0x0D 0x28 0x54”

第一个字节 0x10表示本行数据的长度;

第二、三字节 0x00 0x08表示本行数据的起始地址;

第四字节 0x00表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。 继续阅读 »

OSEK study notes – 优先级反转与死锁

1.优先级反转
指资源被锁时低优先级任务抢占高优先级任务。
举例:任务A、B、C,优先级从低到高依次为1、2、3,所有任务都是完全抢占式,任务A和C共享资源R。
1.任务A运行,并对资源R加锁;
2.任务C被激活抢占任务A,并尝试对资源R加锁,因此C进入WAITING状态,A从被抢占的地方恢复;
3.任务B被激活并抢占任务A,任务B成功执行;
4.任务A恢复执行并释放资源R,任务A执行完成;
5.任务C恢复并对资源R加锁并完成执行。
我们观察到任务B优先级低于任务C却实际上抢占了任务C,这就是优先级反转。在实时要求较高的系统中这种高优先级的任务被意外延迟是难以接受的。更严重的是由于优先级反转,任务C的延迟时间是无法确定的,因为任何比任务A优先级高的任务都可以抢占任务A。

2.死锁
对资源加锁造成两个任务的冲突,每个任务都锁住了另一个任务需要的资源,使得每个任务都不能完成。
举例:任务A、B,共享两个资源R1、R2,其他情况与优先级反转中相同。
1.任务A对R1加锁;
2.任务B抢占A,并对R2加锁,之后尝试对R1加锁,由于R1已经被锁,所以任务B进入WAITING状态;
3.任务A恢复执行,尝试对R2加锁,由于R2已经被锁,所以任务A进入WAITING状态;
4.其他任务进入执行状态,而任务A和B永远无法继续执行。
死锁很可能在正常测试中不能被发现,而在交付客户后由于问题难以复现而更难被排查到。

解决优先级反转和死锁的方法很多,在OSEK中利用OS的优先级天花板协议(priority ceiling protocol)是最有效的方法。

去藕电容 开路输出/三态输出

几年前看嵌入式系统入门的笔记

image

继续阅读 »

Look at this long expression of function declaration

Look at this long expression of function declaration

extern FUNC( Std_ReturnType, FEE_CODE ) Fee_Write(
VAR( uint16, AUTOMATIC ) BlockNumber,
P2VAR( uint8, AUTOMATIC, FEE_APPL_DATA ) DataBufferPtr);

There are four macro in this expression: FUNC, VAR, P2VAR, Std_ReturnType, these definition

/*
* @violates @ref Compiler_h_REF_4 In the definition of a function-like macro each instance of a
* parameter shall be enclosed in parentheses
*/
#define FUNC(rettype, memclass) rettype

/*
* @violates @ref Compiler_h_REF_4 In the definition of a function-like macro each instance of a
* parameter shall be enclosed in parentheses
*/
#define VAR(vartype, memclass) vartype

/*
* @violates @ref Compiler_h_REF_4 In the definition of a function-like macro each instance of a
* parameter shall be enclosed in parentheses
*/
#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *

/**
* @brief This type can be used as standard API return type which is shared between the RTE and the
* BSW modules.
* @implements DBASE12002
*/
typedef uint8 Std_ReturnType;

So the long declaration expression should look like this after precompile :

extern uint8 Fee_Write(uint16 BlockNumber, uint8* DataBufferPtr);

It’s simple, So don’t be scared by the long expression.

PS: AUTOSAR <Specification of Compiler Abstraction> defined how to implement the Complier.h file.

 

Linux常用基础服务安装与配置–ssh、ftp

ubuntu12.04 安装配置FTP

1 安装pure-ftpd 服务
sudo apt-get install pure-ftpd

2 查看21端口是否已开启。
sudo netstat –nl

完成安装后,就可以用Ubuntu系统的用户名和密码登陆了。
重启pure-ftpd的命令如下:
sudo service pure-ftpd restart

Ubuntu Server中的pure-ftpd缺省配置不允许匿名登陆,每个用户登陆都是访问自己的home目录,最多允许50名用户同时连接。基本上已经满足需要,不需要再多做配置. 继续阅读 »

Linux学习笔记(5)异步通知机制

异步通知
读取按键的几种方式:
查询: 耗资源
中断: 一直读取
poll:   指定超时时间
共同特点:应用程序主动读取按键
异步通知:有按键按下,触发应用程序去读取按键
进程之间发送信号的实现:

继续阅读 »

Linux学习笔记(4)poll机制的应用程序

这部分的学习目标:了解poll机制的实现原理,掌握poll实现按键读取的方式。
目前对poll机制的理解:poll机制的实质就是系统帮你在一定的等待时间之后或者有其他信号量时退出函数调用。
对于poll机制的深入了解可能还要花些时间,但是对于入门,我们先掌握poll机制的使用方法,达到能够构建对应的应用程序的目标。
1.poll机制实现按的代码分析

继续阅读 »

嵌入式Linux学习笔记(2) LED驱动

编译驱动
    上传驱动文件 first_drv.c 到 /opt/weidongshan/linux-2.6.22.6/drivers/char
    编辑该目录下的Makefile文件,添加一行 obj-m  += first_drv.o

继续阅读 »

第 1 页,共 22 页12345...1020...最旧 »