MacBook Pro上搞定Parallels嵌套VMware:从报错‘不支持Intel VT-x’到成功启动的完整避坑记录
2026/5/28 2:44:40
常见需求:
┌────────────────────────────┐ │ 应用层(业务协议) │ │ ModbusTCP / MQTT / HTTP │ └─────────────▲──────────────┘ │ ┌─────────────┴──────────────┐ │ LwIP 协议栈 │ │ TCP / UDP / DHCP / DNS │ └─────────────▲──────────────┘ │ ┌─────────────┴──────────────┐ │ ENC28J60 网卡驱动 │ │ SPI + INT + CS │ └─────────────▲──────────────┘ │ ┌─────────────┴──────────────┐ │ FreeRTOS 内核 │ │ Task / Queue / Semaphore │ └─────────────▲──────────────┘ │ ┌─────────────┴──────────────┐ │ PIC32MX 外设驱动 │ │ UART / SPI / Timer / GPIO │ └────────────────────────────┘| 任务 | 优先级 | 说明 |
|---|---|---|
ETH_IF_TASK | 高 | ENC28J60 数据包接收 |
LWIP_TCPIP_TASK | 高 | LwIP 核心线程 |
MODBUS_TCP_TASK | 中 | Modbus TCP 处理 |
UART_POLL_TASK | 中 | 串口数据采集 |
PROTOCOL_CONV_TASK | 中 | 协议转换 |
SYS_MONITOR_TASK | 低 | 心跳、看门狗 |
#defineETH_IF_TASK_PRIO(tskIDLE_PRIORITY+4)#defineLWIP_TASK_PRIO(tskIDLE_PRIORITY+5)#defineMODBUS_TCP_PRIO(tskIDLE_PRIORITY+3)ENC28J60 仅支持 SPI 模式 0,0:
uint8_tenc28j60_read_op(uint8_top,uint8_taddr){uint8_ttx[2],rx[2];tx[0]=(op<<5)|(addr&0x1F);tx[1]=0xFF;SPI_Transfer(tx,rx,2);returnrx[1];}注意:
#defineNO_SYS0#defineSYS_LIGHTWEIGHT_PROT1#defineMEM_SIZE8192#definePBUF_POOL_SIZE16#defineTCP_MSS1460#defineTCP_SND_BUF4096#defineTCP_WND4096#defineLWIP_NETCONN1#defineLWIP_SOCKET1structnetifenc28j60_netif;netif_add(&enc28j60_netif,&ipaddr,&netmask,&gw,NULL,ethernetif_init,ethernet_input);netif_set_default(&enc28j60_netif);netif_set_up(&enc28j60_netif);voidUART_Poll_Task(void*arg){while(1){if(UART_Receive(buf,&len)){xQueueSend(g_uart_queue,buf,portMAX_DELAY);}vTaskDelay(pdMS_TO_TICKS(10));}}staticvoidmodbus_tcp_server(void*arg){structnetconn*conn=netconn_new(NETCONN_TCP);netconn_bind(conn,IP_ADDR_ANY,502);netconn_listen(conn);while(1){structnetconn*newconn;if(netconn_accept(conn,&newconn)==ERR_OK){modbus_process(newconn);}}}UART_RTU → Queue → ProtocolConvert → TCP Send用Queue + Buffer解耦
不在线程中做阻塞操作
参考代码 基于pic32MX、FREERTOS、ENC28J60、LWIP编写的通讯管理机程序www.youwenfan.com/contentcsv/72502.html
| 问题 | 对策 |
|---|---|
| 丢包 | 增大PBUF_POOL_SIZE |
| 死机 | 独立看门狗 + SPI 超时 |
| 中断风暴 | ISR 只给信号量 |
/Project ├── App/ │ ├── modbus_tcp.c │ ├── protocol_convert.c │ └── uart_task.c ├── Drivers/ │ ├── enc28j60.c │ ├── spi.c │ └── uart.c ├── LwIP/ ├── FreeRTOS/ └── main.c