嵌入式记录

记录一些东西

1、在ARM系统中,函数调用的时候,参数是通过哪种方式传递的?
参数<=4时候,通过R0~R3传递,>4的通过压栈方式传递 

2、

嵌入式系统开发者应该对Little-endianBig-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址

存放内容

0x4000

0x34

0x4001

0x12


  而在Big-endian模式CPU内存中的存放方式则为:

内存地址

存放内容

0x4000

0x12

0x4001

0x34


联合体 union 的存放顺序是所有成员都从低地址开始存放


3、can总线

CAN总线使用差分电压传送,CAN_H和CAN_L,静态均为2.5v,表示逻辑1(也成为“隐性”);

CAN_H比CAN_L高为显性,表示逻辑0,通常是CAN_H:3.5v,CAN_L1.5v

串行通信协议     现场总线   分布式控制系统

CAN总线特点:(1) 数据通信没有主从之分,任意一个节点可以向任何其他(一个或多个)节点发起数据通信,靠各个节点信息优先级先后顺序来决定通信次序,高优先级节点信息在134μs通信; (2) 多个节点同时发起通信时,优先级低的避让优先级高的,不会对通信线路造成拥塞; (3) 通信距离最远可达10KM(速率低于5Kbps)速率可达到1Mbps(通信距离小于40M);

CAN协议 2.0B

在总线中传送的报文,每帧由7部分(灰色部分)组成。CAN 协议支持 两种报文格式,其唯一的不同是 标识符 (ID)长度不同,标准格式为11位,扩展格式为29位。
在标准格式中, 报文 的起始位称为帧起始(SOF),然后是由11位 标识符 和远程发送请求位 (RTR)组成的仲裁场。RTR位标明是 数据帧 还是请求帧,在请求帧中没有数据字节。
控制场包括 标识符 扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的 循环冗余检查 (CRC)。
应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。
报文 的尾部由帧结束标出。在相邻的两条 报文 间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

 

终端电阻的作用:暑期实习的时候,周立功的CAN模块给了个终端电阻,(CAN_H和CAN_L之间)

每个网段的两个端点必须加终端电阻

终端电阻是为了消除在通信电缆中的信号反射,在通信过程中,有两种原因导致信号反射:阻抗不连续和阻抗不匹配。

为了提高网络节点的拓扑能力,CAN总线两端需要接有120Ω的抑制反射的终端电阻, 它对匹配总线阻抗起着非常重要的作用,如果忽略此电阻,会使数字通信的抗干扰性和可靠性大大降低,甚至无法通信。

4、进程 线程

进程等于线程加上资源平台(包括云运行上下文,内存地址空间,打开的文件等)

①在一个进程中,可以同时存在多条线程

②可以用线程作为CPU的基本调度单位,使得各个线程之间可以并行执行

同一进程中的各个线程,可共享该进程的各种资源,这就使得线程间的通信很方便(但是寄存器和栈,是每个线程自己独有的)

像VxWorks,uc/os-ii,他们的任务,其实就是线程

而像Linux,指的很可能是进程。

5、

嵌入式记录_第1张图片

6、信号量,PV原型

信号量的概念
每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用C语言表述)

typedefine struct{
int value;        //>0时表示可用的资源数目,<0时表示等待该资源而阻塞的进程数
struct PCB *queue;        //等待该资源而阻塞的进程队列
}semaphore

 其中PCB是进程控制块,是操作系统为每个进程建立的数据结构。

PV原语
对一个信号量变量可以进行两种原语操作:P操作和V操作,它们分别定义如下

P(semaphore s)
{
        s.value--;                //将信号量值减1
        if (s.value < 0)        //已经没有可用资源

{
asleep(s.queue);//将该进程的PCB加入到 s.queue尾部,将该进程阻塞。
调度新任务(就绪的)运行;
}

}


 

V(semaphone s); 
{
        s.value++;                //将信号量值加1
        if(s.value <= 0) //队列中有进程在等待


{

wakeup(s.queue)//唤醒阻塞队列中的一个进程,变为就绪
}

}



 

利用信号量机制,来进行对临界区资源的访问。

semaphone S;
S.value=N;//N为资源个数
P(S);
临界区;
V(S);
非临界区;

 

利用信号量,进行任务间同步

信号量初始值为0

while(1)
{
A;
V(S);
}
while(1)
{
P(S);
B;
}

这样子的话,就必须A先执行,B才能执行,构成同步关系

 

7、进程间通信方法:管道、消息队列、共享内存、信号量、套接口等

8、实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应

你可能感兴趣的:(嵌入式,笔试)