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

stm32h743 阿波罗v2 NetXduo http server CubeIDE+CubeMX

在这边要设置mpu的大小,要用到http server,mpu得设置的大一些

我是这么设置的,做一个参考

同样,在FLASH.ld里面也要对应修改,SECTIONS里增加.tcp_sec和 .nx_data两个区,我们用ram_d2区域去做网络,这个就是对应每个数据在d2区域的起点。


在CubeMX里,需要用到filex、dhcp和web_server,记得勾选上

然后需要把net的栈调大,最少要40*1024 


在app_filex.c里删掉MX_FileX_Init多余的部分


在netxDuo里设置,在头文件里设置静态ip,我自己设置的是192.168.8.116

 app_netxduo.c

/* USER CODE BEGIN Header */
/********************************************************************************* @file    app_netxduo.c* @author  MCD Application Team* @brief   NetXDuo applicative file******************************************************************************* @attention** Copyright (c) 2020-2021 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header *//* Includes ------------------------------------------------------------------*/
#include "app_netxduo.h"/* Private includes ----------------------------------------------------------*/
#include "nxd_dhcp_client.h"
/* USER CODE BEGIN Includes */
#include   "main.h"
#include   "nx_web_http_server.h"
#include   "app_filex.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
TX_THREAD      NxAppThread;
NX_PACKET_POOL NxAppPool;
NX_IP          NetXDuoEthIpInstance;
TX_SEMAPHORE   DHCPSemaphore;
NX_DHCP        DHCPClient;
/* USER CODE BEGIN PV */
/* Define the ThreadX , NetX and FileX object control blocks. *//* Define Threadx global data structures. */
TX_THREAD AppServerThread;
TX_THREAD AppLinkThread;/* Define NetX global data structures. */NX_PACKET_POOL WebServerPool;ULONG IpAddress;
ULONG NetMask;
ULONG free_bytes;NX_WEB_HTTP_SERVER HTTPServer;/* Set nx_server_pool start address */
#if defined ( __ICCARM__ ) /* IAR Compiler */
#pragma location = ".NxServerPoolSection"
#elif defined ( __CC_ARM ) || defined(__ARMCC_VERSION) /* ARM Compiler 5/6 */
__attribute__((section(".NxServerPoolSection")))
#elif defined ( __GNUC__ ) /* GNU Compiler */
__attribute__((section(".NxServerPoolSection")))
#endif
static uint8_t nx_server_pool[SERVER_POOL_SIZE];/* Define FileX global data structures. *//* the server reads the content from the uSD, a FX_MEDIA instance is required */
FX_MEDIA                SDMedia;/* Buffer for FileX FX_MEDIA sector cache. this should be 32-Bytes aligned to avoidcache maintenance issues */
ALIGN_32BYTES (uint32_t DataBuffer[512]);/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
static VOID nx_app_thread_entry (ULONG thread_input);
static VOID ip_address_change_notify_callback(NX_IP *ip_instance, VOID *ptr);
/* USER CODE BEGIN PFP *//* HTTP server thread entry */
static void  nx_server_thread_entry(ULONG thread_input);
static VOID App_Link_Thread_Entry(ULONG thread_input);/* Server callback when a new request from a client is triggered */
static UINT webserver_request_notify_callback(NX_WEB_HTTP_SERVER *server_ptr, UINT request_type, CHAR *resource, NX_PACKET *packet_ptr);
/* USER CODE END PFP *//*** @brief  Application NetXDuo Initialization.* @param memory_ptr: memory pointer* @retval int*/
UINT MX_NetXDuo_Init(VOID *memory_ptr)
{UINT ret = NX_SUCCESS;TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;CHAR *pointer;/* USER CODE BEGIN MX_NetXDuo_MEM_POOL *//* USER CODE END MX_NetXDuo_MEM_POOL *//* USER CODE BEGIN 0 */printf("Nx_Webserver application started..\n");/* USER CODE END 0 *//* Initialize the NetXDuo system. */nx_system_initialize();/* Allocate the memory for packet_pool.  */ret = tx_byte_allocate(byte_pool, (VOID **) &pointer, NX_APP_PACKET_POOL_SIZE, TX_NO_WAIT);if (ret!= NX_SUCCESS){return TX_POOL_ERROR;}/* Create the Packet pool to be used for packet allocation,* If extra NX_PACKET are to be used the NX_APP_PACKET_POOL_SIZE should be increased*/ret = nx_packet_pool_create(&NxAppPool, "NetXDuo App Pool", DEFAULT_PAYLOAD_SIZE, pointer, NX_APP_PACKET_POOL_SIZE);if (ret != NX_SUCCESS){return NX_POOL_ERROR;}/* Allocate the memory for Ip_Instance */if (tx_byte_allocate(byte_pool, (VOID **) &pointer, Nx_IP_INSTANCE_THREAD_SIZE, TX_NO_WAIT) != TX_SUCCESS){return TX_POOL_ERROR;}/* Create the main NX_IP instance */ret = nx_ip_create(&NetXDuoEthIpInstance, "NetX Ip instance", NX_APP_DEFAULT_IP_ADDRESS, NX_APP_DEFAULT_NET_MASK, &NxAppPool, nx_stm32_eth_driver,pointer, Nx_IP_INSTANCE_THREAD_SIZE, NX_APP_INSTANCE_PRIORITY);if (ret != NX_SUCCESS){return NX_NOT_SUCCESSFUL;}/* Allocate the memory for ARP */if (tx_byte_allocate(byte_pool, (VOID **) &pointer, DEFAULT_ARP_CACHE_SIZE, TX_NO_WAIT) != TX_SUCCESS){return TX_POOL_ERROR;}/* Enable the ARP protocol and provide the ARP cache size for the IP instance *//* USER CODE BEGIN ARP_Protocol_Initialization *//* USER CODE END ARP_Protocol_Initialization */ret = nx_arp_enable(&NetXDuoEthIpInstance, (VOID *)pointer, DEFAULT_ARP_CACHE_SIZE);if (ret != NX_SUCCESS){return NX_NOT_SUCCESSFUL;}/* Enable the ICMP *//* USER CODE BEGIN ICMP_Protocol_Initialization *//* USER CODE END ICMP_Protocol_Initialization */ret = nx_icmp_enable(&NetXDuoEthIpInstance);if (ret != NX_SUCCESS){return NX_NOT_SUCCESSFUL;}/* Enable TCP Protocol *//* USER CODE BEGIN TCP_Protocol_Initialization *//* USER CODE END TCP_Protocol_Initialization */ret = nx_tcp_enable(&NetXDuoEthIpInstance);if (ret != NX_SUCCESS){return NX_NOT_SUCCESSFUL;}/* Enable the UDP protocol required for  DHCP communication *//* USER CODE BEGIN UDP_Protocol_Initialization *//* USER CODE END UDP_Protocol_Initialization */ret = nx_udp_enable(&NetXDuoEthIpInstance);if (ret != NX_SUCCESS){return NX_NOT_SUCCESSFUL;}/* Allocate the memory for main thread   */if (tx_byte_allocate(byte_pool, (VOID **) &pointer, NX_APP_THREAD_STACK_SIZE, TX_NO_WAIT) != TX_SUCCESS){return TX_POOL_ERROR;}/* Create the main thread */ret = tx_thread_create(&NxAppThread, "NetXDuo App thread", nx_app_thread_entry , 0, pointer, NX_APP_THREAD_STACK_SIZE,NX_APP_THREAD_PRIORITY, NX_APP_THREAD_PRIORITY, TX_NO_TIME_SLICE, TX_AUTO_START);if (ret != TX_SUCCESS){return TX_THREAD_ERROR;}/* Create the DHCP client *//* USER CODE BEGIN DHCP_Protocol_Initialization *//* USER CODE END DHCP_Protocol_Initialization */ret = nx_dhcp_create(&DHCPClient, &NetXDuoEthIpInstance, "DHCP Client");if (ret != NX_SUCCESS){return NX_DHCP_ERROR;}/* set DHCP notification callback  */tx_semaphore_create(&DHCPSemaphore, "DHCP Semaphore", 0);/* USER CODE BEGIN MX_NetXDuo_Init *//* Allocate the server packet pool. */ret = tx_byte_allocate(byte_pool, (VOID **) &pointer, SERVER_POOL_SIZE, TX_NO_WAIT);/* Check server packet pool memory allocation. */if (ret != NX_SUCCESS){printf("Packed pool memory allocation failed : 0x%02x\n", ret);Error_Handler();}/* Create the server packet pool. */ret = nx_packet_pool_create(&WebServerPool, "HTTP Server Packet Pool", SERVER_PACKET_SIZE, nx_server_pool, SERVER_POOL_SIZE);/* Check for server pool creation status. */if (ret != NX_SUCCESS){printf("Server pool creation failed : 0x%02x\n", ret);Error_Handler();}/* Allocate the server stack. */ret = tx_byte_allocate(byte_pool, (VOID **) &pointer, SERVER_STACK, TX_NO_WAIT);/* Check server stack memory allocation. */if (ret != NX_SUCCESS){printf("Server stack memory allocation failed : 0x%02x\n", ret);Error_Handler();}/* Create the HTTP Server. */ret = nx_web_http_server_create(&HTTPServer, "WEB HTTP Server", &NetXDuoEthIpInstance, CONNECTION_PORT,&SDMedia, pointer,SERVER_STACK, &WebServerPool, NX_NULL, webserver_request_notify_callback);if (ret != NX_SUCCESS){printf("HTTP Server creation failed: 0x%02x\n", ret);Error_Handler();}/* Allocate the TCP server thread stack. */ret = tx_byte_allocate(byte_pool, (VOID **) &pointer, 2 * DEFAULT_MEMORY_SIZE, TX_NO_WAIT);/* Check server thread memory allocation. */if (ret != NX_SUCCESS){printf("Server thread memory allocation failed : 0x%02x\n", ret);Error_Handler();}/* create the web server thread */ret = tx_thread_create(&AppServerThread, "App Server Thread", nx_server_thread_entry, 0, pointer, 2 * DEFAULT_MEMORY_SIZE,DEFAULT_PRIORITY, DEFAULT_PRIORITY, TX_NO_TIME_SLICE, TX_DONT_START);if (ret != TX_SUCCESS){return NX_NOT_ENABLED;}/* Allocate the memory for toggle green led thread  */if (tx_byte_allocate(byte_pool, (VOID **) &pointer, DEFAULT_MEMORY_SIZE, TX_NO_WAIT) != TX_SUCCESS){return TX_POOL_ERROR;}/* Allocate the memory for Link thread   */if (tx_byte_allocate(byte_pool, (VOID **) &pointer,2 *  DEFAULT_MEMORY_SIZE, TX_NO_WAIT) != TX_SUCCESS){return TX_POOL_ERROR;}/* create the Link thread */ret = tx_thread_create(&AppLinkThread, "App Link Thread", App_Link_Thread_Entry, 0, pointer, 2 * DEFAULT_MEMORY_SIZE,LINK_PRIORITY, LINK_PRIORITY, TX_NO_TIME_SLICE, TX_AUTO_START);if (ret != TX_SUCCESS){return NX_NOT_ENABLED;}/* USER CODE END MX_NetXDuo_Init */return ret;
}/**
* @brief  ip address change callback.
* @param ip_instance: NX_IP instance
* @param ptr: user data
* @retval none
*/
static VOID ip_address_change_notify_callback(NX_IP *ip_instance, VOID *ptr)
{/* USER CODE BEGIN ip_address_change_notify_callback *//* USER CODE END ip_address_change_notify_callback *//* release the semaphore as soon as an IP address is available */tx_semaphore_put(&DHCPSemaphore);
}/**
* @brief  Main thread entry.
* @param thread_input: ULONG user argument used by the thread entry
* @retval none
*/
static VOID nx_app_thread_entry (ULONG thread_input)
{/* USER CODE BEGIN Nx_App_Thread_Entry 0 *//* USER CODE END Nx_App_Thread_Entry 0 */UINT ret = NX_SUCCESS;/* USER CODE BEGIN Nx_App_Thread_Entry 1 *//* USER CODE END Nx_App_Thread_Entry 1 *//* register the IP address change callback */ret = nx_ip_address_change_notify(&NetXDuoEthIpInstance, ip_address_change_notify_callback, NULL);if (ret != NX_SUCCESS){/* USER CODE BEGIN IP address change callback error *//* Error, call error handler.*/Error_Handler();/* USER CODE END IP address change callback error */}/* start the DHCP client */ret = nx_dhcp_start(&DHCPClient);if (ret != NX_SUCCESS){/* USER CODE BEGIN DHCP client start error *//* Error, call error handler.*/Error_Handler();/* USER CODE END DHCP client start error */}/* wait until an IP address is ready */
//  if(tx_semaphore_get(&DHCPSemaphore, NX_APP_DEFAULT_TIMEOUT) != TX_SUCCESS)
//  {
//    /* USER CODE BEGIN DHCPSemaphore get error */
//
//    /* Error, call error handler.*/
//    Error_Handler();
//
//    /* USER CODE END DHCPSemaphore get error */
//  }/* USER CODE BEGIN Nx_App_Thread_Entry 2 *//* get IP address */ret = nx_ip_address_get(&NetXDuoEthIpInstance, &IpAddress, &NetMask);PRINT_IP_ADDRESS(IpAddress);if (ret != TX_SUCCESS){Error_Handler();}/* the network is correctly initialized, start the WEB server thread */tx_thread_resume(&AppServerThread);/* this thread is not needed any more, we relinquish it */tx_thread_relinquish();/* USER CODE END Nx_App_Thread_Entry 2 */}
/* USER CODE BEGIN 1 */UINT webserver_request_notify_callback(NX_WEB_HTTP_SERVER *server_ptr, UINT request_type, CHAR *resource, NX_PACKET *packet_ptr)
{CHAR temp_string[30] = {'\0'};CHAR data[512] = {'\0'};UINT string_length;NX_PACKET *resp_packet_ptr;UINT status;ULONG resumptions;ULONG suspensions;ULONG idle_returns;ULONG non_idle_returns;ULONG total_bytes_sent;ULONG total_bytes_received;ULONG connections;ULONG disconnections;/** At each new request we toggle the green led, but in a real use case this callback can serve* to trigger more advanced tasks, like starting background threads or gather system info* and append them into the web page.*//* Get the requested data from packet */if (strcmp(resource, "/GetNXData") == 0){nx_tcp_info_get(&NetXDuoEthIpInstance, NULL, &total_bytes_sent, NULL, &total_bytes_received, NULL,  NULL, NULL, &connections, &disconnections, NULL, NULL);sprintf (data, "%lu,%lu,%lu,%lu",total_bytes_received, total_bytes_sent, connections, disconnections);}else if (strcmp(resource, "/GetNetInfo") == 0){sprintf(data, "%lu.%lu.%lu.%lu,%d", (IpAddress >> 24) & 0xff, (IpAddress >> 16) & 0xff, (IpAddress >> 8) & 0xff, IpAddress& 0xff, CONNECTION_PORT);}else if (strcmp(resource, "/GetNXPacket") == 0){sprintf (data, "%lu", NxAppPool.nx_packet_pool_available);}else if (strcmp(resource, "/GetNXPacketlen") == 0){sprintf (data, "%lu", (NxAppPool.nx_packet_pool_available_list)->nx_packet_length );}else{return NX_SUCCESS;}/* Derive the client request type from the client request. */nx_web_http_server_type_get(server_ptr, server_ptr -> nx_web_http_server_request_resource, temp_string, &string_length);/* Null terminate the string. */temp_string[string_length] = '\0';/* Now build a response header with server status is OK and no additional header info. */status = nx_web_http_server_callback_generate_response_header(server_ptr, &resp_packet_ptr, NX_WEB_HTTP_STATUS_OK,strlen(data), temp_string, NX_NULL);status = _nxe_packet_data_append(resp_packet_ptr, data, strlen(data), server_ptr->nx_web_http_server_packet_pool_ptr, NX_WAIT_FOREVER);/* Now send the packet! */status = nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);if (status != NX_SUCCESS){nx_packet_release(resp_packet_ptr);return status;}return(NX_WEB_HTTP_CALLBACK_COMPLETED);
}/**
* @brief  Application thread for HTTP web server
* @param  thread_input : thread input
* @retval None
*/static NX_WEB_HTTP_SERVER_MIME_MAP app_mime_maps[] =
{{"css", "text/css"},{"svg", "image/svg+xml"},{"png", "image/png"},{"jpg", "image/jpg"}
};void nx_server_thread_entry(ULONG thread_input)
{/* HTTP WEB SERVER THREAD Entry */UINT    status;NX_PARAMETER_NOT_USED(thread_input);status = nx_web_http_server_mime_maps_additional_set(&HTTPServer,&app_mime_maps[0], 4);/* Start the WEB HTTP Server. */status = nx_web_http_server_start(&HTTPServer);/* Check the WEB HTTP Server starting status. */if (status != NX_SUCCESS){/* Print HTTP WEB Server starting error. */printf("HTTP WEB Server Starting Failed, error: 0x%02x\n", status);/* Error, call error handler.*/Error_Handler();}else{/* Print HTTP WEB Server Starting success. */printf("HTTP WEB Server successfully started.\n");/* LED1 On. */}
}/**
* @brief  Link thread entry
* @param thread_input: ULONG thread parameter
* @retval none
*/
static VOID App_Link_Thread_Entry(ULONG thread_input)
{ULONG actual_status;UINT linkdown = 0, status;while(1){/* Get Physical Link status. */status = nx_ip_interface_status_check(&NetXDuoEthIpInstance, 0, NX_IP_LINK_ENABLED,&actual_status, 10);if(status == NX_SUCCESS){if(linkdown == 1){linkdown = 0;status = nx_ip_interface_status_check(&NetXDuoEthIpInstance, 0, NX_IP_ADDRESS_RESOLVED,&actual_status, 10);if(status == NX_SUCCESS){/* The network cable is connected again. */printf("The network cable is connected again.\n");/* Print Webserver Client is available again. */printf("Webserver Client is available again.\n");}else{/* The network cable is connected. */printf("The network cable is connected.\n");/* Send command to Enable Nx driver. */nx_ip_driver_direct_command(&NetXDuoEthIpInstance, NX_LINK_ENABLE,&actual_status);/* Restart DHCP Client. */nx_dhcp_stop(&DHCPClient);nx_dhcp_start(&DHCPClient);}}}else{if(0 == linkdown){linkdown = 1;/* The network cable is not connected. */printf("The network cable is not connected.\n");}}tx_thread_sleep(NX_APP_CABLE_CONNECTION_CHECK_PERIOD);}
}
/* USER CODE END 1 */

