4个职位/0个新职位
最后一篇文章
六銮002
离线
最后一次见到:5个月4周前
已加入:2015-11-27 14:24
通过UART发送

嗨,对话,

我正在申请继续扫描,而且我需要把扫描的包裹拉进UART。当我通过UART发送时,恐怕我会使扫描暂时被阻塞。有什么方法可以让我通过UART查询出我得到的包而不阻塞扫描过程吗?

我把一些代码放在这里:

无效应用程序扫描2(无效)
{
struct gapm\u start\u scan\u cmd*cmd=KE\u MSG\u ALLOC(gapm\u start\u scan\u cmd,
任务\u GAPM,任务\u APP,
gapm(启动扫描命令);

cmd->op.code=GAPM\u SCAN\u PASSIVE;
命令->间隔=12288//6000毫秒
命令->窗口=12288//6000毫秒
cmd->mode=GAP\u GEN\u发现;
cmd->filt\u policy=SCAN\u ALLOW\u ADV\u ALL;
cmd->filter\u duplic=SCAN\u FILT\u duplic\u DIS;

发送消息(cmd);

}

int gapm\u adv\u report\u ind\u handler(ke\u msg\u id\u t msgid,
结构gapm\u adv\u report\u ind*参数,
keu任务id\u目标id,
ke\ U任务id\ t src\ U id)
{

volatile struct adv\u report adv=param->报告;

for(无符号字符i=0;i<6;i++)
{
白色地址1[i]=高级地址[i];
}

uart2_init(UART_波特率_115K2,3);

for(无符号字符i=0;i<6;i++)
{
printf_byte(adv.adv_addr.addr[5-i]);
uart2_init(UART_波特率_115K2,3);
}

uart2_init(UART_波特率_115K2,3);

对于(int j=0;j{
打印字节(adv.data[j]);
uart2_init(UART_波特率_115K2,3);
}

打印字符串(“”);
uart2_init(UART_波特率_115K2,3);

返回(已消耗的消息);
}
}

设备:
MT\u对话框
离线
最后一次见到:2个月2周前
工作人员
已加入:2015-06-08 11:34
你好,刘銮002,

你好,刘銮002,

您可以使用arch\u printf()函数,而不是直接使用printf函数,后者实际上直接使用UART。

您可以在最新的SDK中通过定义CFG\u printf定义来启用arch\u printf()函数,检查UART端口是否是您所连接的端口,并包括您要在其中使用arch\u printf()函数的arch\u console.h文件。

谢谢你的对话

六銮002
离线
最后一次见到:5个月4周前
已加入:2015-11-27 14:24
嗨,对话,

嗨,对话,
我正试图利用你的建议从UART中轮询出一个数组。
但是,每次调用函数arch_printf(“%c”,package_send[j]);,系统都会重新启动。你对如何解决这个问题有什么建议吗?
我的代码:
无符号字符包发送[133];
for(无符号字符j=0;j

MT\u对话框
离线
最后一次见到:2个月2周前
工作人员
已加入:2015-06-08 11:34
你好,刘銮002,

你好,刘銮002,

我想你的意思是你想打印出这个数组的数据。如果您的设备最终处于wrap\u platform\u reset状态,这意味着您的内存不足,那么您将打印大量数据,并为正在打印的每个字符分配一条额外的消息,而不使用它(打印它,因为实际打印是在调用arch\u printf\u进程时进行的)。尝试以较小的块打印数组元素,以便在调用schedule\u while\u ble\u on()时调用arch\u printf\u process()函数,并在输入其他数据之前打印数据。

谢谢你的对话