0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CMSIS_V1和CMSIS_V2有什么区别呢?该怎么选择呢?

工程师邓生 来源:技术让梦想更伟大 作者:李肖遥 2022-09-06 09:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

STM32CubeIDE在stm32开发者起着最基础的作用,在STM32CubeIDE中配置FreeRTOS中间层时需要选择interface,其中有三个选项:Disable、CMSIS_V1和CMSIS_V2

CMSIS定义了通用工具接口,并提供一致的设备支持,那么CMSIS_V1和CMSIS_V2有什么区别呢,该怎选择呢?

pYYBAGMWoYSAPRGuAAGCTFttMHk943.jpg

微控制器软件接口标准CMSIS

CMSIS ARM官方定义如下:

pYYBAGMWoZaAGPcZAAFVig30WF4944.jpg

Cortex微控制器软件接口标准(CMSIS)是独立于供应商的硬件抽象层,用于基于Arm Cortex处理器的微控制器,并且CMSIS提供了到处理器和外围设备,实时操作系统以及中间件组件的接口,可以说非常实用。

CMSIS软件接口简化了软件重用,减少了开发周期,而且也不受限操作系统的类型,去耦。

不同之处

RTOS v1使得软件能够在不同的实时操作系统下运行(屏蔽不同RTOS提供的API的差别)

而RTOS v2则是拓展了RTOS v1,兼容更多的CPU架构和实时操作系统。

RTOS v1创建任务函数如下:

/***********************ThreadManagement*****************************/
/**
*@briefCreateathreadandaddittoActiveThreadsandsetittostateREADY.
*@paramthread_defthreaddefinitionreferencedwith
efosThread.
*@paramargumentpointerthatispassedtothethreadfunctionasstartargument.
*@retvalthreadIDforreferencebyotherfunctionsorNULLincaseoferror.
*@noteMUSTREMAINUNCHANGED:osThreadCreateshallbeconsistentineveryCMSIS-RTOS.
*/
osThreadIdosThreadCreate(constosThreadDef_t*thread_def,void*argument)
{
TaskHandle_thandle;

#if(configSUPPORT_STATIC_ALLOCATION==1)&&(configSUPPORT_DYNAMIC_ALLOCATION==1)
if((thread_def->buffer!=NULL)&&(thread_def->controlblock!=NULL)){
handle=xTaskCreateStatic((TaskFunction_t)thread_def->pthread,(constportCHAR*)thread_def->name,
thread_def->stacksize,argument,makeFreeRtosPriority(thread_def->tpriority),
thread_def->buffer,thread_def->controlblock);
}
else{
if(xTaskCreate((TaskFunction_t)thread_def->pthread,(constportCHAR*)thread_def->name,
thread_def->stacksize,argument,makeFreeRtosPriority(thread_def->tpriority),
&handle)!=pdPASS){
returnNULL;
}
}
#elif(configSUPPORT_STATIC_ALLOCATION==1)

handle=xTaskCreateStatic((TaskFunction_t)thread_def->pthread,(constportCHAR*)thread_def->name,
thread_def->stacksize,argument,makeFreeRtosPriority(thread_def->tpriority),
thread_def->buffer,thread_def->controlblock);
#else
if(xTaskCreate((TaskFunction_t)thread_def->pthread,(constportCHAR*)thread_def->name,
thread_def->stacksize,argument,makeFreeRtosPriority(thread_def->tpriority),
&handle)!=pdPASS){
returnNULL;
}
#endif

returnhandle;
}

RTOS v2创建任务函数如下:

osThreadId_tosThreadNew(osThreadFunc_tfunc,void*argument,constosThreadAttr_t*attr){
constchar*name;
uint32_tstack;
TaskHandle_thTask;
UBaseType_tprio;
int32_tmem;

hTask=NULL;

if(!IS_IRQ()&&(func!=NULL)){
stack=configMINIMAL_STACK_SIZE;
prio=(UBaseType_t)osPriorityNormal;

name=NULL;
mem=-1;

if(attr!=NULL){
if(attr->name!=NULL){
name=attr->name;
}
if(attr->priority!=osPriorityNone){
prio=(UBaseType_t)attr->priority;
}

if((prio< osPriorityIdle) || (prio >osPriorityISR)||((attr->attr_bits&osThreadJoinable)==osThreadJoinable)){
return(NULL);
}

if(attr->stack_size>0U){
/*InFreeRTOSstackisnotinbytes,butinsizeof(StackType_t)whichis4onARMports.*/
/*Stacksizeshouldbetherefore4bytealignedinordertoavoiddivisioncausedsideeffects*/
stack=attr->stack_size/sizeof(StackType_t);
}

if((attr->cb_mem!=NULL)&&(attr->cb_size>=sizeof(StaticTask_t))&&
(attr->stack_mem!=NULL)&&(attr->stack_size>0U)){
mem=1;
}
else{
if((attr->cb_mem==NULL)&&(attr->cb_size==0U)&&(attr->stack_mem==NULL)){
mem=0;
}
}
}
else{
mem=0;
}

if(mem==1){
#if(configSUPPORT_STATIC_ALLOCATION==1)
hTask=xTaskCreateStatic((TaskFunction_t)func,name,stack,argument,prio,(StackType_t*)attr->stack_mem,
(StaticTask_t*)attr->cb_mem);
#endif
}
else{
if(mem==0){
#if(configSUPPORT_DYNAMIC_ALLOCATION==1)
if(xTaskCreate((TaskFunction_t)func,name,(uint16_t)stack,argument,prio,&hTask)!=pdPASS){
hTask=NULL;
}
#endif
}
}
}

return((osThreadId_t)hTask);
}

