⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
13个员额/0个新员额
最后一篇文章
耶胡达诺沃德斯
离线
最后一次见到:2年7个月前
加入:2018-11-11 38
通过UART发送0

大家好,

我现在正在使用SDK 5.0.4处理DA14580 BLE模块,无法通过arch_printf命令发送0。
发送0时,FW跳转到第141行的hardfault_handler.c文件并停留在那里。
if((GetWord16(SYS\u STAT\u REG)&DBG\u向上)==DBG\u向上)
__asm(“BKPT#0\n”);

任何帮助都会很好。

关键词:
设备:
PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
嗨,耶胡达诺沃德斯,

嗨,耶胡达诺沃德斯,

我试图复制你提到的问题,但我能够通过arch_printf()发送“0”。我在SDK 5.0.4的ble_app_barebone例子中工作,我使用的是Pro-DK。我来描述一下我做了什么确保你们做了相同的构型。

  1. #在da1458x_config_basic.h中定义CFG_PRINTF
  2. 更改fw的uart端口,并将uart_TX端口/引脚分配给P04,将uart_RX端口/引脚分配给P05(确保您所更改的配置位于HW_CONFIG_PRO_DK下,并且该板在HW_CONFIG定义中声明)。

#elif HW_配置_PRO_DK

#定义UART2\U TX\U GPIO\U端口GPIO\U端口0

#定义UART2_TX_GPIO_PIN GPIO_PIN_4

#定义UART2\U RX\U GPIO\U端口GPIO\U端口0

#定义UART2\U RX\U GPIO\U引脚GPIO\U引脚5

如果您有我们的另一个DK,或者您在定制板上工作,请使用适当的GPIO修改上述定义

  1. 将arch_console.h文件包括到user_barebone.c中
  2. 调用arch_printf(“0”);进入adv_data_update_timer_cb()函数。因此,我每10秒发送一次“0”。
  3. 修改终端波特率为115200。

如果我理解错了什么,请告诉我您想要完成什么,或者提供给我热调用arch_printf()到您的代码中。

谢谢,下午好

耶胡达诺沃德斯
离线
最后一次见到:2年7个月前
加入:2018-11-11 38
抱歉我没说清楚

抱歉说得不够清楚。

是的,我可以通过arch_printf发送0。
问题是当我试图通过UART回显输入时。如果插入的其中一个字节是0x00,那么当我试图打印包含该字节的数组的元素时,就会出现此错误。我认为原因是0不认为是“值”,所以当我试图打印它时,它找不到打印的东西,因此错误。

耶胡达诺沃德斯
离线
最后一次见到:2年7个月前
加入:2018-11-11 38
我检查了一下这个问题

我又检查了一下这个问题,我想我确定现在的问题是什么。

我使用arch_printf函数打印数组。例如,如果数组的内容是:

示例arr[2]={0x01,0x02};

我想逃跑

arch_printf(示例arr);

打印出来的是01,02,这正是我想要的。当ExampleArr的第一个元素为0x00时,问题开始出现,然后软件运行到

if((GetWord16(SYS\u STAT\u REG)&DBG\u向上)==DBG\u向上)
__asm(“BKPT#0\n”);

错误。
如果第二个元素是0x00,则没有问题。
当我试图使用arch_printf打印0像这样:

ExampleVar=0;
arch_printf(“%x”,示例变量);

没有错误,但实际上打印的是ASCII值0,也就是30。我需要打印0值,而不是符号…

PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
嗨,耶胡达诺沃德斯,

嗨,耶胡达诺沃德斯,

您能试一下这段代码吗?

uint8_t ExampleArr[3] = {0x00, 0x01, 0x02};

对于(uint8_t i=0;i<3;i++)

{

arch_printf(“%x”,示例arr[i]);

}

arch_printf(“\n\r”);

否则,请提供您的代码片段,因为您正在使用它到您的固件。

谢谢,下午好

耶胡达诺沃德斯
离线
最后一次见到:2年7个月前
加入:2018-11-11 38
你好

你好

正如我提到的,arch_printf函数通过地址arch_printf(ExampleArr)而不是值arch_printf(ExampleArr[I])获取要打印的数组。更清楚地说,如果我有一个名为ExampleVar=0x01的变量,那么写入arch\u printf(&ExampleVar)的结果是1,打印在终端上,但如果ExampleVar=0x00,则arch\u printf(&ExampleVar)的结果是错误!!

我没有使用您的方法的原因是输出的值不是实际值,而是它的ASCII兼容。所以,如果我回到我之前的例子,这是它在两种情况下的样子:
1)
ExampleVar=0x01;
arch_printf(&ExampleVar);
打印输出为:1

ExampleVar=0x00;
arch_printf(&ExampleVar);
打印出来的是:错误

2)
ExampleVar=0x01;
arch_printf(“%x”,示例变量);
打印日期:31

