logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

嵌入式学习笔记 - KEIL 提醒missing compiler version 5

需要下载相应的编译器,或者copy旧版本的编译器,复制到keil安装目录下keil->ARM->ARMCC文件夹。下方的ARMCLANG就是自带的version6版本编译器。KEIL 从5.37版本以上不再附加compiler version 5的编译器取而代之是verion6 编译器,若旧版的程序需要使用version5编译器,在ARM Compiler标签添加ARMCC路径。完成此步骤后还需要

#学习#单片机
从keil官网下载DFP(芯片支持包)的方法

Database 的意思是数据库,资料库,Device Database就是设备资料库。DFP的意思是Devices Family Packs 设备系列包。5.选择我们使用的芯片(我这里使用的是STM32L051系列)3.选择MDK-ARM会进入到MDK下载页面。2.点击右上角的下载按钮,进入下一页面。4.选择左下角的芯片列表按钮(7.在右上角选择下载DFP文件。这里我们不用下载MDK。6.然后选

文章图片
#单片机#stm32
嵌入式学习笔记 - freeRTOS为什么中断中不能使用互斥量

如上图,任务①,②,③优先级依次升高,任务①与任务③共用一个信号量资源,入过某一时刻任务①拥有了这个共享资源,任务③要处于阻塞状态等待任务①,假设此时不需要共享资源的任务②时间到了,则会打断任务①,那么任务①的释放信号量的时间将会更长,那么高优先级的任务③就很长时间得不到执行,这显然不符合优先级机制。任务③会将任务①的优先级提升到任务③一样的值,那么任务①会一直运行不会被中间级别优先级的任务打断,

文章图片
#学习#stm32#单片机
嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析

如果configUSE_PREEMPTION 定义为 0,就不进行任务切换同时xAlreadyYielded也不赋值为1,就是记录为没切换过,可能是因为这种情况下taskYIELD_IF_USING_PREEMPTION()未定义(如下图所示),默认为taskYIELD_IF_USING_PREEMPTION()不起作用,所以不对xAlreadyYielded。//返回是否切换过的标志,如果未切换

文章图片
#学习#stm32#单片机
嵌入式学习笔记- freeRTOS 带FromISR后缀的函数

因为中断中等待的,一般都是任务给予的,比如消息队列,信号量,而isr中断运行优先级又高于任何任务,要尽早结束中断让系统任务运行起来才有可能尽可能快的得到想要的消息,不然任务中断都会很被动的运行甚至拖死,任务得不到运行发不出消息,中断得不到消息。其实没有必须,只是因为合适,中断中不可能进行任务切换,放在中间也可以但是也不会立即切换,放在末尾能够确保中断尽快完整的运行结束,确保对信号量消息队列的关键操

文章图片
#学习
嵌入式学习笔记 - freeRTOS任务栈在初始化以及任务切换时的压栈出栈过程分析

比如定义一个任务栈为Task2Stack[N],那么任务栈的在ARM内存中的排列如下图示所,数组Task2Stack代表的起始是任务栈的最低地址,当栈为空时,就是栈内不存任何内容时,栈顶地址SP=Task2Stack+N-1,Task2Stack 为定义的任务栈的起始地址,也就是定义的任务栈数组的地址,N为定义的任务栈的总大小(长度)。

文章图片
#学习
嵌入式学习笔记 - keil安装目录下的头文件自动包含问题

可在工程选项中确认自动包含的路径。进入“Options for Target” → “C/C++”选项卡 → “Include Paths”栏,通常能看到类似。Keil MDK/MDK-ARM(ARM编译器)默认情况下会自动包含其安装目录下的标准头文件路径(如CMSIS库、设备头文件等)。新建工程或使用设备数据库选择芯片型号后,Keil会自动将必需的标准库头文件路径(如。目录下的CMSIS相关头文

文章图片
#学习
嵌入式学习笔记 - STM32 HAL库以及标准库内核以及外设头文件区别问题

两个文件,stm32f103xe.h为stm10系列底层文件如总线以及各片上外设模块寄存器地址,stm2f1xx.h仅为底层配置文件stm32f103xe.h提供配置选择的宏定义,相当于一个入口文件,虽然HAL库中已不含stm32f10x.h头文件,但是KEIL安装根目录下,ARM编译器目录下依然有标准库的驱动源文件,包括头文件STM32F10x.h,而keil默认包含根目录下的头文件,标准库中C

#学习#stm32#单片机
嵌入式学习笔记 - freeRTOS任务优先级抢占,时间片抢占的实现机制

如果是大于的情况,那么使用listGET_OWNER_OF_NEXT_ENTRY也是指向当前到期的任务,因为taskSELECT_HIGHEST_PRIORITY_TASK()函数实现里关于listGET_OWNER_OF_NEXT_ENTRY()的函数实现里( pxConstList )->pxIndex总是指向end节点之前,而时间到期插入就绪任务时使用的是insertEnd();第564行是

文章图片
#学习
嵌入式学习笔记 - 用typedef定义函数指针

定义了函数指针类型后,你可以像使用其他数据类型一样使用它。例如,声明一个函数指针变量,并将它指向。是一个关键字,用于为已有的数据类型定义一个新的名称(别名),同样它也可以为函数定义别名。// 使用函数名初始化指针。定义一个指向【返回int且接受两个int参数的】函数指针。ptr(2, 3);// 通过指针调用函数,输出 5。// 定义函数指针类型。就是函数指针的类型,它指向一个接受两个。

#学习
    共 105 条
  • 1
  • 2
  • 3
  • 11
  • 请选择