网站管理程序建设艺术网站需要多少钱
2026/6/20 12:19:14 网站建设 项目流程
网站管理程序,建设艺术网站需要多少钱,设计网页需要学什么,十大在线编程网站one_channel_hub 移植到CH584M#xff08;TMOS适配移除WiFi网络代码#xff09; 一、核心适配背景原平台特性CH584M/TMOS适配目标ESP32 FreeRTOSCH584M#xff08;RISC-V#xff09; TMOS#xff08;沁恒轻量级OS#xff09;含WiFi/HTTP/UDP/BLE配网移除所有网络相关代…one_channel_hub 移植到CH584MTMOS适配移除WiFi网络代码一、核心适配背景原平台特性CH584M/TMOS适配目标ESP32 FreeRTOSCH584MRISC-V TMOS沁恒轻量级OS含WiFi/HTTP/UDP/BLE配网移除所有网络相关代码仅保留LoRa核心逻辑ESP32 SPI/GPIO/定时器适配CH584M硬件驱动 TMOS任务/事件/定时器支持SX126x/LLCC68/LR11xx保留LoRa射频驱动适配CH584M的RAL层二、代码裁剪彻底移除网络相关1. 删除网络相关文件# 核心删除项从one_channel_hub仓库中删除rm-rf lorahub/main/wifi.c lorahub/main/wifi.hrm-rf lorahub/main/http_server* lorahub/main/udp_client*rm-rf components/wifi_provisioning/rm-rf components/esp32_net/*# 若有ESP32网络封装2. 移除代码中的网络依赖1主函数lorahub/main/main.c裁剪删除ESP32网络初始化、FreeRTOS网络任务保留LoRa核心初始化// 移除所有网络相关头文件// #include wifi.h// #include http_server.h// #include esp_wifi.h// #include esp_netif.h// 删除网络初始化调用// wifi_sta_init(false);// http_server_start();// udp_client_init();// 保留LoRa核心逻辑替换FreeRTOS任务为TMOS任务// xTaskCreate(lora_task, lora_task, 4096, NULL, 5, NULL); // 移除FreeRTOS任务TMOS_TaskCreate(lora_tmos_task,lora_task,256,NULL,1);// TMOS任务创建2HAL层components/liblorahub/lorahub_hal.c裁剪移除ESP32/FreeRTOS网络依赖删除WiFi状态关联逻辑// 移除ESP32/FreeRTOS头文件// #include esp_log.h// #include freertos/FreeRTOS.h// #include freertos/event_groups.h// 删除WiFi状态相关宏/变量// #define WIFI_CONNECTED_BIT BIT0// static EventGroupHandle_t wifi_event_group;// 删除所有与WiFi联动的Packet Forwarder发送逻辑原UDP发LNS的代码3编译配置清理修改CMakeLists.txt/Makefile移除ESP32网络组件依赖# 移除ESP32网络组件原配置 # REQUIRES esp_wifi esp_http_server esp_netif freertos # 仅保留LoRa相关编译项 SRCS components/radio_drivers/sx126x/ral_sx126x.c SRCS components/liblorahub/lorahub_hal.c三、CH584M TMOS基础适配CH584M的TMOS是沁恒自研轻量级OS需替换原FreeRTOS的任务、事件、定时器为TMOS接口。1. TMOS基础初始化main.c#includeCH58x_common.h#includetmos.h// TMOS系统初始化voidsystem_init(void){SetSysClock(CLK_SOURCE_PLL_60MHz);// CH584M主频60MHzUART1_Init(115200);// 串口初始化调试用TMOS_Init();// TMOS核心初始化TMOS_Start();// 启动TMOS调度}intmain(void){system_init();lgw_connect();// LoRa硬件连接初始化lgw_radio_setup();// LoRa射频配置// TMOS主循环由TMOS接管无需裸机while(1)while(1){TMOS_Run();}}2. TMOS任务替换FreeRTOS任务原FreeRTOS的LoRa任务替换为TMOS任务// 原FreeRTOS任务// static void lora_task(void* arg) { ... }// TMOS LoRa任务staticvoidlora_tmos_task(void*pdata){tmos_event_tevent;while(1){// TMOS事件等待替代FreeRTOS xEventGroupWaitBitsif(TMOS_EventPend(event,0xFFFFFFFF,TMOS_WAIT_FOREVER)TMOS_SUCCESS){switch(event.event){caseEVENT_LORA_RX:// LoRa接收事件lgw_hal_rx_packet_process();// 处理LoRa接收包break;caseEVENT_LORA_TX:// LoRa发送事件lgw_hal_tx_packet_process();break;default:break;}}}}3. TMOS定时器替换esp_timer原ESP32的esp_timer替换为TMOS软件定时器#includetmos_timer.h#defineLORA_TIMER_ID0x01#defineLORA_TIMER_PERIOD10// 10ms// TMOS定时器回调替代esp_timer_callbackvoidlora_timer_cb(uint8_ttimer_id,uint8_tmsg){// 轮询LoRa BUSY状态/超时检测if(GPIO_ReadInputPin(GPIO_Pin_8)PIN_RESET)// BUSY引脚低电平{TMOS_EventSend(lora_tmos_task_id,EVENT_LORA_RX,0);// 发送接收事件}}// 初始化TMOS定时器voidlora_timer_init(void){TMOS_TimerCreate(LORA_TIMER_ID,lora_timer_cb);TMOS_TimerStart(LORA_TIMER_ID,LORA_TIMER_PERIOD,TMOS_TIMER_PERIODIC);// 周期触发}四、CH584M硬件驱动适配核心1. SPI驱动适配LoRa射频通信替换ESP32 SPI为CH584M SPI适配TMOS无DMA冲突// 硬件引脚定义根据实际PCB修改#defineLORA_SPI_SCLK_PINGPIO_Pin_2#defineLORA_SPI_MOSI_PINGPIO_Pin_3#defineLORA_SPI_MISO_PINGPIO_Pin_4#defineLORA_SPI_NSS_PINGPIO_Pin_5#defineLORA_SPI_RST_PINGPIO_Pin_6#defineLORA_SPI_DIO1_PINGPIO_Pin_7#defineLORA_SPI_BUSY_PINGPIO_Pin_8// CH584M SPI初始化替代esp32 spi_bus_initializevoidlora_spi_init(void){// 配置SPI引脚为复用功能GPIO_SetFunc(LORA_SPI_SCLK_PIN,GPIO_FUN_SPI0_SCK);GPIO_SetFunc(LORA_SPI_MOSI_PIN,GPIO_FUN_SPI0_MOSI);GPIO_SetFunc(LORA_SPI_MISO_PIN,GPIO_FUN_SPI0_MISO);// NSS引脚软件控制GPIO_ModeCfg(LORA_SPI_NSS_PIN,GPIO_ModeOut_PP_5mA);GPIO_SetBits(LORA_SPI_NSS_PIN);// 默认拉高// SPI0配置主机模式CPOL0CPHA0速率3.75MHz60MHz/16SPI0_MasterDefInit();SPI0_SetClockDiv(SPI_CLK_DIV_16);}// SPI读写函数替代ESP32 spi_device_transmituint8_tspi_lora_rw(uint8_ttx_data){while(SPI0_GetTxFIFOFreeNum()0);// 等待发送FIFO空闲SPI0_SendData(tx_data);while(SPI0_GetRxFIFOCount()0);// 等待接收FIFO有数据returnSPI0_RecvData();}// LoRa片选控制voidlora_nss_ctrl(uint8_ten){if(en)GPIO_SetBits(LORA_SPI_NSS_PIN);elseGPIO_ResetBits(LORA_SPI_NSS_PIN);}2. GPIO/中断适配DIO1/BUSY/RESETCH584M GPIO中断替换ESP32中断适配TMOS中断处理// GPIO初始化voidlora_gpio_init(void){// RST引脚输出GPIO_ModeCfg(LORA_SPI_RST_PIN,GPIO_ModeOut_PP_5mA);GPIO_SetBits(LORA_SPI_RST_PIN);// BUSY引脚输入上拉GPIO_ModeCfg(LORA_SPI_BUSY_PIN,GPIO_ModeIN_PU);// DIO1引脚输入上升沿中断LoRa接收完成触发GPIO_ModeCfg(LORA_SPI_DIO1_PIN,GPIO_ModeIN_PU);GPIO_ITModeCfg(LORA_SPI_DIO1_PIN,GPIO_IT_RisingEdge);PFIC_EnableIRQ(GPIO_IRQn);// 使能GPIO中断}// GPIO中断服务函数TMOS适配__interrupt__attribute__((used))voidGPIO_IRQHandler(void){if(GPIO_GetITFlag(LORA_SPI_DIO1_PIN)){GPIO_ClearITFlag(LORA_SPI_DIO1_PIN);// 清除中断标志// 向TMOS任务发送接收事件TMOS_EventSend(lora_tmos_task_id,EVENT_LORA_RX,0);}}// LoRa复位函数替代ESP32 gpio_reset_pinvoidlora_reset(void){GPIO_ResetBits(LORA_SPI_RST_PIN);TMOS_DelayMs(10);// TMOS毫秒延时GPIO_SetBits(LORA_SPI_RST_PIN);TMOS_DelayMs(50);}3. RAL层适配Radio Abstraction Layer修改components/smtc_ral/ral_sx126x.c替换ESP32硬件操作为CH584M接口// 替换SPI读写函数ral_status_tral_sx126x_write(constral_t*ral,constuint16_taddr,constuint8_t*data,constuint16_tsize){lora_nss_ctrl(0);// 拉低片选spi_lora_rw(0x02);// 写命令spi_lora_rw((addr8)0xFF);// 地址高字节spi_lora_rw(addr0xFF);// 地址低字节for(uint16_ti0;isize;i){spi_lora_rw(data[i]);}lora_nss_ctrl(1);// 拉高片选returnRAL_STATUS_OK;}ral_status_tral_sx126x_read(constral_t*ral,constuint16_taddr,uint8_t*data,constuint16_tsize){lora_nss_ctrl(0);spi_lora_rw(0x03);// 读命令spi_lora_rw((addr8)0xFF);spi_lora_rw(addr0xFF);for(uint16_ti0;isize;i){data[i]spi_lora_rw(0xFF);// 读数据}lora_nss_ctrl(1);returnRAL_STATUS_OK;}// 替换复位函数ral_status_tral_sx126x_reset(constral_t*ral){lora_reset();returnRAL_STATUS_OK;}4. LoRa PA功率配置适配CH584M供电保留原Heltec等板子的PA配置heltec_wifi_lora_32_v3.c适配CH584M的供电能力// 调整PA功率CH584M 3.3V供电建议最大20dBmconstsmtc_shield_sx126x_pa_pwr_cfg_tsmtc_shield_sx1262mb1das_pa_pwr_cfg_table[]{// 仅保留-9~20dBm配置删除超20dBm项避免供电不足{// -9dBm.power3,.pa_config{.hp_max0x01,.pa_duty_cycle0x01,.device_sel0x00,.pa_lut0x01},},// ... 保留中间功率档 ...{// 20dBm.power22,.pa_config{.hp_max0x06,.pa_duty_cycle0x03,.device_sel0x00,.pa_lut0x01},},};五、LoRaHub核心逻辑适配1. 移除Packet Forwarder网络传输改为本地处理修改lorahub_hal_rx.c删除UDP发送改为串口打印数据包voidlgw_hal_rx_packet_process(void){structlgw_pkt_rx_srx_pkt;if(lgw_hal_rx_read(rx_pkt)LGW_HAL_SUCCESS){// 原UDP发送逻辑删除替换为串口打印UART1_SendString(LoRa RX: );for(uint16_ti0;irx_pkt.size;i){UART1_SendHex(rx_pkt.payload[i]);UART1_SendChar( );}UART1_SendString(\r\n);}}2. 替换ESP32日志为CH584M串口日志原esp_log.h替换为CH584M串口打印// 替换ESP_LOGI/E等宏#defineLGW_LOGI(...)UART1_SendString(__VA_ARGS__)#defineLGW_LOGE(...)UART1_SendString(ERROR: );UART1_SendString(__VA_ARGS__)// 示例替换原ESP_LOGI(TAG, xxx)// ESP_LOGI(TAG_HAL, LoRa init ok); → LGW_LOGI(LoRa init ok\r\n);3. 适配TMOS的低功耗可选CH584M支持低功耗结合TMOS实现LoRa休眠时MCU低功耗voidlora_enter_sleep(void){ral_set_op_mode(lgw_ral,RAL_OP_MODE_SLEEP);// LoRa休眠TMOS_LowPowerEnter();// TMOS进入低功耗}六、编译与调试1. 编译环境配置工具链MounRiver StudioMRS导入CH584M TMOS SDK工程配置加入裁剪后的one_channel_hub核心代码radio_drivers、smtc_ral、liblorahub宏定义CONFIG_RADIO_TYPE_SX1262根据实际LoRa芯片、CH584M、TMOS链接脚本使用CH584M官方link.lds适配64KB RAM/512KB Flash。2. 调试关键点硬件接线确认CH584M与LoRa模块的SPI/DIO1/BUSY/RST引脚连接正确SPI速率CH584M SPI速率≤10MHz建议3.75/7.5MHz避免LoRa通信异常中断优先级GPIO中断优先级高于TMOS定时器避免事件丢失射频参数修改lorahub_hal.c中rxrf_conf频率、rxif_conf扩频因子/带宽适配本地频段。七、核心适配清单原ESP32/FreeRTOS接口CH584M/TMOS替代接口spi_bus_initializeSPI0_MasterDefInit() 自定义SPI读写gpio_reset_pin/gpio_set_levelGPIO_ModeCfg()/GPIO_SetBits()esp_timerTMOS_TimerCreate()/TMOS_TimerStart()xTaskCreateTMOS_TaskCreate()xEventGroupWaitBitsTMOS_EventPend()/TMOS_EventSend()esp_log.hCH584M UART串口打印FreeRTOS延时TMOS_DelayMs()/TMOS_DelayUs()通过以上适配one_channel_hub的核心LoRa功能可在CH584MTMOS平台稳定运行且彻底移除了WiFi/HTTP等网络相关代码。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询