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

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

3天内不再提示

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

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

扫码添加小助手

加入工程师交流群

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

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

3c2e27b6-2d82-11ed-ba43-dac502259ad0.png

微控制器软件接口标准CMSIS

CMSIS ARM官方定义如下:

3c54973e-2d82-11ed-ba43-dac502259ad0.png

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

    文章

    8249

    浏览量

    162389
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222948
  • CMSIS
    +关注

    关注

    0

    文章

    41

    浏览量

    12649

原文标题:stm32CubeIDE中CMSIS_V1和CMSIS_V2选项的区别

文章出处:【微信号:技术让梦想更伟大,微信公众号:技术让梦想更伟大】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    请问CYW2019B2的SPI1与SPI2什么区别

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

    GD32与STM32什么区别

    电子发烧友网站提供《GD32与STM32什么区别.docx》资料免费下载
    发表于 04-03 17:27 0次下载

    求助,关于CMSIS I2C驱动程序问题求解?

    cmsis_lpi2c_int_b2b_transfer_master.c 示例(来自 SDK16),发现了同样的问题。当选择 ARM_I2C_BUS_SPEED_FAST_PLUS 作为接口速度时,我只能看到对启动条件的尝
    发表于 03-20 07:48

    CubeMX创建STM32F1 FreeRTOS选择新版库1.8.6后工程出错是怎么回事?

    /FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c(34): error: 'freertos_os2.h' file not found34
    发表于 03-14 06:31

    ATX主板和ITX主板什么区别

    在计算机硬件领域,主板是承载计算机核心组件的关键部件,其类型多样,性能也各有千秋。那么ATX主板和ITX主板什么区别,下面来介绍一下:
    的头像 发表于 03-03 08:47 1600次阅读

    私有云和公有云什么区别

    私有云和公有云在多个方面存在显著的区别,以下是具体的比较,主机推荐小编为您整理发布私有云和公有云什么区别
    的头像 发表于 02-20 10:38 1495次阅读

    AIGC和AI什么区别

    AIGC是AI在内容生成领域的一个特定应用方向,AI的技术发展为AIGC提供了基础和支撑。那么,AIGC和AI什么区别?下面,AI部落小编带您详细了解。
    的头像 发表于 02-20 10:33 1658次阅读

    BNC连接器对于工业方面如何选择

    BNC连接器涵盖各种各样类型的产品,在工业方面的使用会特别考验BNC连接器性能的稳定,不同的应用环境下也会影响到连接器的性能和可靠性。那么BNC连接器对于工业方面如何选择?德索精密工业小编为大家科普一下BNC连接器对于工业方
    的头像 发表于 02-17 09:10 691次阅读
    BNC连接器对于工业方面<b class='flag-5'>该</b>如何<b class='flag-5'>选择</b><b class='flag-5'>呢</b>?

    ADC的接口Serial SPI和SPI两种,它们之间什么区别

    我刚刚接触ADC,想选一款芯片,看到接口SPI 和Serial SPI,哪位专业人士解答下两者什么区别
    发表于 01-24 07:55

    hyper v 工具,hyper v 工具有哪些

    了全新的变革。今天就为大家介绍hyperv工具有哪些。    Hyper-V提供了一系列工具和功能,用于管理和优化虚拟化环境。以下是常见的Hyper-V工具及其用途:    1.Hyper-
    的头像 发表于 01-22 15:54 1239次阅读
    hyper <b class='flag-5'>v</b> 工具,hyper <b class='flag-5'>v</b> 工具有哪些<b class='flag-5'>呢</b>

    想选一个10或12bit的ADC,哪些ADC可以选择?SPS如何计算

    我想选一个10或12bit的ADC,4通道的,REF可外接5V,所有通道40us完成采集,哪些ADC可以选择?SPS如何计算
    发表于 01-22 08:14

    ADS1255 MUX寄存器设置上,AINP与AINN如何选择

    手册上提出最好不要接地,假如我直接基准2.5v上,或是AVDD上,什么不同?MUX寄存器设置上,AINP与AINN如何选择?AINN
    发表于 01-10 07:50

    MAX44290ANT+T和MAX44290ANT+TG7什么区别

    MAX44290ANT+T和MAX44290ANT+TG7请问什么区别? 是否文件 谢谢
    发表于 12-19 07:17

    请问SN65HVD230D和SN65HVD230DR中D和DR分别代表什么含义?什么区别

    问一个芯片后缀的含义的问题,SN65HVD230D和SN65HVD230DR中D和DR分别代表什么含义,什么区别
    发表于 12-09 06:20