自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 ++i与i++的区别

++i是先自增,再返回ii++是先返回i,再自增

2021-06-02 22:33:11 80

原创 野指针

野指针就是指向一个已删除对象,或者未申请,访问受限内存区域的指针。

2021-06-02 22:29:47 90

原创 指针与引用的区别

1.指针有自己的内存空间,引用只是一个别名2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小3.指针可以被初始化为NULL,引用必须被初始化且必须是一个已有对象的引用4.作为参数传递时,指针需要被解引用,才可以被对象进行操作,而直接对引用的修改都会改变引用所指向的对象。5.可以有const指针,但是没有const引用6.指针在使用过程中,可以指向其他对象。但是引用只能是对一个对象的引用,不能被改变。7.如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏。

2021-06-01 22:08:55 150

原创 c++中的四中cast转换

C++中的四中类型转换:1.const_cast用于将const变量转换为非const变量2.static_cast用于各种隐式转换,比如非const转const,void*转指针static_cast能用于多态向上转化,3.dynamic_cast用于动态类型转换,只能用于含有虚函数的类。只能转指针或引用。向上转换:指的是子类向基类的转换向下转换:指的是基类向子类的转换向下转换时如果是非法的,对于指针返回NULL,对于引用抛异常。4.reinterpret_cast几乎什么都可以转,

2021-05-31 22:10:56 122

原创 FMC接口

STM32F429的FMC接口支持SRAM、SDRAM、NAND FLASH、NOT FLASH等存储器

2021-05-29 15:06:37 706

原创 SDRAM

SDRAM,即同步动态随机存储器。SRAM,即静态存储器SDRSM优点:容量大,价格便宜。Stm32F429支持SDRAM,因此可以外挂SDRAM,从而大大降低外扩内存的成本。阿波罗开发板板载SDRAM芯片为:W9825G6KH

2021-05-29 14:56:51 101

原创 extern变量声明

extern可以置于变量或者函数前,表示:变量的定义在别的文件中,提示编译器遇到此变量或函数时,在其他模块中寻找定义。注意:extern申明变量可以多次,但是定义只有一次

2021-05-29 14:35:51 313

原创 FreeRTOS钩子函数

钩子函数类似于回调函数,当某个函数执行的时候就会调用钩子函数。a. 空闲任务钩子函数:空闲任务会调用此钩子函数b. 时间片钩子函数:嘀嗒定时器的中断服务函数c. 内存申请失败钩子函数d. 守护任务启动钩子函数:守护任务也就是定时器服务任务。...

2021-05-29 10:56:31 279

原创 FreeRTOS空闲任务

空闲任务:a. 空闲任务使用最低优先级,确保至少有一个任务可以运行。b. 如果某个任务要调用函数v TASK delete()删除自身,那个这个任务的任务控制快和任务堆栈需要在空闲任务中释放掉。c创建与空闲任务优先级相同任务,空闲任务会让出时间片给同优先级的应用任务。...

2021-05-29 10:10:22 141

原创 FreeRTOS的Tickless模式

FreeRTOS系统时钟是由嘀嗒定时器中断提供的。中断,可以将STM32F429从睡眠模式中唤醒。那么嘀嗒定时器中断就会导致STM32F429周期性的进入和退出休眠模式。导致大量的能量和时间消耗。Tickless模式:当处理器进入空闲任务周期后,就关闭嘀嗒定时器中断。只有在其他中断,或者其他任务需要处理时,处理器才会被唤醒。面临的问题:a.嘀嗒定时器关闭了,系统时钟就关了。需要有一个定时器来记录这段时间。b. 如何保证下一个要运行的任务能被准确的唤醒?根据FreeRTOS提供的还有多长时间执行下

2021-05-29 09:36:17 356

原创 STM32F4低功耗模式

三种低功耗模式:a. 睡眠b. 停止c. 待机睡眠模式:进入睡眠模式——WFI,唤醒——任意中断——WFE,唤醒——事件立即休眠或者退出是休眠。休眠模式,Cortex-MF4内核停止运行,其他外设正常运行,例如NVIC、SRAM停止模式:在此模式下1.2V域的所有时钟都会停止,PLL、HSI、HSE、RC振荡器会被禁止,但是内部SRAM的数据会被保留。待机模式:待机模式工耗最低,除了备份区域和待机电路相关寄存器外,SRAM和其他寄存器的内容都将丢失。退出待机模式的话,会导致STM3

