当前位置: 首页 > news >正文

天津企业做网站多少钱近期舆情热点事件

天津企业做网站多少钱,近期舆情热点事件,网站开发网站制作报价,在阿里国际站做的网站一、问题查找 使用的开发版是硬石的H7芯片型号STM32H743IIT6,测试时发现如果外面没有连接CAN设备,程序调用CAN发送时会一直等待发送反馈,导致相关线程挂起。 在线仿真时发现是卡在can.c文件的168行_can_int_tx函数:rt_co…

一、问题查找
         使用的开发版是硬石的H7芯片型号STM32H743IIT6,测试时发现如果外面没有连接CAN设备,程序调用CAN发送时会一直等待发送反馈,导致相关线程挂起。
在线仿真时发现是卡在can.c文件的168行_can_int_tx函数:rt_completion_wait(&(tx_tosnd->completion), RT_WAITING_FOREVER);
代码如下:

rt_inline int _can_int_tx(struct rt_can_device *can, const struct rt_can_msg *data, int msgs)
{int size;struct rt_can_tx_fifo *tx_fifo;RT_ASSERT(can != RT_NULL);size = msgs;tx_fifo = (struct rt_can_tx_fifo *) can->can_tx;RT_ASSERT(tx_fifo != RT_NULL);while (msgs){rt_base_t level;rt_uint32_t no;rt_uint32_t result;struct rt_can_sndbxinx_list tx_tosnd = RT_NULL;rt_sem_take(&(tx_fifo->sem), RT_WAITING_FOREVER);level = rt_hw_interrupt_disable();tx_tosnd = rt_list_entry(tx_fifo->freelist.next, struct rt_can_sndbxinx_list, list);RT_ASSERT(tx_tosnd != RT_NULL);rt_list_remove(&tx_tosnd->list);rt_hw_interrupt_enable(level);no = ((rt_uint32_t)tx_tosnd - (rt_uint32_t)tx_fifo->buffer) / sizeof(struct rt_can_sndbxinx_list);tx_tosnd->result = RT_CAN_SND_RESULT_WAIT;if (can->ops->sendmsg(can, data, no) != RT_EOK){/ send failed. */level = rt_hw_interrupt_disable();rt_list_insert_after(&tx_fifo->freelist, &tx_tosnd->list);rt_hw_interrupt_enable(level);rt_sem_release(&(tx_fifo->sem));continue;}can->status.sndchange = 1;rt_completion_wait(&(tx_tosnd->completion), RT_WAITING_FOREVER);

说明一直在等待完成信号,而发送完成信号的地方在can.c文件的900行rt_hw_can_isr函数:rt_completion_done(&(tx_fifo->buffer[no].completion));
源码如下:

case RT_CAN_EVENT_TX_DONE:
case RT_CAN_EVENT_TX_FAIL:
{struct rt_can_tx_fifo *tx_fifo;rt_uint32_t no;no = event > > 8;tx_fifo = (struct rt_can_tx_fifo *) can- >can_tx;RT_ASSERT(tx_fifo != RT_NULL);if ((event & 0xff) == RT_CAN_EVENT_TX_DONE){tx_fifo- >buffer[no].result = RT_CAN_SND_RESULT_OK;}else{tx_fifo- >buffer[no].result = RT_CAN_SND_RESULT_ERR;}rt_completion_done(&(tx_fifo- >buffer[no].completion));break;
}

二、解决方案
         看完can的驱动源码后想到如果can总线没有其他设备,CAN发送报文应该属于出错的情况,查看drv_fdcan.c文件中关于几种中断的处理,发现故障后的回调函数里没有调用rt_hw_can_isr。于是参考HAL_FDCAN_TxBufferCompleteCallback函数的处理方式,对HAL_FDCAN_ErrorCallback进行了如下处理。
源码如下:

void HAL_FDCAN_ErrorCallback(FDCAN_HandleTypeDef *hfdcan)
{rt_uint32_t tmp_u32Errcount;rt_uint32_t tmp_u32status;uint32_t ret = HAL_FDCAN_GetError(hfdcan);if(hfdcan->Instance == FDCAN1){#ifdef BSP_USING_FDCAN1//can1if( (ret & FDCAN_IT_ARB_PROTOCOL_ERROR) &&(hfdcan->Instance->CCCR & FDCAN_CCCR_INIT_Msk)){//hfdcan->Instance->CCCR |= FDCAN_CCCR_CCE_Msk;hfdcan->Instance->CCCR &= ~FDCAN_CCCR_INIT_Msk;st_DrvCan1.device.status.errcode = 0xff;}else{tmp_u32Errcount = st_DrvCan1.fdcanHandle.Instance->ECR;tmp_u32status = st_DrvCan1.fdcanHandle.Instance->PSR;st_DrvCan1.device.status.rcverrcnt = (tmp_u32Errcount>>8)&0x000000ff;st_DrvCan1.device.status.snderrcnt = (tmp_u32Errcount)&0x000000ff;st_DrvCan1.device.status.lasterrtype = tmp_u32status&0x000000007;rt_hw_can_isr(&st_DrvCan1.device, RT_CAN_EVENT_TX_FAIL);}#endif / BSP_USING_FDCAN1 /}else{#ifdef BSP_USING_FDCAN2if( (ret & FDCAN_IT_ARB_PROTOCOL_ERROR) &&(hfdcan->Instance->CCCR & FDCAN_CCCR_INIT_Msk)){//hfdcan->Instance->CCCR |= FDCAN_CCCR_CCE_Msk;hfdcan->Instance->CCCR &= ~FDCAN_CCCR_INIT_Msk;st_DrvCan2.device.status.errcode = 0xff;}else{//can2tmp_u32Errcount = st_DrvCan2.fdcanHandle.Instance->ECR;tmp_u32status = st_DrvCan2.fdcanHandle.Instance->PSR;st_DrvCan2.device.status.rcverrcnt = (tmp_u32Errcount>>8)&0x000000ff;st_DrvCan2.device.status.snderrcnt = (tmp_u32Errcount)&0x000000ff;st_DrvCan2.device.status.lasterrtype = tmp_u32status&0x000000007;rt_hw_can_isr(&st_DrvCan2.device, RT_CAN_EVENT_TX_FAIL);}#endif / BSP_USING_FDCAN2 /}
}

经修改后测试发现一切正常,发送错误后就会进入错误处理,不会卡死发送线程。

http://www.hengruixuexiao.com/news/38611.html

相关文章:

  • 深圳建设网站首页本地推荐本地推荐
  • 手机做网站用什么软件文章推广平台
  • 自己创业做网站域名在线查询
  • 超便宜的网站哪个浏览器不屏蔽网站
  • 网站模板和源码怎么自己做一个网址
  • 淄川政府网站建设哪家好帮别人发广告赚钱平台
  • 用java做网络小说网站天津百度seo排名优化
  • 12306网站是谁做的网络推广公司简介模板
  • 仿牌网站建设用asp做的网站
  • 小榄镇做网站公司数字营销策划
  • 怎么做淘宝客优惠券网站信息流投放
  • 做网站pdf不能预览武汉seo公司
  • 建设营销型网站广州公众号seo排名
  • 传智播客网站开发全套视频教程seo推广有哪些方式
  • 网站安全检测漏洞扫描风险等级分布太原关键词优化软件
  • 网站用户黏度表现在收录入口在线提交
  • 网站建设有什么需求抖音seo推广外包公司好做吗
  • 生日礼物自己做网站知名的搜索引擎优化
  • 专业网站建设定制公司产品线下推广方式都有哪些
  • 做网站能挣钱么广告软文外链平台
  • 做网站威海网页设计模板网站免费
  • 南昌专门做网站生活中的网络营销有哪些
  • 网站后台 批量上传app排名优化公司
  • 打开一个网站搜索页面跳转js百度站长工具怎么查排名
  • 高端品牌网站设计关键词优化公司网站
  • 做JSP网站买什么书小程序源码网
  • 建设网站平台需要的设备排行榜前十名
  • 手机网站后台源码小时seo
  • 这么自己做网站深圳seo优化方案
  • 政府网站 banner 源码网络营销策划书总结