FreeRTOS學習01_移植FreeRTOS到STM32(圖文詳解)

移植FreeRTOS到STM32

  • 1、前言
  • 2、獲取 STM32 的裸機工程模板
  • 3、下載 FreeRTOS V9.0.0 源碼
  • 4、FreeRTOS文件夾內容簡介
  • 5、移植FreeRTOS
  • 5.1 更改STM32工程模板文件夾名字
  • 5.2 提取FreeRTOS最簡源碼
  • 5.3 拷貝 FreeRTOSConfig.h 文件到 user 文件夾
  • 5.4 添加 FreeRTOS 源碼到工程組文件夾
  • 5.5 指定 FreeRTOS 頭文件的路徑
  • 5.6 修改FreeRTOSConfig.h文件
  • 5.7 修改main函數
  • 6、倉庫地址
  • 6、總結

1、前言

記錄一下移植FreeRTOS到STM32的過程,方便自己日后回顧,也可以給有需要的人提供幫助。每個目錄都是知識點,大家可以按照目錄逐步瀏覽,也可以點擊目錄跳轉到所需部分。

2、獲取 STM32 的裸機工程模板

我是直接使用野火 STM32 開發板配套的固件庫例程中的GPIO 輸出—使用固件庫點亮 LED工程模板,有需要可以私信我,我也會把這個工程放到倉庫里,,也可以去倉庫里下載

在這里插入圖片描述

3、下載 FreeRTOS V9.0.0 源碼

可以通過官網和代碼托管網站下載,也可以下載我倉庫里面的,下載V9.0.0版本就可以,下面的圖片是代碼托管網站的下載步驟

官網
代碼托管網站
在這里插入圖片描述

點擊進去后下載zip文件

在這里插入圖片描述

4、FreeRTOS文件夾內容簡介

解壓zip文件后,有下列的文件,FreeRTOS-Plus文件夾是一些第三方的產品

在這里插入圖片描述

FreeRTOS文件夾下有下列文件夾

在這里插入圖片描述

Source文件夾:存放內核源碼,最重要的文件夾Demo文件夾:各種開發平臺的完整Demo,開發者可以方便的以此搭建出自己的項目,甚至直接使用。License文件夾:這里面只有一個許可文件“license.txt”,用FreeRTOS做產品的話就需要看看這個文件。
點擊進去Source文件夾

在這里插入圖片描述

include文件夾:FreeRTOS 的通用的頭文件portable文件夾:與編譯器相關的文件,keil編譯環境,使用RVDS文件夾

5、移植FreeRTOS

5.1 更改STM32工程模板文件夾名字

把固件庫點燈那個文件夾名字改為移植FreeRTOS模板

在這里插入圖片描述

5.2 提取FreeRTOS最簡源碼

在移植FreeRTOS模板文件夾下新建一個FreeRTOS文件夾,再在FreeRTOS文件夾下創建一個src文件夾,用于存放源碼。

在這里插入圖片描述
在這里插入圖片描述

把FreeRTOS文件夾下的所有.c文件到src文件夾下

在這里插入圖片描述

再新建一個port文件夾,把源碼中的RVDS和MemMang文件夾放到port文件夾下

在這里插入圖片描述
在這里插入圖片描述

再把FreeRTOS源碼下的include文件夾復制到模板文件夾下

在這里插入圖片描述
在這里插入圖片描述

5.3 拷貝 FreeRTOSConfig.h 文件到 user 文件夾

打開 FreeRTOSv9.0.0 源碼,在“FreeRTOSv9.0.0\FreeRTOS\Demo”文件夾下面找到 “ CORTEX_STM32F103_Keil ” 這 個 文 件 夾 , 雙 擊 打 開 , 在 其 根 目 錄 下 找 到 這 個 “FreeRTOSConfig.h”文件,然后拷貝到我們工程的 user 文件夾下即可

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

5.4 添加 FreeRTOS 源碼到工程組文件夾

打開工程,創建建 FreeRTOS/src 和 FreeRTOS/port 兩個組文件夾,再把相關文件添加進去

在這里插入圖片描述
在這里插入圖片描述
注:port\RVDS\ARM_CM文件夾,根據自己的開發板選擇相應的文件夾,比如我的是STM32F103VET6,就選擇port\RVDS\ARM_CM3

把FreeRTOSConfig.h添加到USER分組下