2021-05-29 09:22:16 969

原创 FreeRTOS任务通知

要使用任务通知的话,首先要将宏configUSE_TASK_NOTIFICATION定义为1FreeRTOS的每个任务都有一个32位的通知值,任务控制快中的成员变量ul NotifiedValue就是这个通知值。假设某个任务通知的接收任务,因为等待任务通知而阻塞的话,向这个接收任务发送任务通知后,就会解除阻塞状态。任务通知可以更新接收任务的通知值。这种方式可以替代队列、二值信号量和事件标志组。优点:解除阻塞任务的时间更快!并且使用的RAM更少缺点:任务通知只能有一个接收任务接受任务可以因为接收任

2021-05-28 17:30:13 83

原创 FreeRTOS事件标志组

事件位:将某一位用来表示某个事件是否发生。(0或1)例如:现在需要向网络中发送一个心跳信息,将某个位置1;现在不需要向网络中发送心跳信息,将某个位置0。事件组:一个事件组就是一组的事件位,事件组中的事件位通过编号来访问。对于stm32来说,一个事件标志组最多可以存储24个事件位。实验:创建设置事件位的任务创建事件标志组处理任务创建事件标志组查询任务设置事件位任务函数:xEventGroupSetBits(EventGroupHandler,EVENTBIT_1)xEventGroup

2021-05-28 16:38:09 84

原创 互斥信号量的优先级继承

当一个互斥信号量被一个低任务使用,而此时高任务也想获取这个信号量,高任务就会被阻塞,不过高任务会将低任务提升到与自己相同的优先级。优先级继承尽可能的降低了高任务处于阻塞太的时间,并将“优先级反转”的影响降到最低。注意:1.互斥信号量只能用在任务中,不能用于中断服务函数。2.中断服务函数中,不能因为等待互斥信号量而进入阻塞太。实验:中任务运行低任务获取到互斥信号量运行高任务请求互斥信号量,此时需要等待低任务释放互斥信号量。但是中任务不会运行。递归互斥信号量:对于普通的互斥信号量,已经获取

2021-05-28 16:27:05 394

原创 FreeRTOS二值信号量优先级反转

优先级反转:高优先级任务由于等待低优先级任务完成,才能继续执行的情景。通常发生在试图获取信号量使用权或共享资源时。例如:三个不同优先级的任务——低任务、中任务、高任务创建二值信号量,然后释放一次信号量。低任务获取信号量,长时间不释放。高任务获取信号量,但是此时信号量被低任务占用着,高任务只能等待。但是等待过程中,中任务是一直运行的。出现了优先级反转...

2021-05-27 22:26:26 277

原创 FreeRTOS二值信号量

串口接收数据,在接收中断服务函数中:判断串口是否接收成功,并且判断二值信号量是否有效:if((USART_RX_STA&ox8000)&&(BinarySemaphore!=NULL))其中USART_RX_STA是接受状态标志,BinarySemaphore是二值信号量句柄判断完成后,释放二值信号量:xSemaphoreGiveFromISR(BinarySemaphore,&xHigherPriorityTaskWoken)如果需要的话,进行一次任务切换。在

2021-05-27 21:20:43 97

原创 FreeRTOS消息队列(任务和中断)