ExampleVar=0x00;
arch_printf(“%x”,示例变量);
打印日期:30

我真希望问题现在已经弄清楚了。

PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
嗨,耶胡达诺沃德斯,

嗨,耶胡达诺沃德斯,

很抱歉耽搁了。我试图测试您的代码,这段代码片段arch_printf(&ExampleVar)不能由Keil构建。这是一个相当奇怪的情况,因为如果我理解正确,这可以从你的方面构建。而且,我的结果和你的不一样。请查看以下内容:

ExampleVar=0x01;

arch_printf(“%x”,示例变量);

输出结果为:1(而不是31,它是ASCII字符1)

ExampleVar=0x00;

arch_printf(“%x”,示例变量);

打印输出为:0(而不是0的ASCII字符30)

如果您修改了arch_printf()函数的源代码,请告诉我?您可以尝试在新的SDK路径中执行相同的操作吗?请注意,我使用的是D14580系列(SDK5.0.4)的最新SDK

谢谢,下午好

耶胡达诺沃德斯
离线
最后一次见到:2年7个月前
加入:2018-11-11 38
你好

你好

不,我根本没有修改你的arch_prinf源代码。
但我有一个更好的解决办法。打印数组的值在任何位置,我只是使用了uart2_write (arr *,大小,NULL)函数,当* arr打印数组的指针,印刷尺寸大小,以字节为单位,和零是空指针,需要描述的功能。

PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
嗨,耶胡达诺沃德斯,

嗨,耶胡达诺沃德斯,

因为您没有修改arch_prinf()函数,所以有点奇怪,因为我得到的结果与您的不同。顺便说一句,很高兴你解决了你的问题,这是你的指示。

谢谢,下午好

酒神
离线
最后一次见到:2年6个月前
加入:2019-01-13 14:48
亲爱的论坛专家,

亲爱的论坛专家,
我正在使用sdk5.0.4开发DA14580。

我想知道主机如何从从机接收SMP请求。
我已经运行了我的代码,在下面附加,嗅探从机,但是在用户函数中没有回调。
好像是无效的?

主机如何从从机接收SMP请求?

由于advcance,
酒神

PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
嗨,狄俄尼索斯,

嗨,狄俄尼索斯,

谢谢你的问题,但它与这个论坛线程无关。如果我理解正确的话DA14580是一个中心。由于您是中心服务器,因此不能向外设请求安全性。如果您有任何其他后续问题,请创建一个新的论坛线程。如果你不知道如何创建一个新的论坛帖子,请让我知道,我会为你提供适当的步骤。

谢谢,下午好

陈蓬莱
离线
最后一次见到:6个月1周前
加入:2018-12-24 02:24
嗨YehudaNovodes,

嗨YehudaNovodes,

你可以试试我的代码,它可以发送十六进制,如下:

外部无效uart_回调(uint8_t res);

uint8_t数据=0x00;

uart2_写入(和数据,1,uart_回调);

PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
陈蓬莱你好,,

陈蓬莱你好,,

谢谢你的指点。

问候,PM_DIalog