上位机合并新库,优化boot速度

This commit is contained in:
sunbeam 2024-11-11 14:28:49 +08:00
parent 3d81a0d86a
commit 7b5f66c953
2 changed files with 115 additions and 9 deletions

View File

@ -55,6 +55,25 @@ namespace usb2canfd{
BYTE CAN_TXFP; //发送优先级管理0-标识符决定1-发送请求顺序决定
}
class CAN_FILTER_CONFIG{
ctor( /*输入构造函数所需要的参数*/ ){
};
type=me;
/*对象的所有成员必须用分号分隔*/
BYTE Enable; //使能该过滤器1-使能0-禁止
BYTE FilterIndex; //过滤器索引号取值范围为0到13
BYTE FilterMode; //过滤器模式0-屏蔽位模式1-标识符列表模式
BYTE ExtFrame; //过滤的帧类型标志为1 代表要过滤的为扩展帧为0 代表要过滤的为标准帧。
INT ID_Std_Ext; //验收码ID
INT ID_IDE; //验收码IDE
INT ID_RTR; //验收码RTR
INT MASK_Std_Ext; //屏蔽码ID该项只有在过滤器模式为屏蔽位模式时有用
INT MASK_IDE; //屏蔽码IDE该项只有在过滤器模式为屏蔽位模式时有用
INT MASK_RTR; //屏蔽码RTR该项只有在过滤器模式为屏蔽位模式时有用
}
//CANfd信息帧的数据类型定义
class CANFD_MSG{
ctor( /*输入构造函数所需要的参数*/ ){
@ -186,11 +205,49 @@ namespace usb2canfd{
return ret,DeviceInfo,funcstr;
}
//获取设备信息
GetNowInfo = function(){
if(Hwconnected == null){
return 0;
}
//DllHandle.USB_OpenDevice(Hwconnected);
var DeviceInfo = ..usb2canfd.DEVICE_INFO();
var funcstr = ..raw.buffer(100);
var ret = DllHandle.DEV_GetDeviceInfo(Hwconnected,DeviceInfo,funcstr);
return ret,DeviceInfo,funcstr;
}
//获取有效硬件
GetAvailableHW = function(){
return AvailableHW;
}
SetFilter = function(index){
CANFilter = ..usb2canfd.CAN_FILTER_CONFIG();
CANFilter.FilterIndex = 0;
CANFilter.Enable = 1;
CANFilter.ExtFrame = 0; //需要过滤接收的帧为标准帧
CANFilter.FilterMode = 1;//标识符列表模式
CANFilter.ID_IDE = 0; //接收到的数据帧IDE必须为1也就是必须为扩展帧数据
CANFilter.ID_RTR = 0; //接收到的帧类型必须为数据帧
CANFilter.ID_Std_Ext = 0x620;//接收到的帧ID必须等于CANFilter.ID_Std_Ext设置的值
var ret = DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
CANFilter.FilterIndex = 1;
CANFilter.ID_Std_Ext = 0x610;
var ret = DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
for(i=2;13;1){
CANFilter.FilterIndex = i;
CANFilter.Enable = 0;
DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
}
}
//打开设备,包括初始化通道
OpenDevice = function(index,channel,canfd){
if(index > HwNum)
@ -227,7 +284,7 @@ namespace usb2canfd{
canconfig.CAN_Mode = 0x80;//0-正常模式 1-环回模式 0x80终端电阻
canconfig.CAN_ABOM = 0;//禁止自动离线
canconfig.CAN_NART = 1;//禁止报文重传
canconfig.CAN_NART = 0;//禁止报文重传
canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文
canconfig.CAN_TXFP = 1;//发送请求决定发送顺序
//配置波特率,波特率 = 42M/(BRP*(SJW+BS1+BS2))
@ -237,6 +294,7 @@ namespace usb2canfd{
canconfig.CAN_SJW = 2;
ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig);
//console.log("init ret = " + ret);
this.SetFilter(index);
}
canfd_connected = canfd;
@ -246,7 +304,7 @@ namespace usb2canfd{
}
else {
Hwconnected = null
//Hwconnected = null
Chconntected = null;
}
@ -349,14 +407,22 @@ namespace usb2canfd{
else {
//CAN
do{
var msgbuf = ..usb2canfd.CAN_MSG();
ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf,1);
//raw.convertArray(raw.sizeof(..usb2canfd.CAN_MSG())
var msgbuf = {};
for(i=1;10;1){
//msgbuf.push(new ..usb2canfd.CAN_MS())
var temp = ..usb2canfd.CAN_MSG()
..table.push(msgbuf,temp);
}
//var msgbuf = ..raw.toarray(10,"struct",..usb2canfd.CAN_MS);
ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf[1],1);
if(ret == 1){
var data = {};
for(i=1;msgbuf.DataLen;1){
data[i] = msgbuf.Data[i];
for(i=1;msgbuf[1].DataLen;1){
data[i] = msgbuf[1].Data[i];
}
var msg = {"id"=msgbuf.ID;"data"=data;};//
var msg = {"id"=msgbuf[1].ID;"data"=data;};//
..table.push(retdata,msg);
}
}while(ret > 0)
@ -388,6 +454,19 @@ namespace usb2canfd{
return ret,2,res_data;
}
SetPower = function(state){
var ret = DllHandle.LIN_EX_CtrlPowerOut(Hwconnected,state);
return ret;
}
GetPower = function(){
var buf = ..raw.buffer(10);
var ret = DllHandle.LIN_EX_GetVbatValue(Hwconnected,buf);
return ret,buf;
}
}

View File

@ -93,6 +93,20 @@ FuncLoopMsg = function(msg){
}
var delay_const = 100000;
DelayTest = function(){
import time.performance;
var tk = time.performance.tick();
for(i=1;1000000;1)
{
}
var tk2 = time.performance.tick();
tk2 = tk2 - tk;
delay_const = math.ceil(1000000*(1/tk2));
FuncDisplay(delay_const);
//console.log(delay_const);
}
FuncFreshHw = function(){
@ -194,20 +208,31 @@ FuncStartBoot = function(){
stopflag = 0;
}
var delay = function(w){
while(w){
for(i=1;delay_const;1)
{
}
w -= 1;
}
}
var PackNext = 0x21;
var Packdata = {};
var PackID = 0;
var FuncSendPackage = function(){
while(#Packdata > 0)
{
//sleep(0.3);
//sleep(1);
delay(1);
var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC};
var max = #Packdata > 7 ? 7 : #Packdata;
for(i=1;max;1){
data[i+1] = table.remove(Packdata);
}
//sleep(0.3);
CANHw.SendMsg(PackID,data);
sleep(0.1);
PackNext += 1;
if(PackNext > 0x2f){
PackNext = 0x20;
@ -289,3 +314,5 @@ timer1.enable();
FuncDisplay("正在运行");
DelayTest();