CAN总线功能介绍
CAN总线是博世公司1986年发明的用于汽车内部单片机电路板(ECU)之间通讯,硬件上使用2根线实现数据传输,CAN总线通讯单元不再是单个字节,而是一个数据包,这个数据包包含了数据长度,数据内容,目的地址ID,CRC校验等,相较于485,232通讯数据的组包是在软件实现的,CAN总线是硬件实现,编程时只要设置相关的参数即可.目前在车载通讯和工业通讯都使用的比较多.主要功能有:
Lua简介
Lua是一个文本脚本语言,1993年巴西人发明的,能嵌入到C,C++执行,即可以调用C/C++的函数,目前在游戏行业用的比较多.
C/C++为什么需要脚本语言
C/C++代码运行的时候已经由编译器编译成了二进制的机器码了,执行速度快.公司项目需求变化快,类似项目超级多,不同项目的核心功能基本不变的,只是业务逻辑的变化.如果全部用C/C++实现,一方面软件版本过多,不好维护。另一方面架构做的不够好时可能会造成改一个小功能,会造成核心代码修改.然而采用C/C++加脚本的架构实现有如下优势:
为什么是Lua
目前最火的脚本语言是Python,对此Lua有如下优点:
Demo
C/C++的接口暴露给LUA:
lua_State* L;
static const struct luaL_Reg Iterface[]
{
{"send_data",LSendData}, //脚本里调用send_data字符串就可以调用到LSendData函数
{"get_rx_data",LGetRxData},
{"print",LPrint},
{"delay",LDelay},
{0,0},
};
void Lua_Init()
{
L = luaL_newstate();
luaopen_base(L);
luaL_setfuncs(L,Iterface,0);
}
Lua脚本业务代码
print('ECU功能测试')
--发送一帧数据唤醒单片机
send_data(0x431,0x30,0x32)
--延时50ms
delay(50)
--开天窗
send_data(0x38A,0x1)
delay(5000)
--关天窗
send_data(0x38A,0x1)
--ECU复位
send_data(0x880,0x11,0x1,0x67)
总结
Lua之于CAN就像html和英特网的关系一样,在新能源汽车发展如火如荼的今天,CAN的应用也越来越多,都有OTA升级的要求,Lua不仅在基于CAN系统的测试,升级方面也能够有自己的一席用武之地,在其它的Modbus之类的标准通讯也是可以使用Lua的.
全部0条评论
快来发表一下你的评论吧 !