在這里插入圖片描述
在這里插入圖片描述

5.5 指定 FreeRTOS 頭文件的路徑

將FreeRTOS\include 和FreeRTOS\port\RVDS\ARM_CM3路徑添加到開發環境中

在這里插入圖片描述

5.6 修改FreeRTOSConfig.h文件

用野火的指南者FreeRTOSConfig.h文件替換掉源碼的FreeRTOSConfig.h文件
野火指南著FreeRTOSConfig.h文件代碼
/*FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.All rights reservedVISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.This file is part of the FreeRTOS distribution.FreeRTOS is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License (version 2) as published by theFree Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.***************************************************************************>>!   NOTE: The modification to the GPL is included to allow you to     !<<>>!   distribute a combined work that includes FreeRTOS without being   !<<>>!   obliged to provide the source code for proprietary components     !<<>>!   outside of the FreeRTOS kernel.                                   !<<***************************************************************************FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE.  Full license text is available on the followinglink: http://www.freertos.org/a00114.html****************************************************************************                                                                       **    FreeRTOS provides completely free yet professionally developed,    **    robust, strictly quality controlled, supported, and cross          **    platform software that is more than just the market leader, it     **    is the industry's de facto standard.                               **                                                                       **    Help yourself get started quickly while simultaneously helping     **    to support the FreeRTOS project by purchasing a FreeRTOS           **    tutorial book, reference manual, or both:                          **    http://www.FreeRTOS.org/Documentation                              **                                                                       ****************************************************************************http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by readingthe FAQ page "My application does not run, what could be wrong?".  Have youdefined configASSERT()?http://www.FreeRTOS.org/support - In return for receiving this top qualityembedded software for free we request you assist our global community byparticipating in the support forum.http://www.FreeRTOS.org/training - Investing in training allows your team tobe as productive as possible as early as possible.  Now you can receiveFreeRTOS training directly from Richard Barry, CEO of Real Time EngineersLtd, and the world's leading authority on the world's leading RTOS.http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,including FreeRTOS+Trace - an indispensable productivity tool, a DOScompatible FAT file system, and our tiny thread aware UDP/IP stack.http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to HighIntegrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOSlicenses offer ticketed support, indemnification and commercial middleware.http://www.SafeRTOS.com - High Integrity Systems also provide a safetyengineered and independently SIL3 certified version for use in safety andmission critical applications that require provable dependability.*/#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H#include "stm32f10x.h"
#include "bsp_usart.h"//針對不同的編譯器調用不同的stdint.h文件
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)#include <stdint.h>extern uint32_t SystemCoreClock;
#endif//斷言
#define vAssertCalled(char,int) printf("Error:%s,%d\r\n",char,int)
#define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__)/*************************************************************************               FreeRTOS基礎配置配置選項 *********************************************************************/
/* 置1:RTOS使用搶占式調度器;置0:RTOS使用協作式調度器(時間片)* * 注:在多任務管理機制上,操作系統可以分為搶占式和協作式兩種。* 協作式操作系統是任務主動釋放CPU后,切換到下一個任務。* 任務切換的時機完全取決于正在運行的任務。*/
#define configUSE_PREEMPTION					  1//1使能時間片調度(默認式使能的)
#define configUSE_TIME_SLICING					1		/* 某些運行FreeRTOS的硬件有兩種方法選擇下一個要執行的任務:* 通用方法和特定于硬件的方法(以下簡稱“特殊方法”)。* * 通用方法:*      1.configUSE_PORT_OPTIMISED_TASK_SELECTION 為 0 或者硬件不支持這種特殊方法。*      2.可以用于所有FreeRTOS支持的硬件*      3.完全用C實現,效率略低于特殊方法。*      4.不強制要求限制最大可用優先級數目* 特殊方法:*      1.必須將configUSE_PORT_OPTIMISED_TASK_SELECTION設置為1。*      2.依賴一個或多個特定架構的匯編指令(一般是類似計算前導零[CLZ]指令)。*      3.比通用方法更高效*      4.一般強制限定最大可用優先級數目為32* 一般是硬件計算前導零指令,如果所使用的,MCU沒有這些硬件指令的話此宏應該設置為0!*/
#define configUSE_PORT_OPTIMISED_TASK_SELECTION	        1                       /* 置1:使能低功耗tickless模式;置0:保持系統節拍(tick)中斷一直運行* 假設開啟低功耗的話可能會導致下載出現問題,因為程序在睡眠中,可用以下辦法解決* * 下載方法:*      1.將開發版正常連接好*      2.按住復位按鍵,點擊下載瞬間松開復位按鍵*     *      1.通過跳線帽將 BOOT 0 接高電平(3.3V)*      2.重新上電,下載*    * 			1.使用FlyMcu擦除一下芯片,然后進行下載*			STMISP -> 清除芯片(z)*/
#define configUSE_TICKLESS_IDLE													0   /** 寫入實際的CPU內核時鐘頻率,也就是CPU指令執行頻率,通常稱為Fclk* Fclk為供給CPU內核的時鐘信號,我們所說的cpu主頻為 XX MHz,* 就是指的這個時鐘信號,相應的,1/Fclk即為cpu時鐘周期;*/
#define configCPU_CLOCK_HZ						  (SystemCoreClock)//RTOS系統節拍中斷的頻率。即一秒中斷的次數,每次中斷RTOS都會進行任務調度
#define configTICK_RATE_HZ						  (( TickType_t )1000)//可使用的最大優先級
#define configMAX_PRIORITIES					  (32)//空閑任務使用的堆棧大小
#define configMINIMAL_STACK_SIZE				((unsigned short)128)//任務名字字符串長度
#define configMAX_TASK_NAME_LEN					(16)//系統節拍計數器變量數據類型,1表示為16位無符號整形,0表示為32位無符號整形
#define configUSE_16_BIT_TICKS					0                      //空閑任務放棄CPU使用權給其他同優先級的用戶任務
#define configIDLE_SHOULD_YIELD					1           //啟用隊列
#define configUSE_QUEUE_SETS					  0    //開啟任務通知功能,默認開啟
#define configUSE_TASK_NOTIFICATIONS    1   //使用互斥信號量
#define configUSE_MUTEXES						    0    //使用遞歸互斥信號量                                            
#define configUSE_RECURSIVE_MUTEXES			0   //為1時使用計數信號量
#define configUSE_COUNTING_SEMAPHORES		0/* 設置可以注冊的信號量和消息隊列個數 */
#define configQUEUE_REGISTRY_SIZE				10                                 #define configUSE_APPLICATION_TASK_TAG		  0                       /*****************************************************************FreeRTOS與內存申請有關配置選項                                               
*****************************************************************/
//支持動態內存申請
#define configSUPPORT_DYNAMIC_ALLOCATION        1    
//支持靜態內存
#define configSUPPORT_STATIC_ALLOCATION					0					
//系統所有總的堆大小
#define configTOTAL_HEAP_SIZE					((size_t)(36*1024))    /***************************************************************FreeRTOS與鉤子函數有關的配置選項                                            
**************************************************************/
/* 置1:使用空閑鉤子(Idle Hook類似于回調函數);置0:忽略空閑鉤子* * 空閑任務鉤子是一個函數,這個函數由用戶來實現,* FreeRTOS規定了函數的名字和參數:void vApplicationIdleHook(void ),* 這個函數在每個空閑任務周期都會被調用* 對于已經刪除的RTOS任務,空閑任務可以釋放分配給它們的堆棧內存。* 因此必須保證空閑任務可以被CPU執行* 使用空閑鉤子函數設置CPU進入省電模式是很常見的* 不可以調用會引起空閑任務阻塞的API函數*/
#define configUSE_IDLE_HOOK						0      /* 置1:使用時間片鉤子(Tick Hook);置0:忽略時間片鉤子* * * 時間片鉤子是一個函數,這個函數由用戶來實現,* FreeRTOS規定了函數的名字和參數:void vApplicationTickHook(void )* 時間片中斷可以周期性的調用* 函數必須非常短小,不能大量使用堆棧,* 不能調用以”FromISR" 或 "FROM_ISR”結尾的API函數*//*xTaskIncrementTick函數是在xPortSysTickHandler中斷函數中被調用的。因此,vApplicationTickHook()函數執行的時間必須很短才行*/
#define configUSE_TICK_HOOK						0           //使用內存申請失敗鉤子函數
#define configUSE_MALLOC_FAILED_HOOK			0 /** 大于0時啟用堆棧溢出檢測功能,如果使用此功能 * 用戶必須提供一個棧溢出鉤子函數,如果使用的話* 此值可以為1或者2,因為有兩種棧溢出檢測方法 */
#define configCHECK_FOR_STACK_OVERFLOW			0   /********************************************************************FreeRTOS與運行時間和任務狀態收集有關的配置選項   
**********************************************************************/
//啟用運行時間統計功能
#define configGENERATE_RUN_TIME_STATS	        0             //啟用可視化跟蹤調試
#define configUSE_TRACE_FACILITY				      0    
/* 與宏configUSE_TRACE_FACILITY同時為1時會編譯下面3個函數* prvWriteNameToBuffer()* vTaskList(),* vTaskGetRunTimeStats()
*/
#define configUSE_STATS_FORMATTING_FUNCTIONS	1                       /********************************************************************FreeRTOS與協程有關的配置選項                                                
*********************************************************************/
//啟用協程,啟用協程以后必須添加文件croutine.c
#define configUSE_CO_ROUTINES 			          0                 
//協程的有效優先級數目
#define configMAX_CO_ROUTINE_PRIORITIES       ( 2 )                   /***********************************************************************FreeRTOS與軟件定時器有關的配置選項      
**********************************************************************///啟用軟件定時器
#define configUSE_TIMERS				            0                              
//軟件定時器優先級
#define configTIMER_TASK_PRIORITY		        (configMAX_PRIORITIES-1)        
//軟件定時器隊列長度
#define configTIMER_QUEUE_LENGTH		        10                               
//軟件定時器任務堆棧大小
#define configTIMER_TASK_STACK_DEPTH	      (configMINIMAL_STACK_SIZE*2)    /************************************************************FreeRTOS可選函數配置選項                                                     
************************************************************/
#define INCLUDE_xTaskGetSchedulerState       1                       
#define INCLUDE_vTaskPrioritySet		         1
#define INCLUDE_uxTaskPriorityGet		         1
#define INCLUDE_vTaskDelete				           1
#define INCLUDE_vTaskCleanUpResources	       1
#define INCLUDE_vTaskSuspend			           1
#define INCLUDE_vTaskDelayUntil			         1
#define INCLUDE_vTaskDelay				           1
#define INCLUDE_eTaskGetState			           1
#define INCLUDE_xTimerPendFunctionCall	     0
//#define INCLUDE_xTaskGetCurrentTaskHandle       1
//#define INCLUDE_uxTaskGetStackHighWaterMark     0
//#define INCLUDE_xTaskGetIdleTaskHandle          0/******************************************************************FreeRTOS與中斷有關的配置選項                                                 
******************************************************************/
#ifdef __NVIC_PRIO_BITS#define configPRIO_BITS       		__NVIC_PRIO_BITS
#else#define configPRIO_BITS       		4                  
#endif
//中斷最低優先級
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY			15     //系統可管理的最高中斷優先級
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	5 #define configKERNEL_INTERRUPT_PRIORITY 		( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )	/* 240 */#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )/****************************************************************FreeRTOS與中斷服務函數有關的配置選項                         
****************************************************************/
#define xPortPendSVHandler 	PendSV_Handler
#define vPortSVCHandler 	SVC_Handler/* 以下為使用Percepio Tracealyzer需要的東西,不需要時將 configUSE_TRACE_FACILITY 定義為 0 */
#if ( configUSE_TRACE_FACILITY == 1 )
#include "trcRecorder.h"
#define INCLUDE_xTaskGetCurrentTaskHandle               1   // 啟用一個可選函數(該函數被 Trace源碼使用,默認該值為0 表示不用)
#endif#endif /* FREERTOS_CONFIG_H */
缺少usart文件,找到野火標準庫的串口文件夾

