由于windows上面移植的ucosii的线程跟单片机线程完全不一样,ucosii上面的线程使用的是windows线程,并且任务之间调度靠的是信号量,将不需要运行的线程挂起,需要运行的线程唤醒,而且设计到ucos ii之外的线程很多,比如我用来做串口数据查询的线程,虚拟网口接收数据的线程,这个时候就会产生一个问题,那就是关闭中断问题,关闭中断进行临界保护,这个时候就很难了,由于本身都是独立线程,我尝试了很多办法,最后都没有成功,起初我是在虚拟网卡回调中直接将接收的数据写入lwip。

//网口数据接收回调
void Ethernet_RxDataCallBack(u8* pData, u32 DataLen)
{//将目的地址为FF,源地址为当前MAC的数据包进行过滤if (pData[0] == 0xFF) return;LwIP_DataInputHandle_Callback(pData, (u16)DataLen);//lwip数据接收处理-与LwIP_DataInputHandle()功能一致
}//lwip数据接收处理-与LwIP_DataInputHandle()功能一致
void LwIP_DataInputHandle_Callback(u8 *pData, u16 RxLen)
{static struct pbuf* p;if (isLwIP_Init == TRUE)                                //LWIP初始化完成了才进行数据接收处理{p = pbuf_alloc(PBUF_RAW, RxLen, PBUF_POOL);   //从内存池分配内存if (p != NULL){memcpy((u8_t*)((u8_t*)p->payload), pData, RxLen);p->tot_len = p->len = RxLen;                    //重新设置接收数据长度ethernetif_input(p, &xnetif);                   //调用lwip数据接收处理}else{DEBUG("内存不足\r\n");}}
}

这个Ethernet_RxDataCallBack()就是使用pacp抓包虚拟的网卡,收到数据后回调实现的,相当于单片机中的中断了,在中断中本应该先关闭任务调度,避免冲突,但是此处由于无法关闭中断,最终导致lwip可能出现一些不稳定,大概运行几个小时后就会产生一些空的信号量,邮箱等,造成崩溃,最后解决办法就是将接收的数据写入到FIFO,然后创建一个ucos ii线程定期从FIFO中取出数据,这样就避免了中断与ucosii冲突,导致系统运行的不可靠,通过这个方法测试了24小时,运行一直比较稳定;

