DA14681中的监视时间段

22帖子/ 0新
最后发表
jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
DA14681中的监视时间段

嗨对话框,
我没有找到DA14681 SDK中设置手表狗周期的参数。
如果没有通知,观看狗的时间会过期多久?
通过UART与外围设备通信(发送数据并等待一些数据返回)是一项耗时较长的任务。

谢谢

关键词:
设备:
MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

这将在UM-B-044-DA1468x软件平台参考文档中记录,请查看第8.6段看门狗服务。关于第二个问题,我不确定我得到它的SDK有一个操作系统,它不会在等待某些东西时停止,除非被指示这样做。

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨对话框,

嗨对话框,
我检查了UM-B-044的9.6段,默认的监控周期是2.6秒。
我无法确认看门狗和我的UART输出函数之间的关系,因为以下类似的代码:
//------------------------------------------
if(notef&hrs_timer_notif){//我在这里测试UART,每1次突破一次
UART1DEV = AD_UART_OPEN(SERIAL1);

if(uart1dev){
http_len = http_postpkt(uart1_buf,api_key,dev_id,“温度”,“24.5”);//此函数填充UART1_BUF,具有特定参数(* char),缓冲长度= 1024和我的测试字符串长度= 150字节。
// printf(“%s”newline,uart1_buf);// < - 这个Printf Fuction工作正常
AD_UART_WRITE(UART1DEV,UART1_BUF,HTTP_LEN);// !!!< - 这将导致操作后2次任务后重置
}别的{
Printf(“UART1设备打开失败”换行符);

ad_uart_close(Uart1dev);

.........
//-------------------------------------------------
'printf'和'ad_uart_write'是什么不同的?
我对UART的定义如下:
//---------------------------------------------
#if dg_configuart_adapter

hw_uart_bus (uart1, serial1, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none, hw_uart_bus, serial1, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none,
hw_uart_stopbits_1,0,0, hw_dma_channel_1, hw_dma_channel_0,0,0)

hw_uart_bus (uart2, serial2, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none, hw_uart_bus, serial2, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none,
HW_UART_STOPBITS_1,0,1,HW_DMA_CHANNEL_3,HW_DMA_CHANNEL_2,0,0)

#endif / * dg_configuart_adapter * /
// -----------------------------------------

注意:'printf'()'使用UART2作为默认值,我使用UART(UART1)作为我的UART输出端口。(硬件引脚P1.0和P1.4)

//-------------------------------
// p10 = tx1,p14 = rx1
hw_gpio_configure_pin(hw_gpio_port_1,hw_gpio_pin_4,hw_gpio_mode_output,
hw_gpio_func_gpio,1);

hw_gpio_set_pin_function(hw_gpio_port_1,hw_gpio_pin_0,hw_gpio_mode_output,
HW_GPIO_FUNC_UART_TX);
hw_gpio_set_pin_function(hw_gpio_port_1,hw_gpio_pin_4,hw_gpio_mode_output,
hw_gpio_func_uart_rx);

//---------------------------------

我是不是错过了什么重要的事情?

谢谢

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨对话框,

嗨对话框,
你在吗?
我需要同时使用UART1 / UART2的示例代码。
HRP_Sensor使用UART2 for printf(),我尝试使用UART1(UART)来输出字符串但失败。

我不知道通过UART1(AD_UART_WRITE)发送字符串时会发生什么,使系统重置。
如何调试此问题(重置)?

谢谢

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

我没有看到任何错误的配置

关于打印问题,我使用HRP_Sensor进行了以下测试,并在没有定义的监视程序的情况下运行。

在periph_init()函数中添加了以下两行,以便为UART设置适当的引脚,并使用以下定义以使用UART2进行printf功能:

hw_gpio_set_pin_function(hw_gpio_port_1,hw_gpio_pin_2,hw_gpio_mode_output,hw_gpio_func_uart_tx);
hw_gpio_set_pin_function(hw_gpio_port_1,hw_gpio_pin_7,hw_gpio_mode_output,hw_gpio_func_uart_rx);

#定义CONFIG_RETARGET
#定义CONFIG_RETARGET_UART HW_UART2

创建了一个计时器,每隔1秒钟每次超过一次,并通知HRP_Sensor_Task以便从该任务中打印:

print_timer = os_timer_create(“prt”,os_ms_2_ticks(1000),os_timer_success,(void *)os_get_current_task(),print_timer_cb);

os_timer_start(print_timer,10);

if(notf&avd_print_notif){
custom_printing_via_uart();//从UART接口打印
printf(“data \ n \ r”);//从UART2接口打印

custom_printing_via_uart的代码是以下内容

void custom_printing_via_uart(void)

uart_device开发;
静态char wbuf [150] =“测试虚拟数据”;
dev = ad_uart_open(serial1);
ad_uart_write(dev,wbuf,sizeof(wbuf));
ad_uart_close(dev);

注意:i VE在Custom_Config_Qspi.h中定义为DG_Configuart_Adapter并使用默认Platform_Devices.h文件(默认情况下,使用不同DMA通道中的DMA配置两个UART)。

使用FTDI芯片以输出第二UART(Serial1)模块,它运行得很好。

您可以通过在系统卡住并按下暂停按钮时,检查通过附加调试器的系统停滞的位置,NMI或HardFault将在发生异常的位置存储PC,以便追溯到源,如果由于NMI或HardFault处理程序,系统已经停止了。

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,mt_dialog,

嗨,mt_dialog,
我使用printf()@ uart2工作正常(通过调试芯片输出)。'printf()'使用p13,p23作为UART2输出/输入引脚如下:
//---------------------------------
// ------ Tx2 = P13,RX2 = P23
hw_gpio_configure_pin(hw_gpio_port_2,hw_gpio_pin_3,hw_gpio_mode_output,
hw_gpio_func_gpio,1);

hw_gpio_set_pin_function(hw_gpio_port_1,hw_gpio_pin_3,hw_gpio_mode_output,
HW_GPIO_FUNC_UART2_TX);
hw_gpio_set_pin_function (HW_GPIO_PORT_2 HW_GPIO_PIN_3 HW_GPIO_MODE_OUTPUT,
hw_gpio_func_uart2_rx);
//----------------------------------
我测试了UART2,您可以使用AD_UART_WRITE()将字符串输出为printf()执行。
此外,DMA通道在我的platform_device.h中定义:
//----------------------------------
#if dg_configuart_adapter

hw_uart_bus (uart1, serial1, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none, hw_uart_bus, serial1, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none,
hw_uart_stopbits_1,0,0, hw_dma_channel_1, hw_dma_channel_0,0,0)

hw_uart_bus (uart2, serial2, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none, hw_uart_bus, serial2, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none,
HW_UART_STOPBITS_1,0,1,HW_DMA_CHANNEL_3,HW_DMA_CHANNEL_2,0,0)

#endif / * dg_configuart_adapter * /
//---------------------------------

但是我同时enalbe Uart1,尝试与其他外围设备进行沟通。我的UART1通过使用HRS_TIMER_NOTIF每1秒触发每1秒钟。
每次当我执行ad_uart_write()函数时,都会发生RESET。
我的UART1的缓冲区是1024字节,这样可以吗?(我找不到缓冲区的限制)

顺便说一句,我也使用I2C,它可以正常工作。他们冲突吗?
我的I2C每0.5秒触发一次。输出2组数据后(1秒),UART1星,然后系统复位。

是否有一个示例代码同时使用UART1 / UART2?

谢谢

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

没有使用两个UART的具体示例,尽管它不是难以在上面所示的那样难以实现的事情,但您可以尝试在上面的说明来检查是否适用于您。关于两个UART和I2C的冲突,这也是您必须检查的东西,您也可以删除I2C交互并检查此问题是否发生以限制可能的原因。您必须检查系统无反应时究竟发生什么,系统所做的是没有输出的,(在系统摊位并检查系统困扰时,安装调试器),您提到它会重置您是否看到通过UART执行的引导加载程序?

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,mt_dialog,

嗨,mt_dialog,
是的,我认为这是一个“简单的”问题,但它阻止了我超过2周。
坏消息是我无法调试我的代码,因为我的smartsnippets工作错误 - 在调试子菜单中没有attatch / qspi选项。

谢谢

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

所以请检查您的其他帖子https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...对于这个问题。

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,mt_dialog,

嗨,mt_dialog,
我开始了我的调试,在这里开始proram stop :( hw_uart.c)
// ------------------------------------
void UART_INTRUPT_HANDLER(HW_UART_ID UART)

hw_uart_int int_id;

为了 (;;) {
int_id = hw_uart_get_interrupt_id(UART);
开关(int_id) {
案例hw_uart_int_timeout:
hw_uart_rx_timeout_isr (uart);
打破;
案例hw_uart_int_modem_stat:
打破;
案例hw_uart_int_no_int_pend:
返回;
打破;
案例hw_uart_int_thr_empty:
hw_uart_tx_isr (uart);
打破;
案例hw_uart_int_received_available:
hw_uart_rx_isr (uart);
打破;
案例hw_uart_int_receive_line_stat:
打破;
案例hw_uart_int_busy_detected:
# ifdef CONFIG_UART_IGNORE_BUSY_DETECT
hw_uart_transmit_fifo_empty(UART);
#别的
/ *
*停止此处意味着访问除数闩锁的时间规则不是
*跟着。请参阅注册rbr_thr_dll的描述。
* /
__bkpt(0);<< --- !!!! ----在这里停下来
#万一
打破;



//-------------------------------------------------

为什么会发生这种情况?

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

有没有机会为Printf和项目的自定义打印使用一个UART?UART2在默认引脚,P13和P23上定义,因此在配置其他UART配置的引脚上?当UART忙时,您得到的中断被触发,FIFO已满,并且您将外围设备指示为新的操作。我测试了上面粘贴了上面的代码,在每个间隔中打印了相当大的数据,所以你可以检查上面的代码是否同样的错误?也尝试尝试的东西,打印机在使用retarget操作时不要使用适配器但lld,所以可以检查在190行的config.c文件的_write()函数中。hw_uart_send(config_retarget_uart,ptr,len,null,null);使用适配器写入:

uart_device开发;
dev = ad_uart_open (SERIAL2);
AD_UART_WRITE(DEV,PTR,LEN);
ad_uart_close(dev);
返回兰;

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,mt_dialog,

嗨,mt_dialog,
在开始时,我认为UART1是默认的printf()的输出。所以我写了代码来初始化GPIO和UART2,然后我使用AD_UART_WRITE()来输出我的数据。我发现它用printf()输出到同一管道!---检查后,我明白printf()使用UART2。但是,可以在UART2上同时使用printf()和ad_uart_write()。

我的新代码使用UART1作为我的私有UART,用UART2分开(PRINTF()),保持原始设置:使用P13,P23作为UART2的引脚 - 它们与调试芯片连接,我用它们来调试我的代码时间。

config.c中替换_write()的方法是不允许的:这将导致COM端口丢失!——尽管它存在于设备管理器中,但无法打开。

我测试了函数'void custom_printing_via_uart(void)',错误是相同的。

最后,我找到了Comflict的代码:(自定义)
//-------------------------------------
// ---通过UART1发送命令,然后等待反馈----------
BOOL SENDCMD(CHAR * CMD,CHAR *结果,INT超时)

unsigned char try_count = 5;
而(try_count)

UsArt1_clear();//清除USART1_RCV_BUF的内存
AD_UART_WRITE(UART1DEV,CMD,STRLEN(CMD));
AD_UART_READ(UART1DEV,USART1_RCV_BUF,MAX_RCV_LEN,超时);//不知道长度
if((null!= strstr((const char *)usart1_rc_buf,结果))//比较所接收的结果

返回true;/ / 1 =成功;打破;

别的 {
mdelay(100);//死循环?
try_count--;

返回false;// 0 =失败

//---------------------------------------------------
它在system_init()中呼叫:
// ----------------------------------
UART1DEV = AD_UART_OPEN(SERIAL1);

if(sendcmd(at,'OK“,100)){// ---发送命令并等待反馈,是'OK'?
Printf(“esp8266在这里”换行符);

别的
printf(“esp8266不存在”换行符);

ad_uart_close(Uart1dev);
//---------------------------------

此时,系统看起来好像,它宣传了一封对消息并且可以连接。
但是,当HRP通知开始时,AD_UART_WRITE()或“Custom_printing_via_uart(void)”将被突出,然后系统重置。

functioncmd中是否有问题?

谢谢

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo_konka,

嗨jamesleo_konka,

我不认为在printf函数中使用适配器会导致COM端口丢失,如果你正在经历类似的事情,其他事情是导致这个问题的原因。我提到这个的原因(_write()函数中的适配器)是为了验证您没有使用一个UART模块,并且您是通过UART适配器(您的应用程序)和直接使用低级驱动程序(从printf())访问该模块,因为这是我能想到的唯一可能的UART中断,你在之前的职位。由于您确定您正在为printf()和从应用程序打印UART使用单独的UART模块,因此情况并非如此。

我不明白的是你粘贴的函数是导致你在上一篇文章中提到的问题的函数(不重置但断点和你的代码摊位)?事实上,当您发送通知时,您提到代码获得重置(您的代码在前一篇文章中的断点中的代码丢失?)。

据我所知,你想得到一些外部命令才能做某事,你把它放在system_init()中都知道system_init()只会运行一次,之后它不会再次运行,这意味着AD_UART_READ()函数将阻止,直到超时过去或获取它想要的数据。据我所知,您将等待用户在启动广告之前输入数据,我无法在您使用的功能中看到可能导致问题的功能,我尝试过以下类似的代码在system_init中()函数才能检查问题,并且在启用了HRP_SESNOR的通知时,也没有注意到任何奇怪的内容。

uart_device开发;
静态char usart1_snd_buf [4] = {'o','k','\ n','\ r'};
静态char usart1_rcv_buf [6];
Static char cmd[6] = "开始\r";
dev = ad_uart_open(serial1);
unsigned char try_count = 5;

而(try_count)

memset (0 x00 usart1_rcv_buf, sizeof (usart1_rcv_buf));
ad_uart_write (dev, usart1_snd_buf strlen (usart1_snd_buf));
AD_UART_READ(DEV,USART1_RCV_BUF,SIZEOF(USART1_RCV_BUF),OS_EVENT_FOREVER);

if(!memcmp(usart1_rc_buf,cmd,6))

printf(“成功\ n \ r”);
打破;

别的
printf(“失败\ n \ r”);

try_count--;

ad_uart_close(dev);

pm_set_sleep_mode (pm_mode_extended_sleep);

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,mt_dialog,

嗨,mt_dialog,
我害怕很久等待UART通信,所以在从UART读取时设置超时。(通常100ms〜1000ms,不是os_event_forever)
初始化和任务时使用sendcmd()函数,有必要防止看门狗的超时。
当我在system_init中调用sendcmd()时,它可以正常工作。(也许这设置了一个陷阱)。错误发生在hrp_sensor_task - 当调用ad_uart_write()时。
我不知道sendcmd()如何影响以下ad_uart_write()?

您是否可以试试大尺寸的uart接收缓冲区?我发现我的1024字节缓冲区将杀死系统。
缓冲区应该是“静态”类型吗?

静态char usart1_rcv_buf [6];// - >到1024字节

顺便说一下,如何检查堆栈大小?构建结果显示一个比实际内存更小的RAM大小(recv + send buffer =2048)。

谢谢

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

我的接收器缓冲区增加到1024但没有出现问题,我使用静态的原因是为了不改变我的任务的默认堆栈大小,只要您将堆栈大小保持足够大的堆栈尺寸您功能所需的大小。关于您剩下的堆栈有多少,免费RTOS对此有一些类似于UxtaskGetStackHighwatermark()的工具,以及系统视图或臭氧等工具可以选择监视您创建的每个任务的堆栈。关于您在UART中断处理程序中获取的错误,我相信这是由AD_UART_READ()函数引起的东西,我可以重写您只有在UART上的打印期间看到的内容,即在终端上键入某些内容,那将导致中断你得到。您可以通过定义CONFIG_UART_IGNORE_BUSY_DETECT来避免该问题,但在获得中断时将闪烁TX FIFO。你能检查一下适合你的吗?

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,对话框,

嗨,对话框,
这是一个幸运的日子!
定义CONFIG_UART_IGNORE_BUSY_DETECT后,系统工作正常!
我还使用uxTaskGetStackHighWaterMark()测试了堆栈,它是OK的,大约568~1568~1432~。
但是我不知道为什么/如何发生UART BUSY冲突。如何调试它?

非常感谢

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

正如我所提到的那样,当68x打印时,我只能复制问题我也在在UART中发送字符,所以你可以检查附加的字符是否在FW打印时发送到UART?

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,MT_Dialog,

嗨,MT_Dialog,
新问题进来了。
我在UART1上输出许多文本段,并在UART2(printf())上监视。
AT命令,就像'at'','+ setmode'; ......有些用于初始化,有些用于操作。
一开始,沟通是可以的。当我输出长文本进行操作时,在命令文本的开头添加了一个字符(0x08),像这样:
// -------------------------------
发布/设备/ 3508300 / DataPoints?键入= 5 http / 1.1
API-key:2h3d3ywz = nkal57tb7gxkjv = bhi =
主机:api.heclouds.com.
内容长度:19

,;温度,27.59
//------------------------------------
使用printf()同时监视命令文本,如果printf()则可以确定 - 这意味着缓冲区是OK(没有CharAtyor 0x08)。
我更改了命令文本,但奇怪的CharAttor仍然是0x08。
这是怎么发生的?由于“config_uart_ignore_busy_detect”?

谢谢

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

是的,显然#define如果使用,则具有这种副作用。关于您的问题,请检查您在打印时向设备发送数据,因为唯一的复制问题是在UART打印时从终端发送数据到UART。请检查是否会发生这种情况,您可以获得指定的中断。另外尝试以下undefine the config_uart_ignore_busy_detect并尝试为您使用UART拥有的每个交互调用AD_UART_CLOSE(),只需打开界面执行写入并读取并在停止打印时,不要调用接口的关闭,尝试防止中断HW_UART_INT_BUSY_DETCEDTED触发。

由于MT_dialog

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,mt_dialog,

嗨,mt_dialog,
我会在宣传UART设备后尝试禁用“ad_uart_close”。

jamesleo-konka
离线
最后看到:4年4个月前
加入:2017-01-22 02:42
嗨,MT_Dialog,

嗨,MT_Dialog,
禁用“AD_UART_CLOSE”的方法具有更好的效果,但并非完全处理UART1数据对恐慌。
系统正常工作了一段时间(半分钟,大约15次UART发送),然后数据被干扰。

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

我已经放置了一个关于这个问题的内部票据,我将尽快报告,当我从SDK团队得到你复制的问题的答案。我还想请您测试一下,如果您不使用printf功能(第二次UART打印),是否会发生这种情况。因此,您能否测试一下,为了调试目的而删除printf是否消除了BUSY中断,从而消除了您得到的0x08 ?

由于MT_dialog