/**
******************************************************************************
* @file 六叶树CANFD二次开发demo
* @author lys
* @version V1.1.0
* @date 2023
* @brief 用例功能:
* 以六叶树USBCANFDMini为例,设备通道CAN0配置为FD模式,仲裁域波特率为1M,数据波特率
* 5M,CAN总线收到什么数据就回复什么数据。支持:USBCANFDMini/USBCANFD1/USBCANFD2。
* @note
*
* @endverbatim
*
******************************************************************************
* 版权:长沙六叶树教育科技有限公司
* 官网:www.liuyeshu.cn
* 更多资料教程下载见官网
******************************************************************************
修改日期 版本号 修改者 功能描述
2023.04.10 V1.1.0 LYS
----------------------------------------------------------------------------
******************************************************************************
*/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include "ControlCAN.h"
void exit_can(int flag)
{
//关闭设备
LCAN_CloseDevice(LCAN_USBCANFDMini,0);
exit(0);
}
//进程退出处理,程序调用 exit 或 main函数return 或 最后一个线程正常退出
void exitHandle(void)
{
printf("Demo Stop...\n");
//关闭设备
LCAN_CloseDevice(LCAN_USBCANFDMini,0);
}
int main(void)
{
LCAN_INITFD_CONFIG canInitFDCfgInfo;
UINT devType=LCAN_USBCANFDMini,devIndex = 0,canIndex = 0;
LCAN_CAN_OBJ canObj[32];
LCAN_CANFD_OBJ fdObj[32];
UINT ret, i, j, frameCnt;
printf("Demo Start...\n");
//var init
memset(&canInitFDCfgInfo, 0, sizeof(LCAN_INITFD_CONFIG));
//注册回调函数,程序调用 exit 或 mian函数return 或 最后一个线程正常退出时,捕获退出事件,执行退出处理
atexit(exitHandle);
//打开设备
ret = LCAN_OpenDevice(devType, devIndex);
if(LCAN_STATUS_OK != ret)
{
printf("Device Open Fail...\n");
exit_can(1);
}
//FD MODE
canInitFDCfgInfo.fdEn = 1;
//ISO设置 0:NONE ISO 1:ISO
canInitFDCfgInfo.isoEn = 0;
//仲裁域波特率 1M
canInitFDCfgInfo.abit_timing = 0x01400106;
//数据域波特率 5M
canInitFDCfgInfo.dbit_timing = 0x00800001;
//正常工作模式
canInitFDCfgInfo.mode = 0;
//用例只初始化ch0
ret = LCAN_InitCANFD(devType, devIndex, canIndex, &canInitFDCfgInfo);
if(LCAN_STATUS_OK != ret)
{
printf("Device Init Fail...\n");
exit_can(1);
}
printf("\r\nDEMO 参数:CAN1 ISO:NONE Baud:<1M,5M> 功能:接收到什么数据就回发什么数据。\n");
while(1)
{
//CAN
if(0 < LCAN_GetReceiveNum(devType, devIndex, canIndex, REC_TYPE_CAN))
{
frameCnt = LCAN_Receive(devType, devIndex, canIndex, canObj, 32, 50);
if(0 < frameCnt)
{
//print
printf("---can recv:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
printf("ID: %08x DataLen:%02x ExternFlag:%d RemoteFlag: %d data:",
canObj[i].id&0x1FFFFFFF, canObj[i].dataLen,
canObj[i].externFlag, canObj[i].remoteFlag);
for (j=0; j< canObj[i].dataLen; j++) {
printf("%02x ", canObj[i].data[j]);
}
printf("\n");
}
//send
printf ("---can send:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
//正常发送模式
canObj[i].sendType = 0;
}
LCAN_Transmit(devType, devIndex, canIndex, canObj, frameCnt);
}
}
//FD
if(0 < LCAN_GetReceiveNum(devType, devIndex, canIndex, REC_TYPE_FD))
{
frameCnt = LCAN_ReceiveFD(devType, devIndex, canIndex, fdObj, 32, 50);
if(0 < frameCnt)
{
//print
printf("---fd recv:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
printf("ID: %08x DataLen:%02x ExternFlag:%d RemoteFlag: %d data:",
fdObj[i].id&0x1FFFFFFF, fdObj[i].dataLen,
fdObj[i].externFlag, fdObj[i].remoteFlag);
for (j=0; j< fdObj[i].dataLen; j++) {
printf("%02x ", fdObj[i].data[j]);
}
printf("\n");
}
//send
printf ("---fd send:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
//正常发送模式
fdObj[i].sendType = 0;
}
LCAN_TransmitFD(devType, devIndex, canIndex, fdObj, frameCnt);
}
}
}
return 0;
}
lysDemo-arm-none-linux-gnueabi(mini2440).tar.gz
需积分: 0 169 浏览量
更新于2023-07-18
收藏 1.71MB GZ 举报
标题“lysDemo-arm-none-linux-gnueabi(mini2440).tar.gz”表明这是一个针对基于ARM架构的Linux系统,特别是针对mini2440开发板的软件开发项目。这个压缩包包含了“lysDemo”目录,可能是一个库、应用程序或者示例代码,用于在Linux系统上处理USB到CAN(Controller Area Network)转换适配器的通信。
在描述中,提到了"六叶树",这可能是提供该适配器或开发工具的公司名称。"USB转CAN适配器"是硬件设备,它允许通过USB接口与CAN总线进行通信,常用于工业自动化、汽车电子和物联网应用。"Linux系统二次开发C++用例"意味着这个压缩包包含的代码可能是用C++编写,为Linux系统进行了定制,以支持该USB-CAN适配器的驱动程序开发或应用层软件的构建。
在标签“arm linux”中,"arm"指的是Advanced RISC Machines(现在称为Arm Ltd),这是一种广泛使用的微处理器架构,常见于嵌入式系统和移动设备。"linux"则表示这个项目与Linux操作系统相关,这是一款开源的操作系统内核,尤其适用于各种硬件平台,包括嵌入式设备如mini2440开发板。
mini2440是一款基于Samsung S3C2440 ARM9处理器的开发板,它通常用于教育、原型设计和产品开发。开发板可能配备了各种外设接口,如USB、CAN等,以支持不同的应用需求。
从压缩包的子文件列表只给出了"lysDemo",可以推测这可能是一个工作目录或源代码包,包含以下部分:
1. `Makefile`:构建脚本,用于编译和链接C++代码。
2. `src/`:源代码目录,可能有驱动程序代码和/或应用程序代码。
3. `include/`:头文件目录,包含接口定义和其他需要被编译器引用的文件。
4. `docs/`:可能包含相关的文档,如API参考、用户手册或开发指南。
5. `test/`:测试用例或示例代码,帮助开发者验证适配器的功能。
6. `config/`:配置文件,可能包含编译选项或系统设置。
7. `LICENSE`:软件许可文件,定义了使用和分发代码的法律条款。
在使用lysDemo时,开发者首先需要解压文件,然后在终端中导航到lysDemo目录并执行`make`命令来编译代码。可能还需要安装特定的交叉编译工具链(如arm-none-linux-gnueabi),以便在非ARM目标平台上构建适用于mini2440的代码。一旦编译完成,生成的二进制文件可以通过调试器或烧录工具加载到开发板上运行。如果lysDemo包含驱动程序,那么它会涉及Linux内核模块的加载;如果是应用程序,则可能需要通过SSH、串口或其他方式在开发板上运行。
lysDemo-arm-none-linux-gnueabi(mini2440).tar.gz是一个针对mini2440开发板的C++项目,它涉及到了ARM架构下的Linux系统,特别是USB到CAN适配器的驱动程序开发或应用程序编程。这个项目对于熟悉C++、Linux内核驱动以及嵌入式系统的开发者来说具有重要的学习和实践价值。
六叶树
- 粉丝: 80
- 资源: 51
最新资源
- 漂亮动态效果PPT柱形图-3.pptx
- 山形柱状图数据分析PPT模板-1.pptx
- 长阴影扁平化PPT柱形图模板-1.pptx
- 山形锥形柱状图PPT模板素材-1.pptx
- 条形图-数据图表-简约扁平-3.pptx
- 条形图-数据图表-时尚红蓝-PPT模板-3.pptx
- 小人人数比例分析说明PPT模板-1.pptx
- 柱状图-数据图表-高端商务-3.pptx
- 柱状图-数据图表-扁平简洁-3.pptx
- 柱状图-数据图表-简约扁平 -3.pptx
- 柱状图-数据图表-清新活泼-3.pptx
- 柱状图-数据图表-折纸简洁-3.pptx
- 柱状图-数据图表-简约扁平--1.pptx
- windows tcp连通性测试工具tcping64
- CDN(内容分发网络)核心技术解析及其在网络优化中的应用
- 饼图-数据图表-简约清新 -3.pptx