//网口数据接收回调
void Ethernet_RxDataCallBack(u8* pData, u32 DataLen)
{//将目的地址为FF,源地址为当前MAC的数据包进行过滤if (pData[0] == 0xFF) return;FIFO_Write(&sg_EthernetRxFifoHandle, pData, (u16)DataLen);           //写入一条数据,通过FIFO去同步数据,不要再任何外部线程中调用OS代码//LwIP_DataInputHandle_Callback(pData, (u16)DataLen);//lwip数据接收处理-与LwIP_DataInputHandle()功能一致
}#if(WIN32) //如果是WIN32由于无法关闭中断,为了稳定性,请不要在中断中调用任何接口
//以太网数据接收线程
void TaskEthernet_DataRxd(void* pdata)
{static u16 TempData[1600];u16 DataLen;u32 IdleCount = 0;while (1){if (FIFO_Read(&sg_EthernetRxFifoHandle, TempData, &DataLen) == TRUE)//读取一条数据{LwIP_DataInputHandle_Callback(TempData, DataLen);                //lwip数据接收处理-与LwIP_DataInputHandle()功能一致IdleCount = 0;}else //没有收到数据,空闲计数器增加{IdleCount++;if (IdleCount > 10){OSTimeDlyHMSM(0, 0, 0, 100);}}OSTimeDlyHMSM(0, 0, 0, 6);}}
#endif //WIN32  

下面是运行了24小时后的截图,信号量申请与释放都是成对,并且地址也没变化,一直在重复利用;

win32 运行ucosii移植lwip2.1.2问题记录相关推荐

  1. ENC28J60+STM32F103在STM32CubeIDE上移植lwIP2.1.2

    ENC28J60+STM32F103在STM32CubeIDE上移植lwIP2.1.2   为了学习lwIP,网购了一块正点原子的Mini STM32开发板和一个ENC28J60以太网模块,发现正点原 ...

  2. UCOS-II移植ARM的笔记

    UCOS-II移植ARM的笔记(转贴) UCOS-II的移植需要提供2,3个文件分别介绍如下: 一:OS_CPU.H 1 与编译器有关的数据类型 经典的全局变量定义,可以套用,简洁明了实用性好. #i ...

  3. uCosII移植STM32F407教程

    uCosII移植STM32F407教程 5/15/2019 9 :24 :23 AM Author :TerryDev 移植环境 本文所使用的移植环境如下: 硬件环境为:STM32F407VGT6 软 ...

  4. Win32 C++项目移植到 Win10 UWP

    本文可能对谁有帮助 如果你正在做将现有的Win32 静态库 或 DLL 工程移植到Win10 UWP(通用 Windows) 环境,这篇文章可能会对你有帮助. 概述 在VS2015的 新建项目 -&g ...

  5. 在UCOSIII基础上对STM32F407ZGT6移植LWIP2.1.3

    在UCOSIII基础上对STM32F407ZGT6移植LWIP2.1.3 1.移植的准备工作 1.1 基础工程 1.2 ST 以太网库下载 1.3 LWIP 文件下载 2 添加及修改ST 以太网库 2 ...

  6. UCOSII移植教程仅仅移植不讲解

    摘要:入门UCOSII学习笔记记录,看的正点原子的视频 文章目录 笔记 移植步骤 笔记 RTOS比前后台系统好在哪里?主要是在执行中断任务的时候,RTOS可以中断低优先级的任务,执行高优先级的任务:而 ...

  7. UCOSII上使用AT24C256C之应用记录(三)

    手动直达. UCOSII移植到STM32F103C8T6上之应用记录(二). 原因:发现公司的板子上面有一个AT24C256C,闲着也是闲着,就写一下呗.. AT24C256Cdatasheet和AT ...

  8. McObject新版eXtremeDB v.8.0在E8存储上运行STAC基准测试创造了多个记录

    2018年5月22日 - 伦敦,纽约和圣塔克拉拉:用于实时和历史数据分析的极速数据库系统eXtremeDB®的开发商McObject®,今天宣布其刷新了在E8 Storage上运行的STAC-M3™的 ...

  9. 运行mbedtls自带Demo ssl_client的记录

    概述: 运行mbedtls自带  ssl demo的记录: 操作过程: 编译Demo,请看我专栏中的相关文章 先运行服务端程序,运行ssl_server.exe,运行结果如下: mbedtls-3.2 ...

最新文章

  1. 柳传志大声对iphone说:这是在中国!
  2. ORACLE SQL机能优化系列(六)
  3. qt实现-给SQLITE添加自定义函数
  4. 【MongoDB】增删改查基本操作
  5. 一分钟实现纯CSS全屏滚动特效
  6. 怎么将py文件转成dll_怎样将PDF文件转成CAD图纸?
  7. PowerDesigner设置code和name不联动的方法
  8. python+pygame安装教程win8
  9. RubyInstaller
  10. 基于MATLAB的QAM调制与解调系统设计
  11. 山重水复疑无路,柳暗花明又一村。---找工作感想
  12. DirectX大作业——3D场景地图
  13. xy轴坐标图数字表示_图纸上的坐标x,y轴上有好长的数字表示什么意思
  14. 微信开发验证php,解析微信公众平台开发之验证步骤实例(PHP版)
  15. 苹果8.1系统无服务器,iOS9强制降级iOS8教程
  16. Rivian-电动皮卡先行者
  17. 云端服务器跑python代码,断开后台运行
  18. 【Codecs系列】双帧参考特性
  19. File文件的属性设置
  20. 美少女插画线稿图,抱走练习吧!

热门文章

  1. 一文掌握流程管理与流程优化方法和工具
  2. VR项目添加键盘鼠标控制
  3. 好工作需要这么多而充足的准备,你还在浪费时间吗 行动吧?
  4. python实验室信息管理系统_有没有免费的实验室信息管理系统LIMS?
  5. 嵌入式风口已来,如何乘风而上?
  6. 手机摄像头驱动_前9月手机镜头12强名单曝光 7家出货量突破2亿颗
  7. MSCS配置过程win2008
  8. 精彩绝伦的SmartArt图形
  9. java-php-python-ssmX钢材商贸公司网络购销管理系统计算机毕业设计
  10. matlab生成0,1随机序列