正常V1够用了,普通功能选V1,高级功能选择V2:

我分别选择CMSIS_V1和CMSIS_V2编译了两次进行对比,CMSIS_V2都要大一些。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    49

    文章

    8829

    浏览量

    165577
  • 处理器
    +关注

    关注

    68

    文章

    20325

    浏览量

    254684
  • CMSIS
    +关注

    关注

    0

    文章

    41

    浏览量

    13021
  • stm32cubemx
    +关注

    关注

    5

    文章

    290

    浏览量

    17469
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于 X-Cube-FreeRTOS_Heap4 和 CubeMX 生成 UCPD 项目介绍

    生成 STM32H563 的 USB-PD Sink 的应用不是那么顺畅,文章中介绍的是 CMSIS_V1,但现在最新的是 CMSIS_V2,客户希望我们予以支持指导。2. 环境准备硬件:仅 NUCLEO-H563ZI (MB
    发表于 04-15 15:59 0次下载

    Boost、Buck-Boost、Sepic拓扑什么区别

    工程师们在做电源设计时经常会有升压的需求,而常用的Boost、Buck-Boost、Sepic拓扑均可实现升压。这些拓扑什么区别选哪个
    的头像 发表于 04-11 14:14 922次阅读
    Boost、Buck-Boost、Sepic拓扑<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>

    如何使用 powerquad 加速器中的一些功能以及 CMSIS 原始实现中的一些功能?

    fsl_powerquad_cmsis.c 使用 PowerQuad 实现了许多 CMSIS 功能。许多是有用的,许多是无用的,因为 powerquad 的数据大小受到限制(例如
    发表于 04-03 06:37

    请教TJA1028DT和TJA1028T/5V0/20什么区别

    这两款芯片什么区别,或者更确切地说,TJA1028DT比TJA1028T/5V0/20什么优势?
    发表于 03-18 07:27

    JLink、STLink、DAPLink、CMSIS DAP使用的区别

    多少人使用(x宝也很少展示量),论字母排名顺序也远没到它,那它为毛整齐地霸着Keil选项中的头三把座椅???我的大爱CMSIS-DAP和神器J-Link都得老实排在它屁股后面?这家伙到底几斤几两
    发表于 01-22 07:51

    行星减速机与齿轮减速机什么区别

    行星减速机与齿轮减速机什么区别
    的头像 发表于 01-04 16:30 1775次阅读
    行星减速机与齿轮减速机<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?

    基于 X-Cube-FreeRTOS_Heap4 和 CubeMX 生成 UCPD 项目介绍

    STM32H563 的 USB-PD Sink 的应用不是那么顺畅,文章中介绍的是 CMSIS_V1,但现在最新的是 CMSIS_V2,客户希望我们予以支持指导。
    发表于 01-04 11:18 0次下载

    系统调用和API什么区别

    首先,什么是API?以汽车发动机为例: 档把就是发动机给你提供的api,当你想让汽车前进时只需要将其挂到“D”档位,然后轻踩油门就可以前进了,当你挂挡时你根本就不需要关心汽油是怎么进到发动机
    发表于 12-03 06:52

    请问jtag和jlink什么区别啊?

    jtag和jlink什么区别啊?
    发表于 11-28 06:46

    详解电容滤波与电感滤波的区别

    在电子电路中,常常会用到滤波电路,尤其是电源芯片,有的是电容滤波,有的是电感滤波,电容和电感滤波的作用看起来差不多,那么它们之间什么区别?在实际应用中又如何选择
    的头像 发表于 10-23 14:10 6443次阅读
    详解电容滤波与电感滤波的<b class='flag-5'>区别</b>

    如何使用CMSIS DAP仿真器调试,通过NucleiStudio调试蜂鸟SOC

    ,以及openocd软件生态,符合蜂鸟SOC的调试需求 具体步骤 1. 只需要修改调试脚本就可以了 红框框出来的这里 2. 我们分享我们更改的脚本 3. 然后就可以调试啦
    发表于 10-21 12:05

    CBB82电容和CBB81电容什么区别

    CBB81电容大家都不陌生,它属于高压谐振电容器,在很多高压、高频、大电流电路中,都能见到它的身影,还有一种电容器叫CBB82电容,两者只有一字之差,什么区别
    的头像 发表于 09-15 14:53 1240次阅读

    请问是否可以将 Nu-Link2-Me V1.0 的固件升级到 V2.0?

    0416:2004 华邦电子股份有限公司 Nu-Link2 CMSIS-DAP Nu-Link2-Me V1.0:总线 001 设备 020:ID 0416:5200 华邦电子股份有
    发表于 08-18 08:09

    请问CYW2019B2的SPI1与SPI2什么区别

    请问: CYW2019B2的SPI1与SPI2什么区别?SPI接口工作于Slave方式,接收外设的数据。如果设为SPI
    发表于 07-08 07:51

    使用MiniProg4通过ModusToolBox软件调试CYW920820M2EVB-01,遇到报错怎么解决?

    上的 telnet 连接 信息:使用 CMSIS-DAPv2 接口,VID:PID=0x04b4:0xf151, 序列号=0E1816E8021D2400 信息:CMSIS-DAP:支持 SWD
    发表于 07-01 08:24