无代码用户重放()问题

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
12个职位/ 0个新职位
最后发表
gert186
离线
最后看到:1年7个月前
加入:2016-04-21 59
无代码用户重放()问题

你好,

我用1wire编写了一个新的AT命令:

else if (user_compare_cmd(“1线”,1,2))

TM_OneWire_t噢;
Uint8_t port = ahtoi((char*)argument_array[0]);
Uint8_t port_number = port / 10;
Uint8_t pin_number =端口% 10;
uint8_t DS_ROM [8];
字符消息[8];
临时浮动;

TM_OneWire_Init(噢,(GPIO_PORT) port_number进行(GPIO_PIN) pin_number);
TM_OneWire_Reset(噢);

如果(TM_OneWire_First(噢)){
/ / Conversasion
TM_DS18B20_StartAll(噢);
systick_wait (750000);/ /等待750 ms

/*搜索下一个设备*/
{做

TM_OneWire_GetFullROM(噢,DS_ROM);
TM_DS18B20_Read(噢,DS_ROM、临时);
sprintf(消息,“% x % x % %, % 0.2 f, DS_ROM [4], DS_ROM [5], DS_ROM [6], DS_ROM[7],临时);// ds_rom [0], ds_rom [1], ds_rom [2], ds_rom [3],
/ / arch_printf (ATr +打印= % s \ r”,消息);
user_reply(消息,真的);
}, (TM_OneWire_Next(噢));

工作很好,但它我想发送的值在消息peer与user_replay(消息,真)
Void user_reply(char* reply_string, bool success)

如果(! codeless_env.suppress_response)

如果(成功)

//添加'OK'到response
如果(strlen (reply_string) > 0)
sprintf (reply_string“% s \ r \ nOK reply_string);
其他的
reply_string =“OK”;

其他的

/ /报告的错误
sprintf (reply_string,“错误”);

//如果命令来自那里,回复BT Peer(仅在连接的情况下)
if((codeless_env.command_route == CMD_FROM_PEER_RESP_PEER) && (ke_state_get(TASK_APP)==APP_CONNECTED))

send_to_peer (reply_string);

else if(codeless_env.command_route == CMD_FROM_LOCAL_RESP_LOCAL)

//通过串口进行本地回复
arch_puts (" \ r \ n ");
arch_puts (reply_string);
arch_puts (" \ r \ n ");
arch_printf_process ();

/ / codeless_env.command_route = CMD_ROUTE_UNDEFINED;

我只得到了最后一个字符串。如果我安装了10个传感器,是上一个的10倍.....

如果我取消注释//codeless_env.command_route = CMD_ROUTE_UNDEFINED;
然后我只得到第一个…

有人能帮我理解一下这个问题吗?

致以最亲切的问候
哥特

设备:
MHv_Dialog
离线
最后看到:1个月6天前
工作人员
加入:15 2013-12-06
嗨,哥特,

嗨,哥特,

请描述一下你想要完成的工作。你的代码列表本身就留下了太多的未知数:o)

具体地说,我需要了解您是否实际试图在本地发出命令,并希望回复返回到空中的对等端。另外,我需要你交换多少数据。应答字符串被限制为160个字符。

/ MHv

gert186
离线
最后看到:1年7个月前
加入:2016-04-21 59
好吧,

好吧,

我想从主人发送到奴隶:

ATr+1wire=00从附加的传感器从从(在本例中是10)开始读取,并通过空气将ID和值发送回主!
Master应该通过uart2将该值打印到终端。

命令发送和执行就像一个符咒。
但问题是,它通过空气发送一些东西到主机,但主机只打印了第一个
codeless_env.command_route = CMD_ROUTE_UNDEFINED
如果有的话,是上一个的十倍
//codeless_env.command_route = CMD_ROUTE_UNDEFINED in void user_reply(char* reply_string, bool success)。

我不明白他为什么只打印uart2上的最后一张。

致以最亲切的问候
哥特

MHv_Dialog
离线
最后看到:1个月6天前
工作人员
加入:15 2013-12-06
嗨,哥特,

嗨,哥特,

因为重复使用user_reply(),所以破坏了命令流。当接收到远程AT命令时,codelless将codeless_env.command_route设置为CMD_FROM_PEER_RESP_PEER,以确保回复返回到命令发送者。一旦回复为传输做好了准备,command_route就被设置为CMD_ROUTE_UNDEFINED,以允许接收下一个命令(通过蓝牙或UART)。

在do-while循环中,不使用user_reply(),只需将您的整个响应记录回给对等对象。然后在循环外部,使用user_reply()将整个字符串作为一个应答进行传输。这允许无代码命令流保持不变。但是记住,回复只能有160个字符长。

/ MHv

KevinL
离线
最后看到:4个月2个星期前
工作人员
加入:2017-11-06 13:52
嗨,哥特,

嗨,哥特,

请尝试在测试前关闭休眠模式。

致以最亲切的问候

gert186
离线
最后看到:1年7个月前
加入:2016-04-21 59
我应该在哪里关门

我应该在哪里关闭睡眠模式?在user_replay函数?

KevinL
离线
最后看到:4个月2个星期前
工作人员
加入:2017-11-06 13:52
在user_config.h

在user_config.h

将以下变量更改为ARCH_SLEEP_OFF。
/******************************************
*默认休眠模式。可能的值是:

*——ARCH_SLEEP_OFF
*——ARCH_EXT_SLEEP_ON
*——ARCH_EXT_SLEEP_OTP_COPY_ON

******************************************
*/
static const sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF.;/ / ARCH_EXT_SLEEP_ON;

gert186
离线
最后看到:1年7个月前
加入:2016-04-21 59
没有变化!对不起

没有变化!对不起

gert186
离线
最后看到:1年7个月前
加入:2016-04-21 59
对我来说也有一些

对我来说,还有一些问题:

在arch_printf()的1000行循环中,我不能打印超过231行。

它将在231线之后停止。

我认为这是一个检查的时间问题,还是广告的干扰?有无代码专家能帮我吗?

PM_Dialog
离线
最后看到:1天14小时前
工作人员
加入:2018-02-08 11:03
嗨gert186,

嗨gert186,

你的描述有点笼统,请提供更多的信息给我。你说的“台词”是什么意思?你是指角色吗?你能告诉我你是否正在使用任何睡眠模式配置吗?

谢谢,PM_Dialog

gert186
离线
最后看到:1年7个月前
加入:2016-04-21 59
没有关闭睡眠模式

没有关闭睡眠模式。

我打印出231倍的字符,但它应该是1000:-)字符是“1”

PM_Dialog
离线
最后看到:1天14小时前
工作人员
加入:2018-02-08 11:03
嗨gert186,

嗨gert186,

你的描述仍然很笼统。你做不到的原因有很多。您能分享一下您正在使用的代码片段吗?

谢谢,PM_Dialog