stm32使用jlink烧录仿真,freertos不能用complier6编译,cortex-debug仿真中xrtos使用,使用embedded tools

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。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值