完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们在BLE-UART例程基础上开发的,使能看门狗后,发现当设置1200波特率时候,发送16字节内容会导致看门狗复位,每次必现。
调用的发送函数是app_uart_tx_data(data,length);发送16字节内容,调整波特率为2400以上后,就不复位了。这个uart3的发送函数我改成了uart1,测量uart1是可以正确发出来的。 第一个想到是发送函数阻塞导致不能及时喂狗导致的,但是研究看看送函数那里并没有阻塞,最多阻塞8个字节的时间,在此处加喂狗指令,故障依旧。 void app_uart_process(void) { UINT32 irq_status; SYS_DisableAllIrq(&irq_status); if(uart_rx_flag) { tmos_start_task(Peripheral_TaskID, UART_TO_BLE_SEND_EVT, 2); uart_rx_flag = false; } SYS_RecoverIrq(irq_status); //tx process if(R8_UART1_TFC < UART_FIFO_SIZE) { //PRINT("R8_UART1_TFC:%dn",R8_UART1_TFC); app_drv_fifo_read_to_same_addr(&app_uart_tx_fifo, (uint8_t *)&R8_UART1_THR, UART_FIFO_SIZE - R8_UART1_TFC); } } 继续研究,在主循环里发现两个函数,一个是TMOS系统的轮询,一个是串口发送处理函数,通过添加复位、置位io看发现TMOS_SystemProcess();函数执行时间超过400ms左右,用示波器看低电平时间在400ms左右。因为TMOS的没有源码,我向问官网技术人员,怎么看TMOS哪个任务占用CPU时间过长了,有没有好的方法查这个问题 __attribute__((section(".highcode"))) void Main_Circulation() { while(1) { GPIOA_ResetBits(GPIO_Pin_12); TMOS_SystemProcess(); *((unsigned char*)0x40001043) = 0;//喂狗 GPIOA_SetBits(GPIO_Pin_12); app_uart_process(); } } |
|
相关推荐
1个回答
|
|
是我们串口连接的设备发生了自发自收现场,ch573串口接收处理函数里面放了以下log打印,但是ch573调试串口也调成1200了,导致PRINT时间边长了导致重启,后来我在另一个帖子中问了usb cdc的问题,现在我已经把log打印都重定向到usb cdc了
|
|
|
|
只有小组成员才能发言,加入小组>>
522 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2904 浏览 2 评论
2400 浏览 1 评论
870浏览 2评论
689浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
418浏览 1评论
531浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
814浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 20:48 , Processed in 1.017951 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号