大家好,
我现在的DA14580 BLE模块与SDK 5.0.4工作,我无法通过arch_printf命令发送0。
当发送0时,FW跳转到hardfault_handler.c文件,以线141,呆在那里。
如果((GetWord16(SYS_STAT_REG)DBG_IS_UP)== DBG_IS_UP)
__asm( “BKPT#0 \ n”);
任何帮助将是巨大的。
关键词:
设备:
嗨YehudaNovodes,
我试图复制你提到的问题,但我能够通过arch_printf()发送“0”。我在SDK 5.0.4的ble_app_barebone例子中工作,我使用的是Pro-DK。我来描述一下我做了什么确保你们做了相同的构型。
#elif指令HW_CONFIG_PRO_DK
#定义UART2_TX_GPIO_PORT GPIO_PORT_0
#定义UART2_TX_GPIO_PIN GPIO_PIN_4
#定义UART2_RX_GPIO_PORT GPIO_PORT_0
#定义UART2_RX_GPIO_PIN GPIO_PIN_5
如果你有一个死亡骑士我们其他,或者如果你是在一个定制的开发板,请用适当的GPIO修改上述定义
如果我理解任何错误,请让我知道你要完成或提供给我烫调用arch_printf()到你的代码是什么。
谢谢,PM_DIALOG.
对不起,我不是足够清晰。
是的,我可以通过arch_printf发送0。
问题是,当我试图呼应了UART输入。如果插入其中一个字节是0×00,那么当我试图打印持有该字节数组中的元素,我得到这个错误。我认为,原因是0不考虑作为一个“值”,所以,当我试图打印,它无法找到打印,因此错误。
我又检查了一下这个问题,我想我确定现在的问题是什么。
我使用arch_printf函数打印数组。例如,如果数组的内容是:
ExampleArr [2] = {0×01,0×02};
我想逃跑
arch_printf(ExampleArr);
打印出来是01,02这正是我想要的。问题开始时ExampleArr的第一个元素是0×00,则SW运行成
如果((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值,而不是符号…
嗨YehudaNovodes,
您能试一下这段代码吗?
uint8_t ExampleArr[3] = {0x00, 0x01, 0x02};
对于(uint8_t I = 0; I <3; i ++在)
{
arch_printf( “%X”,ExampleArr [I]);
}
arch_printf( “\ n \ r”);
否则,请提供您的代码片段,因为您正在使用它到您的固件。
谢谢,PM_DIALOG.
你好,
正如我所提到的,arch_printf函数获取阵列由地址arch_printf(ExampleArr),而不是由值arch_printf(ExampleArr [I])进行打印。为了更清楚,如果我有一个名为ExampleVar = 0×01的变量,然后写arch_printf(&ExampleVar)被1结束,印刷在终端,但如果ExampleVar = 0x00,则arch_printf(&ExampleVar),误差结束!!
我没有使用您的方法的原因是输出的值不是实际值,而是它的ASCII兼容。所以,如果我回到我之前的例子,这是它在两种情况下的样子:
1)
ExampleVar = 0×01;
arch_printf(&ExampleVar);
打印出来的是:1
ExampleVar = 0×00;
arch_printf(&ExampleVar);
打印出来的是:错误
2)
ExampleVar = 0×01;
arch_printf( “%X”,ExampleVar);
打印出来的是:31
ExampleVar = 0×00;
arch_printf( “%X”,ExampleVar);
打印出来的是:30
我真希望问题现在已经弄清楚了。
嗨YehudaNovodes,
很抱歉耽搁了。我试图测试您的代码,这段代码片段arch_printf(&ExampleVar)不能由Keil构建。这是一个相当奇怪的情况,因为如果我理解正确,这可以从你的方面构建。而且,我的结果和你的不一样。请查看以下内容:
ExampleVar = 0×01;
arch_printf( “%X”,ExampleVar);
输出结果为:1(而不是31,它是ASCII字符1)
ExampleVar = 0×00;
arch_printf( “%X”,ExampleVar);
打印出的是:0(和NOT 30为0的ASCII字符)
能否请你让我知道如果你已经修改了arch_printf()函数的源代码?能否请你尝试做相同的一个新的SDK路径?请注意,我用的D14580系列的最新SDK(SDK5.0.4)
谢谢,PM_DIALOG.
你好,
不,我还没有在所有修改arch_prinf的源代码。
但我有一个更好的解决办法。打印数组的值在任何位置,我只是使用了uart2_write (arr *,大小,NULL)函数,当* arr打印数组的指针,印刷尺寸大小,以字节为单位,和零是空指针,需要描述的功能。
嗨YehudaNovodes,
既然你没有修改arch_prinf()函数,这是一个有点怪,因为我从你的不同结果。顺便说,很高兴你想通您的问题出来,那你的指示。
谢谢,PM_DIALOG.
亲爱的论坛专家,
我正在使用sdk5.0.4开发DA14580。
我想知道如何主机接收来自从SMP请求。
我跑我的代码,在下方附上,嗅出奴隶,但有在用户功能没有回调。
现在看来,这是无效的?
主机如何接收来自从SMP请求?
由于advcance,
狄俄尼索斯
嗨狄俄尼索斯,
谢谢你的问题,但它与这个论坛线程无关。如果我理解正确的话DA14580是一个中心。由于您是中心服务器,因此不能向外设请求安全性。如果您有任何其他后续问题,请创建一个新的论坛线程。如果你不知道如何创建一个新的论坛帖子,请让我知道,我会为你提供适当的步骤。
谢谢,PM_DIALOG.
嗨YehudaNovodes,
你可以试试我的代码,它可以发送十六进制,如下:
的extern空隙uart_callback(uint8_t RES);
uint8_t数据= 0×00;
uart2_write(数据,1,uart_callback);
嗨chenpenglai,
谢谢你的指点。
问候,PM_DIalog