app_netxduo.h

/* USER CODE BEGIN Header */
/********************************************************************************* @file    app_netxduo.h* @author  MCD Application Team* @brief   NetXDuo applicative header file******************************************************************************* @attention** Copyright (c) 2020-2021 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __APP_NETXDUO_H__
#define __APP_NETXDUO_H__#ifdef __cplusplus
extern "C" {
#endif/* Includes ------------------------------------------------------------------*/
#include "nx_api.h"/* Private includes ----------------------------------------------------------*/
#include "nx_stm32_eth_driver.h"/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET *//* USER CODE END ET *//* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC *//* USER CODE END EC */
/* The DEFAULT_PAYLOAD_SIZE should match with RxBuffLen configured via MX_ETH_Init */
#ifndef DEFAULT_PAYLOAD_SIZE
#define DEFAULT_PAYLOAD_SIZE      1536
#endif#ifndef DEFAULT_ARP_CACHE_SIZE
#define DEFAULT_ARP_CACHE_SIZE    1024
#endif/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */#define PRINT_IP_ADDRESS(addr) do { \printf("%s: %lu.%lu.%lu.%lu \n", #addr, \(addr >> 24) & 0xff, \(addr >> 16) & 0xff, \(addr >> 8) & 0xff, \addr& 0xff);\}while(0)
/* USER CODE END EM *//* Exported functions prototypes ---------------------------------------------*/
UINT MX_NetXDuo_Init(VOID *memory_ptr);/* USER CODE BEGIN EFP */
#define NX_APP_INSTANCE_PRIORITY             5
/* USER CODE END EFP *//* Private defines -----------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* Pirority IP creation */
#define DEFAULT_MEMORY_SIZE              1024
#define DEFAULT_MAIN_PRIORITY            10
#define TOGGLE_LED_PRIORITY              15
#define DEFAULT_PRIORITY                 5
#define LINK_PRIORITY                    11/*Packet payload size */
#define PACKET_PAYLOAD_SIZE              1536
/* Packet pool size */
#define NX_PACKET_POOL_SIZE              ((1536 + sizeof(NX_PACKET)) * 50)/* APP Cache size  */
#define ARP_CACHE_SIZE                   1024/* Wait option for getting @IP */
#define WAIT_OPTION                      1000
/* Entry input for Main thread */
#define ENTRY_INPUT                      0
/* Main Thread priority */
#define THREAD_PRIO                      4
/* Main Thread preemption threshold */
#define THREAD_PREEMPT_THRESHOLD         4
/* Web application size */
#define WEB_APP_SIZE                     2048
/* Memory size */
#define MEMORY_SIZE                      2048
/* HTTP connection port */
#define CONNECTION_PORT                  80
/* Server packet size */
#define SERVER_PACKET_SIZE               (NX_WEB_HTTP_SERVER_MIN_PACKET_SIZE * 2)
/* Server stack */
#define SERVER_STACK                     4096/* Server pool size */
#define SERVER_POOL_SIZE                 (SERVER_PACKET_SIZE * 4)
/* SD Driver information pointer */
#define SD_DRIVER_INFO_POINTER           0#define NULL_IP_ADDRESS                  IP_ADDRESS(0,0,0,0)#define NX_APP_CABLE_CONNECTION_CHECK_PERIOD  (6 * NX_IP_PERIODIC_RATE)
/* USER CODE END PD */#define NX_APP_DEFAULT_TIMEOUT               (10 * NX_IP_PERIODIC_RATE)#define NX_APP_PACKET_POOL_SIZE              ((DEFAULT_PAYLOAD_SIZE + sizeof(NX_PACKET)) * 10)#define NX_APP_THREAD_STACK_SIZE             2 * 1024#define Nx_IP_INSTANCE_THREAD_SIZE           2 * 1024#define NX_APP_THREAD_PRIORITY               10#ifndef NX_APP_INSTANCE_PRIORITY
#define NX_APP_INSTANCE_PRIORITY             NX_APP_THREAD_PRIORITY
#endif#define NX_APP_DEFAULT_IP_ADDRESS                   IP_ADDRESS(192,168,8,116)#define NX_APP_DEFAULT_NET_MASK                     IP_ADDRESS(255,255,255,0)/* USER CODE BEGIN 1 *//* USER CODE END 1 */#ifdef __cplusplus
}
#endif
#endif /* __APP_NETXDUO_H__ */

