⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
13个员额/ 0个新员额
最后发表
YehudaNovodes
离线
最后看到:2年7个月前
加入:2018-11-11 12:38
通过UART发送0

你好,

我现在使用SDK 5.0.4在DA14580 BLE模块上工作,我不能通过arch_printf命令发送0。
当发送0时,FW跳转到hardfault_handler.c文件到第141行并保持不变。
if ((GetWord16(SYS_STAT_REG) & DBG_IS_UP) == DBG_IS_UP
__asm(“BKPT # 0 \ n”);

任何帮助都会很好。

关键词:
设备:
PM_Dialog
离线
最后看到:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨YehudaNovodes,

嗨YehudaNovodes,

我试图复制您提到的问题,但我能够通过arch_printf()发送“0”。我开发了SDK 5.0.4的ble_app_barebone示例,并使用了Pro DK。让我描述一下我做了什么,并确保您已经完成了相同的配置。

  1. #在da1458x_config_basic.h中定义CFG_PRINTF
  2. 修改fw的uart端口,将UART_TX端口/pin配置为P04,将UART_RX端口/pin配置为P05(要确保修改的配置在HW_CONFIG_PRO_DK下,且该单板在HW_CONFIG定义中声明)。

# elif HW_CONFIG_PRO_DK

#定义UART2_TX_GPIO_PORT GPIO_PORT_0

#定义UART2\U TX\U GPIO\U引脚GPIO\U引脚4

#定义UART2_RX_GPIO_PORT GPIO_PORT_0

#定义UART2_RX_GPIO_PIN GPIO_PIN_5

如果您有我们的其他DKs,或者您正在使用自定义板,请使用相应的gpio修改上述定义

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

如果我理解错了什么,请让我知道你试图完成或提供我热调用arch_printf()到你的代码。

谢谢,PM_Dialog

YehudaNovodes
离线
最后看到:2年7个月前
加入:2018-11-11 12:38
抱歉说不清楚

很抱歉我讲得不够清楚。

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

YehudaNovodes
离线
最后看到:2年7个月前
加入:2018-11-11 12:38
我检查了一下这个问题

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

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

ExampleArr[2] = {0x01, 0x02};

我试着跑:

arch_printf (ExampleArr);

打印出来的是01,02,这正是我想要的。当ExampleArr的第一个元素是0x00时,问题就开始了,然后SW会遇到

if ((GetWord16(SYS_STAT_REG) & DBG_IS_UP) == DBG_IS_UP
__asm(“BKPT # 0 \ n”);

错误。
如果第二个元素是0x00,则没有问题。
当我尝试使用arch_printf打印0时,如下所示:

ExampleVar = 0;
arch_printf(“% x”,ExampleVar);

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

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

嗨YehudaNovodes,

你能试试这段代码吗?

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

For (uint8_t I = 0;我< 3;我+ +)

arch_printf(“% x”,ExampleArr[我]);

arch_printf (" \ n \ r ");

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

谢谢,PM_Dialog

YehudaNovodes
离线
最后看到:2年7个月前
加入:2018-11-11 12:38
你好,

你好,

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

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

ExampleVar = 0 x00;
arch_printf (&ExampleVar);
打印输出为:错误

2)
ExampleVar = 0 x01;
arch_printf(“% x”,ExampleVar);
打印出来的是:31

ExampleVar = 0 x00;
arch_printf(“% x”,ExampleVar);
打印出来的是:30

我真的希望问题现在清楚了。。。

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

嗨YehudaNovodes,

对耽搁表示歉意。我试着测试你的代码,这个代码片段arch_printf(&ExampleVar)不能由Keil生成。这是一个非常奇怪的情况,因为如果我理解正确,这可以从你这边建立。而且,我的结果和你的不同。请检查以下内容:

ExampleVar = 0 x01;

arch_printf(“% x”,ExampleVar);

打印输出为:1(而不是1的ASCII字符31)

ExampleVar = 0 x00;

arch_printf(“% x”,ExampleVar);

输出结果为:0(而不是ASCII字符0的30)

请问您是否修改了arch_printf()函数的源代码?你能试着在一个新的SDK路径做同样的事吗?请注意,我使用的是D14580系列的最新SDK (SDK5.0.4)

谢谢,PM_Dialog

YehudaNovodes
离线
最后看到:2年7个月前
加入:2018-11-11 12:38
你好,

你好,

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

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

嗨YehudaNovodes,

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

谢谢,PM_Dialog

狄俄尼索斯
离线
最后看到:2年6个月前
加入:2019-01-13 48
尊敬的论坛专家们:,

尊敬的论坛专家们:,
我正在使用sdk5.0.4开发DA14580。

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

主机如何接收从服务器的SMP请求?

谢谢你的建议,
狄俄尼索斯

PM_Dialog
离线
最后看到:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨,狄俄尼索斯,

嗨,狄俄尼索斯,

谢谢你的提问,但这与本论坛帖子无关。如果我理解正确的话,DA14580将充当中央处理器。由于您是中央计算机,因此无法从外围计算机请求安全性。如果您有任何其他后续问题,请创建一个新的论坛线程。如果你不知道热创建一个新的论坛线程,请让我知道,我会为你提供适当的步骤。

谢谢,PM_Dialog

chenpenglai
离线
最后看到:6个月1个星期前
加入:2018-12-24 02:24
嗨,耶胡达诺沃德斯

嗨,耶胡达诺沃德斯

您可以尝试我的代码,它可以发送十六进制,如下所示:

Extern void uart_callback(uint8_t res);

uint8_t数据= 0 x00;

uart2_write(平1 uart_callback);

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

嗨chenpenglai,

谢谢你的提示。

你好,下午好