- 博客(54)
- 收藏
- 关注
原创 FreeRTOS的二值信号量,计数信号量,互斥信号量
RTOS的信号量共有3中,分别是二值信号量,计数信号量和互斥信号量。信号量的创建,发送和获取其用的就是队列的函数。
2025-01-18 13:22:42
153
原创 使用Keil创建FreeRTOS工程
之前记录了使用Keil创建Keil自带的RTX5的RTOS和使用CubeMX创建FreeRTOS。这次来记录下使用Keil创建FreeRTOS。使用CMSIS-RTOS2将FreeRTOS封装好。
2025-01-10 22:33:18
454
原创 STMCubeMX 创建SD卡的DMA
使用CubeMX创建SD卡的DMA相对比较简单3.使用测试函数,改写发送和接收4.将栈改大,由0x400改成0x800
2025-01-04 11:16:18
200
原创 FreeRTOS的任务调度
1.启动任务调度器 vTaskStartSchedulervoid vTaskStartScheduler( void ){BaseType_t xReturn; /* Add the idle task at the lowest priority. */ #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) { /* Create the idle task, storing its handle in xIdleTaskHandle so it c
2024-12-20 22:39:53
324
原创 FreeRTOS的任务创建和删除
1.任务控制块typedef struct tskTaskControlBlock{ volatile StackType_t *pxTopOfStack; /*任务堆栈栈顶*/ #if ( portUSING_MPU_WRAPPERS == 1 ) /*MPU相关设置*/ xMPU_SETTINGS xMPUSettings; /*< The MPU settings are defined as part of the port layer. THIS MUST BE THE
2024-12-14 13:29:43
345
原创 SD卡的 FATFS移植使用
1.参考之前的SPI_FLASH的FATFS文件系统移植使用。记录下SD卡的FATFS文件系统移植。在diskio.c文件中做相应修改。
2024-12-08 16:19:54
285
原创 SD卡的使用
加入 stm32_eval_sdio_sd.c 这是官方写的。由于SD卡的管脚是固定的,标准库参考官方例程就行。2.加入在其他文件中定义的缺少的东西。1.首先需要正确移植SD卡的程序。3.加入SDIO.c的函数。
2024-12-08 16:15:50
230
原创 SPI_FLASH FATFS文件系统的移植使用
读和写注意都是4096个字节,因为FATFS的最小单位是4K。需要在diskio.c ffconf.h做一定修改。我用的是SPI_FLAH,则在原来基础上新增加。直接是读ID是否正确,正确的就返回OK。使用SPI_FLASH的写功能就行。按照官网说明,需要提供相应的接口。这里使用SPI_的FLASH功能。记录下FATFS文件系统的使用。2.在Keil里面正确安装路径。ffconf.h需要修改的地方。这里是获取了设备的状态。1.将源文件都下载,在main中进行测试。
2024-12-08 16:00:38
414
1
原创 互斥量的使用
优先级继承属性,使用优先级继承属性的互斥锁将 ”等待线程“ 的优先级转移给当前互斥锁的所有者(如果所有者的线程优先级较低)。如果没有优先级继承,等待互斥锁的高优先级线程将被中优先级线程阻塞,称为优先级反转。每当拥有互斥锁的线程获得互斥锁时,锁计数就会增加。当互斥量达到0时,互斥量实际上会被释放,其他线程可以获取互斥量。互斥锁健壮属性,如果拥有的线程被终止(通过osThreadExit或osThreadTerminate),健壮的互斥锁将被自动释放。非健壮互斥锁不会被释放,用户必须手动确保释放互斥锁。
2024-11-01 21:43:14
322
原创 内存池的使用
函数osMemoryPoolNew创建并初始化内存池对象,并在发生错误时返回指向内存池对象标识符或NULL的指针。内存池可以看作是固定大小和相等大小的可用(未使用)内存块的链表。将内存释放到池中(使用osMemoryPoolFree)只需将块重新锁定到列表中即可。内存池是线程安全的固定大小的内存块。由于是线程安全的,它们可以从线程和ISR访问。池中的内存只能在block_size的固定部分分配/释放。[in]block_count内存池中内存块的最大数量。[in]block_size内存块大小(字节)。
2024-10-25 23:38:21
214
原创 单片机死机后仿真不破坏现场的办法
这时候直接运行的话,是不会复位程序而是停留在之前的运行状态。如果程序死机,则会直接进入HardFault。进而可以分析死机原因。记录下当单片机死机后,进行仿真而不重新恢复的办法。此时在仿真界面可以看到是灰色的。官网的链接写的非常明白了。在command窗口输入。可以看到可以仿真运行了。
2024-10-23 20:47:10
276
原创 面相对象的思想编写驱动
在.h文件中,需要着重思考。按照AT24Cxx的特性,划分为硬件接口,IIC属性,AT24Cxx属性。将对象的所有属性都封装起来。以EEPROM存储芯片AT24Cxx为例。在写驱动的时候,一般写法。
2024-10-11 21:40:55
194
原创 创建FreeRTOS工程
在中间件选择为FreeRTOS2,Interface选择为CMSIS_V2。在适应RTE创建工程后,仿真的时候可以看到FreeRTOS的各种情况。这次来简单记录下使用STM32CubeMX创建FreeRTOS。上述做法是使用CubeMX创建的FreeRTOS工程。创建多个线程,包括名次,优先级,栈大小等属性。使用Keil创建后,可以看到各种属性已经添加。以后的用法就和CMSIS_RTOS2一样。也可以用Keil创建FreeRTOS工程。使用CubeMX时,选择时基为TIM6。对FreeTROS的各种配置。
2024-10-09 20:48:21
164
原创 RTOS定时器的使用
在RTOS的定时器是基于systick创建的,和裸机里的硬件定时器是不一样的。在RTOS的定时器中可以创建多个,方便使用。argument :计时器回调函数的参数。attr:定时器属性;func:指向回调函数的函数指针。type:指单次运行还是周期运行。在定时器回调函数做的事。
2024-10-06 20:49:34
344
原创 线程的创建,挂起,恢复
Note的地方需要特别注意,比如这两个API都不能被中断回调函数调用(比如TIM溢出中断,接收中断等)参数指针,作为开始参数传递给线程函数。
2024-09-28 12:39:32
208
原创 stm32使用Keil创建RTOS工程
芯片选择STM32,使用Keil创建RTOS。直接使用Keil自带的RTX5,简单方便。用的API函数都一样。将void PendSV_Handler(void),void SysTick_Handler(void),void SVC_Handler(void) 这3个中断都屏蔽掉。1.在Manage Run-Time Environment上点击,添加为RTOS2(API),我这里选择了Source。分别创建2个线程 ,句柄分别为threadID_LED和threadID_Start。
2024-09-28 00:01:19
613
原创 RTOS的机制理解
任务在进入阻塞太以后,可以释放CPU控制权,用来给其它任务处理。类似阻塞态,通过调用函数 vTaskSuspend()对指定任务进行挂起,挂起后这个任务将不被执行,只。处于就绪态的任务是指那些能够运行(没有被阻塞和挂起) , 但是当前没有运行的任务, 因为同优先。由于等待信号量,消息队列,事件标志组等而处于的状态被称之为阻塞态,另外任务调用延迟函数也。当任务处于实际运行状态被称之为运行态, 即 CPU 的使用权被这个任务占用。有调用函数 xTaskResume()才可以将这个任务从挂起态恢复。
2024-09-27 22:12:56
251
原创 RTOS的和裸机的区别
是采用超级循环(super-loops) 系统,又称前后台系统。应用程序是一个无限的循环, 循环中调用相应。的函数完成相应的操作,这部分可以看做后台行为;中断服务程序处理异步事件,这部分可以看做是前台。简单来说,就是在while(1)l里面不断去查询各种标志位,按照标志位去执行相应的功能函数。如上图所示的那样, 创建了任务并完成 OS 初始化后,就可以通过调度器来。决定任务 A, 任务 B 和任务 C 的运行, 从而实现多任务系统。后台也可以叫做任务级,前台也叫作中断级。简述下RTOS和裸机的区别。
2024-09-27 21:25:28
337
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人