capl调用串口,调用CMD,并获取返回值

4 篇文章 0 订阅
文章讲述了作者在使用CAPL过程中遇到的挑战,如需调用RS232串口和ECU通信,自定义串口函数以提高效率。同时介绍了如何通过C调用CMD发送命令,以及存在的问题和解决方案,包括监测脚本的使用和一个示例脚本的操作方法。
摘要由CSDN通过智能技术生成

使用需要下载dll,下载方式在最下面
在使用capl的过程中,需要调用串口和ECU进行通讯,但是只找到了RS232的通讯方式(也可能我找的不仔细)。然后为了提高工作效率,自己编写了调用串口(RS232,TTL…),具体的可以自己去实践

同时,有时候需要调用ADB指令来完成部分操作,所以增加了控制CMD的函数(capl有自带函数,但是我没仔细研究,不知道能不能获取返回值,所以就自己写了)。但是实际使用中发现,每次调用此函数,都等于重新开启cmd窗口发送命令,如果有了解C调用cmd可以连续发送的,可以联系我,我进行更改。然后此项导致的问题我下面再说。

函数介绍
在这里插入图片描述

1:调用串口的指令代码

  char hahha[10000];//此项是返回读取的值,最大100000
  char writ[1000]="ps";
  char writ1[1000]="ifcongig";//要发送的命令
  write("serialPortOpen  %d", serialPortOpen(19)); //打开串口,函数返回值0代表成功,其他值失败,下同。参数代表的对应的端口号
  
  testWaitForTimeout(1000);//每次发送完毕,建议等待一段时间,我等的比较久,下同
  write("serialPortConfigure%d",serialPortConfigure(115200, 8, 1, 0)); //设置串口信息,115200波特率, 8数据位(5-8),1停止位(1:1个,2:2个,3:1.5个),0校验位(0:NOPARITY,1:ODDPARITY,2:EVENPARITY,3:MARKPARITY,4:SPACEPARITY)

  testWaitForTimeout(1000);//每次发送完毕,建议等待一段时间,我等的比较久,下同
  write("serialPortSend  %d  %s", serialPortSend(writ1),writ1);//将定义的命令进行发送,参数是字符串数组
  testWaitForTimeout(1000);
  write("serialPortRead  %d", serialPortRead(hahha));  //读取返回值,参数是字符串书组,建议设定长度要大一点,不然可能会崩溃。。另外因为我们的测试需求,read的数据会从上一次读取数据开始,所以建议执行几次send,就要read一次
  write("%s",hahha);   //将读取到的值进行打印
  
  testWaitForTimeout(1000);
  write("serialPortSend  %d  %s", serialPortSend(writ),writ);
  testWaitForTimeout(1000);
  write("serialPortRead  %d", serialPortRead(hahha));
  testWaitForTimeout(1000);
  write("%s",hahha);
  write("serialPortClose  %d", serialPortClose());//每次执行完测试后,必须要关闭串口,不然导致下次打不开,只能将工程关闭后重新打开。应该是canoe内部的设定

这个基本没啥问题

2:调用cmd指令

	char readStr[100000];//获取读取的值

    cmdSend("ls",1);      //发送cmd。参数1:char数组,发送的值;参数2:发送选择,0代表直接发送参数1,1代表发送adb shell "参数1",所以如果有引号,记得用单引号
    testWaitForTimeout(1000);
    cmdRead(readStr);//读取发送后的返回值

    write("%s",readStr);//打印返回值

这个函数有个问题注意
1:每次发送等于新建cmd(比如说,你发送一个“cd …”,应该在上一级目录,但实际下次发命令,还是在原目录,如果要调用记得加绝对路径)
2:基于1的原因,发送adb shell是没办法进入linux系统的
3:基于2,可以发送adb shell “参数” ,例如:cmdSend(“ls”,1);或者cmdSend(“adb shell \“ls\””,0);
4:基于1,3。没办法直接运行脚本,因为adb shell直接退出
5:基于4,设计了一个方案,先建立一个窗口,adb shell进去,将一个.sh文件运行起来,来检测某一个文件,当文件有数据就将读取到的数据进行运行。下面给一个shell参考,有更好的办法可以联系我的邮箱liu_xiaoshuai@foxmail.com

####################################################
# File Name: MonitoringOperation.sh
# Author: 劉小帅
# mail: https://blog.csdn.net/m0_56315547?type=blog
# Updated  Time: 2023-11-02
#########################################################################
#!/bin/sh

echo "*********Running***********"
if [ ! -f '/data/xiaoshuai/monitor.txt' ]
then
    echo "" > /data/xiaoshuai/monitor.txt
fi


while [ 1 == 1 ]; do
	readFile=$(cat /data/xiaoshuai/monitor.txt)
	if [ -z $readFile ]; then
		echo "File is empty"
	else
		echo $readFile
		eval $readFile > /data/xiaoshuai/OutputResults.txt
		cat /data/xiaoshuai/OutputResults.txt
		echo "" >  /data/xiaoshuai/monitor.txt
	fi
	sleep 1
done
exit 0

当上面的脚本运行起来后,可以cmdSend("adb shell "echo ‘/data/liunx_test’ > /data/xiaoshuai/monitor.txt “”,0)

有更新,见链接更新

对比与现在版本,可以保持在当前目录,操作方式同cmd直接操作

dll百度网盘下载地址
版本:V1.0 初版

链接:https://pan.baidu.com/s/1si68qRuNNsVkgfcdyT0WYw?pwd=ygyt
提取码:ygyt
–来自百度网盘超级会员V6的分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值