This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS:UART 自定义编解码器连续流式传输数据

Guru**** 2952510 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/955993/ccs-uart-custom-codec-streaming-data-continuously

工具/软件:Code Composer Studio

我的 javascript 知识有限、因此我不知道如何做我要实现的目标。 当我使用 USB UART 监视器协议时、很容易将 GUI 参数绑定到我的目标全局变量。 在 GUI 或目标两侧发生更改的任何内容在另一侧进行更新。 现在、我要执行相同的操作、但要使用 USB UART 自定义编解码器流协议。 我希望持续向目标发送一个二进制数据包、目标将在接收到数据包时做出响应。 例如、我要发送的数据包是来自 GUI 的参数(StartTest、SystemType、 TestType)、该参数绑定到 ti_model_streaming。 我添加了一个新的定制编解码器 JS 文件、这里是我的定制编解码器编码和解码函数:

document.addEventListener ('gC-DataBind 就绪'、function(){


CustomCodec = function(){};
CustomCodec.prototype = new gc.DataBind.IPollingPacketCodec();
CustomCodec.prototype.rxPktCtr = 0;
CustomCodec.prototype.rxMsgCtr = 0;
CustomCodec.prototype.txPktCtr = 0;
CustomCodec.prototype.txMsgCtr = 0;
CustomCodec.prototype.strRxBuffer ="";
CustomCodec.prototype.strTxBuffer ="";
CustomCodec.prototype.isConnected = false;
CustomCodec.prototype.initComplete = false;
CustomCodec.prototype.templateObj =未定义;


CustomCodec.prototype.encode =函数(target、jsonObj){
thed.txPktCTL++;


尝试{
此.txMsgCtr ++;
if (this.txMsgCtr % 256){
gc.console.log ("CustomCodec"、"要发送到目标的 TX 消息数:"+this.txMsgCtr);
}

VAR dataToSend =[];//json.Stringify (jsonObj)+"\n";
dataToSend.PUSH (0x55);//startbyte
dataToSend.PUSH (jsonObj.StartTest);
dataToSend.PUSH (jsonObj.SystemType);
dataToSend.PUSH (jsonObj.TestType);


//将字符串发送到目标
目标(dataToSend);
} 获取(例如){
console.log ("CustomCodec.encode (到目标):exception="+ ex);
}

};

CustomCodec.prototype.decode =函数(目标、数据){
isconnected = true;
the.rxPktCTR++;


VAR StartByte = DATA[0];
var jsonObj ={
循环计数器:DATA[1]、
StartTest:Data[2]、
DataReciped:Data[3]
}

目标(jsonObj);

//返回 true 以在状态栏中设置“硬件已连接”状态
返回此.isconnected;

}; 

我可以将数据包发送到我的目标、但我遇到了牵引问题。

首先、当我单击 GUI 上的某个内容时、数据包才会被发送。 我猜这是因为编码函数位于事件侦听器 document.addEventListener ('GC-DataBind 就绪'、function()内,该函数会对某些 GUI 事件作出反应。 但是、如何在1ms 的间隔内持续发送独立于 GUI 事件的数据包呢?

其次、当数据包被发送时、只有改变的参数值(点击)被发送到我的目标、其他参数在我的调试观察窗口和目标上显示"未定义"。

换言之、我要将 GUI 中的所有绑定参数同步发送到目标、目标将进行响应。 接收到的数据我想再次绑定到 GUI 并显示。 我该怎么做?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Albert、

    UART 监控器是一种轮询模型、GC 框架运行在循环上、以从主机到目标读取目标变量。 另一方面、UART 流是一种推送模型、需要将数据从目标推送到主机。

    [引用用户="Albert Smit23"]

    首先、当我单击 GUI 上的某个内容时、数据包才会被发送。 我猜这是因为编码函数位于事件侦听器 document.addEventListener ('GC-DataBind 就绪'、function()内,该函数会对某些 GUI 事件作出反应。 但是、如何在1ms 的间隔内持续发送独立于 GUI 事件的数据包呢?

    [/报价]

    您可以使用 setInterval API 将数据从主机持续推送到目标。  请参阅 www.w3schools.com/.../met_win_setinterval.asp

    [引用用户="Albert Smit23"]

    其次、当数据包被发送时、只有改变的参数值(点击)被发送到我的目标、其他参数在我的调试观察窗口和目标上显示"未定义"。

    换言之、我要将 GUI 中的所有绑定参数同步发送到目标、目标将进行响应。 接收到的数据我想再次绑定到 GUI 并显示。 我该怎么做?

    [/报价]
    如果 GC 检测到有界变量的任何更改、则调用编码函数。 要执行批处理操作、请在解码函数中缓存变量的最后已知值。 在编码函数中、用新值覆盖缓存的值。 并将所有缓存值发送到目标。
    此致、
    Patrick