无编码用户重放()问题

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

你好,

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

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

TM_OneWire_t噢;
Uint8_t port = ahtoi((char*)argument_array[0]);
port_number = port / 10;
Uint8_t pin_number = port % 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(消息,true)
无效user_reply(char* reply_string, bool success)

如果(! codeless_env.suppress_response)

如果(成功)

//添加'OK'到响应
如果(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
离线
最后看到:3个月4天前
工作人员
加入:15 2013-12-06
嗨,哥特,

嗨,哥特,

请描述一下你想完成的任务。你的代码清单本身就留下了太多的未知数:o)

具体来说,我需要了解的是,您是否真的试图在本地发出命令,并希望通过无线电将应答返回给对等体。此外,我将需要多少数据您试图交换。回复字符串的长度限制为160个字符。

/ MHv

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

好吧,

我想从主人那里给奴隶说:

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

命令发送和执行非常有效。
但问题是它发送了一些东西给master但是master只打印第一个
codeless_env.command_route = CMD_ROUTE_UNDEFINED 1次
如果有的话,是最后的十倍
// codeess_env .command_route = CMD_ROUTE_UNDEFINED in void user_reply(char* reply_string, bool success)

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

致以最亲切的问候
哥特

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

嗨,哥特,

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

在do-while循环中,不要使用user_reply(),只需将整个响应记录回给对等体。然后在循环外部,使用user_reply()将整个字符串作为一个回复传输。这允许CodeLess命令流保持完整。但是请记住,回复的长度只能是160个字符。

/ MHv

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

嗨,哥特,

请在测试前关闭睡眠模式。

致以最亲切的问候

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

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

KevinL
离线
最后看到:1个月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年4个月前
加入:2016-04-21 59
没有变化!对不起

没有变化!对不起

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

对我来说也有一些问题:

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

它会停在231线之后。

我认为这是一个时间问题检查或中断广告?有什么无代码专家可以帮助我吗?

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

嗨gert186,

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

谢谢,PM_Dialog

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

没有睡眠模式被关闭。

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

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

嗨gert186,

你的描述还是很笼统。你不能那样做的原因有很多。您可以分享您正在使用的代码片段吗?

谢谢,PM_Dialog