编译下装运行,在这里定义了接口

 用网页访问

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ABeam News | FY25 ABeam德硕大中华区入社式,飞往崭新航向!
  • MD5加密和注册页面的编写
  • 【Vue3】export, import, export default
  • 编程语言及系统发展:探索计算世界的演进之旅
  • 模板方法模式的实现
  • 昇思25天学习打卡营第17天|基于MobileNetv2的垃圾分类
  • 标签印刷检测,如何做到百分百准确?
  • mysql中select语句的执行顺序
  • 全网最炸裂的5款SD涩涩模型!身体真的是越来越不好了!建议收藏,晚上自己偷偷打开看!
  • p14数组(2)
  • CSS 【实用教程】(2024最新版)
  • 电商出海第一步,云手机或成重要因素
  • 本地部署私人知识库的大模型!Llama 3 + RAG!
  • 通用代码生成器模板体系,域对象,枚举和动词算子
  • UCOS-III 与UCOS-III主要功能差异
  • 《深入 React 技术栈》
  • 2017届校招提前批面试回顾
  • 230. Kth Smallest Element in a BST
  • Apache Zeppelin在Apache Trafodion上的可视化
  • codis proxy处理流程
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker容器管理
  • Effective Java 笔记(一)
  • ES学习笔记(12)--Symbol
  • Javascript设计模式学习之Observer(观察者)模式
  • Java小白进阶笔记(3)-初级面向对象
  • Laravel5.4 Queues队列学习
  • Mysql优化
  • Redis学习笔记 - pipline(流水线、管道)
  • Vultr 教程目录
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 高程读书笔记 第六章 面向对象程序设计
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 工作中总结前端开发流程--vue项目
  • 规范化安全开发 KOA 手脚架
  • 力扣(LeetCode)965
  • 强力优化Rancher k8s中国区的使用体验
  • 如何胜任知名企业的商业数据分析师?
  • 由插件封装引出的一丢丢思考
  • raise 与 raise ... from 的区别
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • #Java第九次作业--输入输出流和文件操作
  • $$$$GB2312-80区位编码表$$$$
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (10)ATF MMU转换表
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Java)【深基9.例1】选举学生会
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm考生评分系统 毕业设计 071114