新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一种基于Salvo的通用CAN/LIN网关

一种基于Salvo的通用CAN/LIN网关

作者:时间:2009-06-19来源:网络收藏

4 软件
CAN总线与LIN总线比较相似,比较接近,软件数据处理量不大;而且,软件本身功能相对单一,一般不需要操作系统支持。但本文讨论的是一个网关,针对不同场合系统功能需要适当的裁剪和扩充,有操作系统的支持更便于系统功能的裁剪和扩充,提高系统的可移植性,增加系统性。另外,有操作系统的支持系统开发时间大大缩短,而且可靠性也大大提高。
4.1
系统软件开发采用RTOS会占用部分系统硬件资源,目前大多数RTOS 适用于ARM 或X86 等可配备丰富硬件资源的微处理器系统。 占用系统硬件资源少,且功能强大,适合硬件资源相对贫乏的,尤其是存储器资源贫乏的 系列 占用程序存储器容量取决于用户调用的系统函数,一般典型系统占用1~2K 程序存储器。占用数据存储器容量取决于用户定义的变量、和事件的数量,以16 系列为例,每个全局变量占10b,占5b,事件占3b,一般典型系统占用50~100b 数据存储器。
Salvo 是一个优先级切换,支持事件驱动的多任务实时操作系统。Salvo 共支持16 个任务优先级,且多个任务可以共用一个优先级,任务按优先级高低切换,对于多个同一优先级的任务,以时间片循环方式切换。Salvo 支持任务和事件的数量不限,取决于RAM 的大小。
4.2 任务分割及功能确定
RTOS 的软件开发主要工作是任务分割、任务功能确定和任务代码编写。任务分割的基本原则是任务内的内聚度强而任务间的偶合性弱。为减少Salvo在任务切换时占用过多的系统资源,任务分割尽量减少任务数,系统分割成5个任务(参见图4):

CAN_TXD任务:由ENCANTXD信号触发,将经PDU_Conversion任务转换的数据送到CAN模块的发送缓冲寄存器,并启动CAN发送器发送数据。
CAN_RXD任务:由ISR_CANRXD中断服务程序发送ENCANRXD事件触发,接收CAN模块接收缓冲器的数据,发送CANTOLIN信号触发PDU_Conversion任务。
LIN_RXD任务:由ISR_LINRXD中断服务程序发送ENLINRXD事件触发,接收USART模块发送来的数据。根据LIN协议分析标识场确定报文的内容和长度,分析校验和场确定报文的正确性,发送LINTOCAN信号触发PDU_Conversion任务。
LIN¬_TXD任务:由ENLINTXD信号触发,将经PDU_Conversion任务转换的数据送到USART模块,并控制USART模块安LIN协议发送数据。
PDU_Conversion任务:由LINTOCAN或CANTOLIN信号触发,将SDU转换成CAN或LIN,并通过ENCANTXD信号或ENNLINTXD信号触发CAN_TXD任务或LIN_TXD任务向CAN总线或LIN总线发送数据。
4.3 任务间通信及任务优先级
现场总线一般对实时性要求较高,为提高系统的实时性,减少数据在网关的延时,系统采用中断方式接收CAN总线和LIN总线的数据。若CAN总线上有节点发送数据,网关的CAN模块接收器接收数据,存于信息集中缓冲器MAB,同时根据接收屏蔽器信息,比较接收过滤器与接收信息标示区是否相符,若相符将信息集中缓冲器信息装入接收缓冲器(RXB0或RXB1,18F4680的CAN模块有两个接收缓冲器),并通过中断标志寄存器PIR3的RXB0IF或RXB1IF(CAN模块接收缓冲器中断标志位)申请中断,CPU进入ISR_CANRXD中断服务程序,在ISR_CANRXD中发送ENCANRXD事件触发CAN_RXD任务启动。CAN_RXD任务读取接收缓冲器中SDU数据,存入一个CANSDU全局数组,并发送CANTOLIN信号触发PDU_Conversion任务启动。PDU_Conversion任务接收全局数组CANSDU数据,转换成LIN总线的协议数据单元,存于LINPDU全局数组,并发送ENLINTXD信号触发LIN_TXD任务启动。LIN_TXD任务接收全局数组LINPDU数据,控制USART模块按LIN总线协议发送数据。以上是网关从CAN总线接收数据发送到LIN总线的各任务同步及通信过程,网关从LIN总线接收数据发送到CAN总线的各任务同步及通信过程基本与其相似。



评论


相关推荐

技术专区

关闭