在任务函数中,创建消息队列:Key_Queue=xQueueCreate(KEYMSG_Q_NUM,sizeof(u8)Message_Queue=xQueueCreate(MESSAGE_Q_NUM,USART_REC_LEN)把信息传入到消息队列中:err= xQueueSend(Key_Queue,&key,10)获取消息队列中的消息:xQueueReceive(Key_Queue,&key,portMax_DELAY)获取到的值保存在变量key中。中断:在中断服务函

2021-05-27 20:30:22 1513

原创 freeRTOS任务状态信息查询

根据任务名获取任务句柄:TaskHandle=xTaskGetHandle(“”)获取任务的任务状态:TaskState=eTaskGetState(TaskHandle)TaskState结构体中有很多信息

2021-05-27 17:00:22 406

原创 FreeRTOS时间片调度

FreeRTOS 的时间片调度机制,就是对于同等优先级任务来说, 每个任务允许运行一个时间片.这个任务消耗完一个时间片,那么CPU的使用权,将会移交给同等优先级下的另一个任务。时间片是由 configTICK_RATE_HZ 这个宏定义决定的. 在平常设置为1000 表示 时间片的长度为1/1000 S 相当于1ms....

2021-05-27 16:37:40 663

原创 FreeRTOSConfig.h系统配置

当我们复制了一个这样的头文件(Freertos config.h)过来之后,需要做的事情就是根据自己的需要,对文件当中涉及的宏进行配置, 当然这每一个宏的打开或者关闭,对应的就是系统的功能的打开或者关闭。(它的具体实现是通过条件编译) 1."INCLUDE_"开头的宏,控制Freertos的API,1可用,0不可用 2."config"开头的宏:配置内存、钩子函数、协程、软件定时器、中断(中断最低优先级、系统可管理的中断最高优先级)...

2021-05-27 11:11:07 112

原创 实时操作系统应用

实时操作系统的优势最能体现在中大型系统中,当任务间存在复杂的耦合和依赖关系,并且应用程序经常要长时间等待外部资源时。freertos功能:1.基于静态优先级 (fixed-priority) 的抢占式 (preemptive) 任务调度;2.进程间通信 (基于消息,消息邮箱,管道);3.基于信号量 (semaphore) 的进程间同步;4.任务的创建、暂停、删除;5.资源访问控制(并发控制与防止互锁);6.临界区 (critical section) 控制;7.驱动程序的管理与接口...

2021-05-27 10:58:17 994

原创 基于Keil移植FreeRTOS例程

1.官网下载freertos源码2.将freertos源码copy我们的项目目录中。在”portable“文件夹下只需要留下三个重要的文件夹:keilMemMang (内存管理相关)RVDS(根据内核型号做选择,stm32用的是ARM内核)portable文件夹下包含的是和芯片接口相关的东西3.打开“Manage Project Items"操作卡,新建两个group:FreeRTOS_CoreFreeRTOS_Portable把相应的. c文件添加到file中4.添加头文件,特别的要移

2021-05-27 10:51:23 555

原创 FreeRTOS的列表与列表项

1.列表被FreeRTOS调度器使用,用于跟踪任务,处于就绪、挂起、延时的任务,都会被挂接到各自的列表中。用户程序如果有需要,也可以使用列表。

2021-05-27 09:33:48 69

原创 static关键字的作用

1.全局静态变量a.静态存储区,在整个程序运行期间一直存在。b. 未经初始化的全局静态变量,会被自动初始化为0。c. 全局静态变量,在声明它的文件之外,是不可见的。2.局部静态变量a、b同上c. 作用域:当定义它的函数或者语句块结束的时候,作用域结束。但是,当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存中。直到该函数再次被调用,并且值不变。3.静态函数在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明默认是extern的,但是静态函数只是在声明它的文件中可见

2021-05-26 22:44:17 102

原创 FreeRTOS中断测试

portDISABLE_INTERRUPTS() //关闭中断port ENABLE_INTERRUPTS() //打开中断在FreeRTOS中优先级低于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断会被屏蔽掉,高于的就不会。硬件触发中断,比如定时器。进入中断服务函数——在中断服务函数中调用回调函数,进行任务执行。具体调用哪个回调函数,要看中断的类型,比如,空闲中断,USART_IT_IDLE...

2021-05-26 22:04:37 202

原创 FreeRTOS任务创建

main.c文件中:1.创建开始任务(其中,开启任务调度)2.开始任务任务函数(进入临界区——创建各种任务——删除开始任务——退出临界区)3.各种任务函数的定义

2021-05-26 21:45:12 83

原创 const关键字

1.const关键字答:const关键字是一种修饰符,作用是给编译器一些“提示”和要求。const修饰符,是告诉编译器,被修饰的东西,具有只读的特点。注意点:a. const变量必须被初始化b. 指向const变量的指针:由于指针指向一个 const 变量,所以通过指针,不能修改这个 const 变量的值。const的几种用法:const变量、const类对象(不能改变任何成员变量的值,调用任何非const成员函数)指向const变量的指针const指针const变量作为函数参数(函数

2021-05-25 22:20:42 41

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除