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都要大一些。



审核编辑:刘清

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

    关注

    48

    文章

    7444

    浏览量

    150828
  • 处理器
    +关注

    关注

    68

    文章

    19096

    浏览量

    228788
  • CMSIS
    +关注

    关注

    0

    文章

    39

    浏览量

    11855
  • stm32cubemx
    +关注

    关注

    5

    文章

    280

    浏览量

    14709
收藏 人收藏

    评论

    相关推荐

    域名、IP 地址、网址分别是什么?什么区别

    域名、IP 地址和网址我们经常会听到这三个名词,尤其是当你想要开通一个网站的时候,但很多人对它们之间的区别并不十分清楚,那么域名、IP 地址、网址分别是什么?什么区别?接下来让我来
    的头像 发表于 09-18 11:13 365次阅读
    域名、IP 地址、网址分别是什么?<b class='flag-5'>有</b><b class='flag-5'>什么区别</b><b class='flag-5'>呢</b>?

    移植CMSIS-NN v6.0.0版本到VisionBoard

    CMSIS-NN是什么?官方的解释是:CMSISNNsoftwarelibraryisacollectionofefficientneuralnetworkkernelsdevelopedtomaximizetheperformanceandminimizethememoryfootprintofneuralnet
    的头像 发表于 07-10 08:35 532次阅读
    移植<b class='flag-5'>CMSIS</b>-NN <b class='flag-5'>v</b>6.0.0版本到VisionBoard

    请问ESP32支持Jlink v9或CMSIS DAP调试吗?

    请问 ESP32 支持 Jlink v9 或 CMSIS DAP 调试么?
    发表于 06-06 07:18

    请问CMSIS-RTOS2的事件标志怎么使用?

    CMSIS-RTOS2的事件标志怎么使用
    发表于 04-18 07:13

    CMSIS-RTOS V1V2区别是什么?

    最近的学习FreeRTOS,看到STM32CubeMX分别用CMSIS-RTOS V1,V2进行封装,请教CMSIS-RTOS V1
    发表于 04-11 06:06

    CMSIS的DSP数字信号处理函数库应用

    为了使用DSP数据库,需要在IAR开发环境中,对工程文件选项General中的连接库设置中,选择CMSIS DSP。在程序中增加arm math头文件即可。
    发表于 03-25 10:52 1193次阅读
    <b class='flag-5'>CMSIS</b>的DSP数字信号处理函数库应用

    请问GTM模块里的ATOM和TOM什么区别

    如题,GTM模块里的ATOM和TOM什么区别
    发表于 02-06 06:35

    Nano100B Series BSP_CMSIS_V3.02.000包里的I2C_Loopback示例时失败了怎么解决?

    我测试Nano100B Series BSP_CMSIS_V3.02.000包里的I2C_Loopback示例时失败,说是总线仲裁失败,请问怎么解决
    发表于 01-16 06:26

    Mini51DE_Series_BSP_CMSIS_v3.02.000为何在IAR中编译报错?

    never-completed type Mini51DE_Series_BSP_CMSIS_v3.02.000LibraryStdDriversrcretarget.c 43 Error[Pe235]: variable
    发表于 01-15 08:22

    工业级光纤收发器和商业级光纤收发器什么区别

    工业级光纤收发器和商业级光纤收发器什么区别?在什么情况下选择工业级光纤收发器? 工业级光
    的头像 发表于 12-27 15:02 934次阅读

    基于STM32自制CMSIS-DAP下载器

    市面上针对Cortex-M处理器的下载器,很多是基于CMSIS-DAP演变而来,比如:e-Link、GD-Link等。
    的头像 发表于 12-19 09:12 2766次阅读
    基于STM32自制<b class='flag-5'>CMSIS</b>-DAP下载器

    电容屏和电阻屏什么区别

    电容屏和电阻屏什么区别? 电容屏和电阻屏是目前主流的两种触摸屏技术。它们在原理、结构和使用方式上都有所不同。本文将详细介绍电容屏和电阻屏的区别。 一、原理差异
    的头像 发表于 12-11 10:40 1941次阅读

    CMSIS RTOS Timer

    CMSIS函数
    橙群微电子
    发布于 :2023年11月27日 16:06:03

    给模拟芯片供电的电源和给数字芯片供电的电源一样吗?什么区别

    您好, 您能推荐一下+5V转正负2.5V的稳压电源芯片吗?用来给ADA4528-2双电源供电。 另外,请问您,给模拟芯片供电的电源和给数字芯片供电的电源一样吗?
    发表于 11-22 08:13

    什么是干净的电压波形?干净的电压波形与不干净的电压波形什么区别

    什么是干净的电压波形?干净的电压波形与不干净的电压波形什么区别? 干净的电压波形是指在电路中传输的电压信号没有噪声干扰和失真,呈现出稳定、规整、纯净的波形。而不干净的电压波形则意
    的头像 发表于 11-17 14:49 910次阅读