记录一些东西
1、在ARM系统中,函数调用的时候,参数是通过哪种方式传递的?
参数<=4时候,通过R0~R3传递,>4的通过压栈方式传递
2、
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:
内存地址 |
存放内容 |
0x4000 |
0x34 |
0x4001 |
0x12 |
而在Big-endian模式CPU内存中的存放方式则为:
内存地址 |
存放内容 |
0x4000 |
0x12 |
0x4001 |
0x34 |
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
终端电阻的作用:暑期实习的时候,周立功的CAN模块给了个终端电阻,(CAN_H和CAN_L之间)
每个网段的两个端点必须加终端电阻。
终端电阻是为了消除在通信电缆中的信号反射,在通信过程中,有两种原因导致信号反射:阻抗不连续和阻抗不匹配。
为了提高网络节点的拓扑能力,CAN总线两端需要接有120Ω的抑制反射的终端电阻, 它对匹配总线阻抗起着非常重要的作用,如果忽略此电阻,会使数字通信的抗干扰性和可靠性大大降低,甚至无法通信。
4、进程 线程
进程等于线程加上资源平台(包括云运行上下文,内存地址空间,打开的文件等)
①在一个进程中,可以同时存在多条线程
②可以用线程作为CPU的基本调度单位,使得各个线程之间可以并行执行
同一进程中的各个线程,可共享该进程的各种资源,这就使得线程间的通信很方便(但是寄存器和栈,是每个线程自己独有的)
像VxWorks,uc/os-ii,他们的任务,其实就是线程
而像Linux,指的很可能是进程。
5、
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)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应