在這里插入圖片描述

按照下面這個目錄找到usart這兩個文件

在這里插入圖片描述

在工程模板下的User文件夾下創建個usart文件夾,再把這兩個文件復制到usart文件夾下

在這里插入圖片描述
在這里插入圖片描述

把usart文件添加到工程下

在這里插入圖片描述

再把usart文件夾目錄添加進去

在這里插入圖片描述

在 port.c 文件中已經實現 xPortPendSVHandler()與 vPortSVCHandler() 函數,防止我們自己實現不了,那么在 stm32f10x_it.c 中就需要我們注釋掉 PendSV_Handler()與 SVC_Handler()這兩個函數了

在這里插入圖片描述

編譯后0錯誤0警告,移植成功

在這里插入圖片描述

修改stm32f10x_it.c文件下的SysTick_Handler()函數
void xPortSysTickHandler( void );void SysTick_Handler(void)
{#if (INCLUDE_xTaskGetSchedulerState  == 1 )if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED){#endif  /* INCLUDE_xTaskGetSchedulerState */  xPortSysTickHandler();#if (INCLUDE_xTaskGetSchedulerState  == 1 )}#endif  /* INCLUDE_xTaskGetSchedulerState */
}
把#include "FreeRTOS.h"和#include "task.h"這兩個頭文件添加到stm32f10x_it.c文件下

在這里插入圖片描述

5.7 修改main函數

把這兩個頭文件也添加到main文件下

在這里插入圖片描述

mian()函數里面的東西都刪掉,剩個main就行

在這里插入圖片描述

6、倉庫地址

倉庫地址

6、總結

以上就是移植FreeRTOS到STM32的整個過程了,相關的文件我會放到倉庫中,瀏覽過程中,如若發現錯誤,歡迎大家指正,有問題的歡迎評論區留言或者私信。最后,如果大家覺得有所幫助,可以點一下贊,謝謝大家!祝大家天天開心,順遂無虞!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83132.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

12.找到字符串中所有字母異位詞

&#x1f9e0; 題目解析 題目描述&#xff1a; 給定兩個字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母異位詞的起始索引。 返回的答案以數組形式表示。 字母異位詞定義&#xff1a; 若兩個字符串包含的字符種類和出現次數完全相同&#xff0c;順序無所謂&#xff0c;則互為…

基于Springboot+Vue的辦公管理系統

角色&#xff1a; 管理員、員工 技術&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 該辦公管理系統是一個綜合性的企業內部管理平臺&#xff0c;旨在提升企業運營效率和員工管理水…

【磁盤】每天掌握一個Linux命令 - iostat

目錄 【磁盤】每天掌握一個Linux命令 - iostat工具概述安裝方式核心功能基礎用法進階操作實戰案例面試題場景生產場景 注意事項 【磁盤】每天掌握一個Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系統下用于監視系統輸入輸出設備和CPU使…

專業文件比對輔助軟件

軟件介紹 本文介紹一款用于文件內容對比的計算機輔助工具&#xff0c;支持快速識別不同版本文檔間的差異內容。 功能與版本特性 這款工具提供無償使用授權&#xff0c;技術文檔顯示其開發歷程已達近三十年。程序采用獨立封裝設計&#xff0c;無需安裝即可直接運行。 基礎操…

【時時三省】(C語言基礎)變量的存儲方式和生存期

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 動態存儲方式與靜態存儲方式 從變量的作用域&#xff08;即從空間&#xff09;的角度來觀察&#xff0c;變量可以分為全局變量和局部變量。 還可以從另一個角度&#xff0c;即從變量值存在…

記錄:外擴GPIOD訪問報警告

rk提供的rfkill-bt.c驅動訪問外擴GPIO輸出如下警告&#xff1a; [ 4.694993] ------------[ cut here ]------------ [ 4.694994] WARNING: CPU: 7 PID: 582 at drivers/gpio/gpiolib.c:2805 gpiod_get_raw_value0x58/0xd4 [ 4.695003] Modules linked in: [ 4.69…

LangChain面試內容整理-知識點4:工具(Tool)機制與實現

在LangChain中,工具(Tool)是智能體(Agent)、鏈(Chain)或LLM可以調用的外部函數接口。可以將Tool理解為LLM可以使用的能力或插件:通過調用工具,LLM能夠獲取額外的信息或執行特定的動作,比如查詢數據庫、搜索互聯網、做數學計算等comet.compinecone.io。工具賦予了LLM交…

GraphQL 實戰篇:Apollo Client 配置與緩存

GraphQL 實戰篇&#xff1a;Apollo Client 配置與緩存 上一篇&#xff1a;GraphQL 入門篇&#xff1a;基礎查詢語法 依舊和上一篇的筆記一樣&#xff0c;主實操&#xff0c;沒啥過多的細節講解&#xff0c;代碼具體在&#xff1a; https://github.com/GoldenaArcher/graphql…

web3-基于貝爾曼福特算法(Bellman-Ford )與 SMT 的 Web3 DeFi 套利策略研究

web3-基于貝爾曼福特算法&#xff08;Bellman-Ford &#xff09;與 SMT 的 Web3 DeFi 套利策略研究 如何找到Defi中的交易機會 把defi看做是一個完全開放的金融產品圖表&#xff0c;可以看到所有的一切東西&#xff1b;我們要沿著這些金融圖表找到一些最優的路徑&#xff0c;就…

SQL Server 觸發器調用存儲過程實現發送 HTTP 請求

文章目錄 需求分析解決第 1 步:前置條件,啟用 OLE 自動化方式 1:使用 SQL 實現啟用 OLE 自動化方式 2:Sql Server 2005啟動OLE自動化方式 3:Sql Server 2008啟動OLE自動化第 2 步:創建存儲過程第 3 步:創建觸發器擴展 - 如何調試?第 1 步:登錄 SQL Server 2008第 2 步…

Go 語言中的內置運算符

1. 算術運算符 注意&#xff1a; &#xff08;自增&#xff09;和--&#xff08;自減&#xff09;在 Go 語言中是單獨的語句&#xff0c;并不是運算符。 package mainimport "fmt"func main() {fmt.Println("103", 103) // 13fmt.Println("10-3…

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶場第五期SQL注入的內容中我們談到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是純手動獲取數據庫信息的 接下來我們就用sqlmap來進行皮卡丘靶場的sql注入學習&#xff0c;鏈接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…

發立得信息發布系統房屋信息版(php+mysql)V1.0版

# 發立得信息發布系統房屋信息版(phpmysql) 一個輕量級的房屋信息發布平臺&#xff0c;基于PHP和MySQL開發&#xff0c;支持用戶發布房屋出售/出租信息&#xff0c;以及后臺管理功能。 輕量級適合網站開發PHP方向入門者學習&#xff0c;首發版本&#xff0c;未經實際業務流程檢…

學習 React【Plan - June - Week 1】

一、使用 JSX 書寫標簽語言 JSX 是一種 JavaScript 的語法擴展&#xff0c;React 使用它來描述用戶界面。 什么是 JSX&#xff1f; JSX 是 JavaScript 的一種語法擴展。看起來像 HTML&#xff0c;但它實際上是在 JavaScript 代碼中寫 XML/HTML。瀏覽器并不能直接運行 JSX&…

小智AI+MCP

什么是小智AI和MCP 如果還不清楚的先看往期文章 手搓小智AI聊天機器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下載官方MCP的示例代碼 Github&#xff1a;https://github.com/78/mcp-calculator 安這個步驟執行 其中MCP_ENDPOI…

基于python大數據的口紅商品分析與推薦系統

博主介紹&#xff1a;高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了多年的設計程序開發&#xff0c;開發過上千套設計程序&#xff0c;沒有什么華麗的語言&#xff0c;只有實實在…

ArcPy擴展模塊的使用(3)

管理工程項目 arcpy.mp模塊允許用戶管理布局、地圖、報表、文件夾連接、視圖等工程項目。例如&#xff0c;可以更新、修復或替換圖層數據源&#xff0c;修改圖層的符號系統&#xff0c;甚至自動在線執行共享要托管在組織中的工程項。 以下代碼展示了如何更新圖層的數據源&…

打開GitHub網站因為網絡原因導致加載失敗問題解決方案

Date: 2025.06.09 20:34:22 author: lijianzhan 在Windows系統中&#xff0c;打開GitHub網站因為網絡原因導致加載失敗問題解決方案 打開Windows系統下方搜索框&#xff0c;搜索Microsoft Store&#xff0c;并且雙擊打開 在應用里面搜索Watt Toolkit&#xff0c;并下載安裝 …

AI代碼助手需求說明書架構

AI代碼助手需求說明書架構 #mermaid-svg-6dtAzH7HjD5rehlu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6dtAzH7HjD5rehlu .error-icon{fill:#552222;}#mermaid-svg-6dtAzH7HjD5rehlu .error-text{fill:#552222;s…

.NET開發主流框架全方位對比分析

文章目錄 1. ASP.NET Core核心特性代碼示例&#xff1a;基本控制器優勢劣勢 2. .NET MAUI核心特性代碼示例&#xff1a;基本頁面優勢劣勢 3. Blazor兩種托管模型核心特性代碼示例&#xff1a;計數器組件優勢劣勢 4. WPF (Windows Presentation Foundation)核心特性代碼示例&…