1、settings.json中加入"EIDE.JLink.InstallDirectory": "C:\\Program Files\\SEGGER\\JLink",为了下载。
2、settings.json中加入"cortex-debug.JLinkGDBServerPath.windows": "C:\\Program Files\\SEGGER\\JLink\\JLinkGDBServerCL.exe",启动jlink的gdb server,这是命令行版的。
3、cubemx中找到库的位置。把\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\RVDS\ARM_CM4F中的文件用,\GCC\ARM_CM4F中的文件替换。
造成这个的原因是2个版本的内嵌汇编写法不同(以下是例子):
a.这是gcc的代码
portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )
{
uint32_t ulOriginalBASEPRI, ulNewBASEPRI;
__asm volatile
(
" mrs %0, basepri \n" \
" mov %1, %2 \n" \
" msr basepri, %1 \n" \
" isb \n" \
" dsb \n" \
:"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
);
/* This return will not be reached but is necessary to prevent compiler
warnings. */
return ulOriginalBASEPRI;
}
解释:内嵌汇编语法如下:__asm__(汇编语句模板: 输出部分: 输入部分: 破坏描述部分)。汇编语句模板由汇编语句序列组成,语句之间使用“;”、“\n”或“\n\t”分开。%0,%1,%2是占位符。分别代表"=r" (ulOriginalBASEPRI),"=r" (ulNewBASEPRI), "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY )。"=r"是限制字符,=表示输出部分,r表示寄存器,i表示是立即数。
b.相同的函数用armcc代码写是如下:
static portFORCE_INLINE uint32_t ulPortRaiseBASEPRI( void )
{
uint32_t ulReturn, ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;
__asm
{
/* Set BASEPRI to the max syscall priority to effect a critical
section. */
mrs ulReturn, basepri
msr basepri, ulNewBASEPRI
dsb
isb
}
return ulReturn;
}
Error: L6406E: No space in execution regions with .ANY selector matching是因为IROM,IRAM分配不对。
4、在cortex debug仿真中,要想使用xrtos,需要在launch.json中添加:"rtos": "FreeRTOS"。也可以使用embedded tools插件查看进程。
5、如果有uint32_t,和__io的报警,可以在c_cpp_properities.json中加入
"__CC_ARM",
"__STATIC_INLINE=static",
"USE_HAL_DRIVER",
"STM32F429xx",
6、每次添加新功能,如果编译错误,报错是找不到一些函数,可能需要重新导入项目进入eide。