首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
μC/OS-II的多任务信息流与CAN总线驱动 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 22:31:09 点击数:[] ![]() |
|||||
由SJA1000控制器逐个取出往外发。从CAN口接收数据时,往往等收到若干个字节后才需要CPU进行处理,所以这些预收的数据可以先存于缓冲区。缓冲区可以设置收到若干个字节后再中断CPU,这样避免了因为CPU的频繁中断而降低系统的实时性。 带缓冲和信号量的CAN口接收和发送部分见本刊网络补充版(http://www.dpj.com.com)。 接口函数总结如下。 void CanInitHW(UI segment,BYTE irq0,BYTE IRQ1) /*设置SJA1000控制器端口中断向量*/ int canReleaseHW() /* 清除SJA1000控制器端口中断向量*/ int canSendMsg( CANBYTE port, MSG_STRUCT msg) /* 向定制SJA1000控制器端口发送数据*/ int canReceiveMsg( CANBYTE port, MSG_STRUCT msg_ptr) /*从定制SJA1000控制器端口接收数据 int canConfig( CANBYTE port, CAN_STRUCT can) /*初始化和配置SJA1000控制器 */ int canNormalRun( CANBYTE port ) /*设置SJA1000正常(Normal)运行模式 */ int canReset( CANBYTE port ) /* SJA1000控制器端口重新设置,缓冲区置位0xff*/ CANBYTE can0r( CANBYTE addr) /*读取SJA1000控制器端口0的定制寄存器的值 */ CANBYTE can1r( CANBYTE addr) /*读取SJA1000控制器端口1的定制寄存器的值 */ 接收和发送数据缓冲区数据结构定义: typedef struct { INT16U RingBufRxCtr; /* 接收缓冲中字符数目 */ OS_EVENT RingBufRxSem; /* 接收信号量 */ INT8U RingBufRxInPtr; /* 接收缓冲中下一字符的写入位置 */ INT8U RingBufRxOutPtr; /* 接收缓冲中下一待读出字符的位置 */ INT8U RingBufRx[CAN_RX_BUF_SIZE]; /* 接收环形缓冲区*/ INT16U RingBufTxCtr; /* 发送缓冲中字符数目 */ OS_EVENT *RingBufTxSem; /* 发送信号量 */ INT8U *RingBufTxInPtr; /* 发送缓冲中下一字符的写入位置 */ INT8U *RingBufTxOutPtr; /* 发送缓冲中下一待读出字符的位置 */ INT8U RingBufTx[CAN_TX_BUF_SIZE]; /* 发送环形缓冲区*/ } CAN_RING_BUF; 结 语 本文是在嵌入式计算机技术领域的应用背景下提出的,整个工程开发结束以后,系统正常运作时间超过27天。希望本文的提出对开发嵌入式操作系统的技术人员能有所帮助,同时也希望同一领域的开发人员共同探讨、共同发展。 |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |