1. 程式人生 > >VELT-0.2.8對STM32開發的支援(4):連結與除錯

VELT-0.2.8對STM32開發的支援(4):連結與除錯

VELT的全稱是Visual EmbedLinuxTools,它是一個與visual gdb類似的visual studio外掛,用以輔助完成Linux開發。利用這個外掛,將可以在visual studioIDE中進行Linux應用程式的開發(包括編譯和除錯),也可以進行ubootlinux核心的編譯,並根據編譯時的錯誤資訊正確定位到原始碼。目前的版本是0.2.7,支援vs2012/vs2013/vs2015

下載地址:http://download.csdn.net/user/lights_joy

Velt討論QQ群:375515651

在上一節裡我們對很多細節沒有太在意,在這一節裡我們重新整理一下整個工程。不看不知道,一看嚇一跳,上一節犯了好幾個錯誤。

我們所用的CPUSTM32F101 RCT6256K Flash32K SRAM

根據ST手冊,它應該使用HD的初始化程式碼,而不是上一節使用的LD,因此將startup_stm32f10x_ld.s檔案改為startup_stm32f10x_hd.s

相應地將STM32F10X_LD這個巨集改為STM32F10X_HD

system_stm32f10x.c這個檔案中有一個CPU頻率的定義:

#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
 #define SYSCLK_FREQ_24MHz  24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */ 
#define SYSCLK_FREQ_36MHz  36000000
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
/* #define SYSCLK_FREQ_72MHz  72000000 */
#endif

這裡預設選擇的是72M,但CPU實際工作頻率只能在36M,因此需要做修改。

接下來,我們還需要整理一下連結指令碼。

STM32庫的Projects目錄下,提供了很多的示例工程,直接取其中的某個連結指令碼為模板,根據實際情況修改FLASHRAM的定義:

/* Highest address of the user mode stack */
_estack = 0x20007FF8; 

/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0;      /* required amount of heap  */
_Min_Stack_Size = 0x800;  /* required amount of stack */

/* Specify the memory areas */
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 256K
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 32K
  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
}

主要就是_estackFLASH LENGTHRAM LENGTH3個引數。

最終的工程就是這個樣子的:

F7生成:

接下來試試在VS裡除錯:

首先配置好目標機的引數:

這裡主要有三項:

目標連線型別必須選擇GdbServer,目標機IP選擇本機127.0.0.1,目標機埠選擇3333,這個埠必須和OpenOcdgdbserver埠相一致。

main函式裡設定斷點,F5除錯執行程式:

哈哈,搞定!

bye, JLINK~~~

bye, IAR~~~

大笑