自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

FreeRTOS采用拷贝数据传递,也可以传递指针,所以在传递较大的数据的时候采用指针传递。数据入队出队方式:队列通常采用 “先进先出”(FIFO)的数据存储缓冲机制,即先入队的数据会先从队列中被读取,FreeRTOS中也可以配置为 “后进先出”(LIFO) 方式;上锁计数器:当锁住队列的时候,此时还是可以正常读写队列的,只不过操作不了它的等待发送和等待接收这两个列表;队列实际它的内存是分为两部分,第一个就是存放结构体的内存,接着是队列里面的队列项,它用来存放数据的,我们写入数据给队列就写入到队列项里面了。

2024-05-30 21:14:31 245

原创 【无标题】

3.注册major=register_chrdec(0.“first_drv”, &first_drv_fops);//名字可以随便写,注册根据主设备在VFS生成一个字符设备数组,以主设备号为索引(类型和主设备号)mdev(自动):根据system信息创建设备节点,创建一个类,类下面创建一个设备。mknod /dev/xxx c 111 0(手动)cat proc/devices 查看驱动设备。2.注册file_operations结构体。1.写出需要的驱动函数。创建设备节点,才能被打开。

2024-05-29 22:46:21 538

原创 内核常用调试方法

当调用BUG()时,内核通过panic()引发OOPS,导致函数调用栈的回溯和打印错误消息,可以把这两个调用当做断言使用,如BUG_ON(bad_thing);(3)内核需要未压缩的内核镜像文件,还需要在命令行提供core文件的命令。(4)使用printk()时也可以不指定优先级,这样的printk()会有一个默认的优先级,一般是KERN_WARNING。(2)优先级总共分为0-7这8个优先级,数字越低优先级越高,在使用printk()函数时通过优先级的宏定义指定。类似于Assert()函数。

2024-02-17 16:32:27 450 1

原创 STM32_HAL Freertos按键控制LED

根据电路图,K0为用户按键,连接在PA0引脚,当K0按下时接地,引脚电平低电平。在CubeMX中设置PA0,将IO设置为输入,上拉(上拉外部悬空时,引脚为高电平)。建两个任务,如果的创建这里不解释,请参考任务创建章节。一个任务往队列中写消息,一个任务从队列中读消息。在freertos任务中,添加按键任务,通过myTask_Key不断读入PA0的引脚状态。添加一个消息队列用来给LED任务传递读取的内容。以下是消息队列常用函数。下面创建一个队列深度为16,每个消息单元为uint8_t的消息队列。

2024-01-06 11:37:28 1316

原创 STM32_HAL中驱动775电机

在PreScaler中填入84-1,先分频为1M。本文需要1000HZ的波形周期,所以计数值为1M/1000HZ得到计数值为1000,并将1000-1填入counter period中。踏坑:在CubeMX中生成的代码中,main函数中做了MX_TIM4_Init(),让我误认为PWM已经打开了。根据选择的引脚,在CubeMX配置,选择TIM4中的Channal1和Channal2输出PWM。根据自己的电路,选择pwm输出引脚,图中PB6和PB7为板子空闲引脚,且可以复用为PWM功能。

2023-12-30 12:18:59 677

原创 STM432_HAL库FreeRTOS点灯

HAL时钟使用TIM1,否则若使用SysTick,这在生成代码的时候会提示与Freertos时钟有冲突。选择Serial Wire烧写模式。根据电路图,对PA8需要设置成输出模式,上拉输出高电平并增强输出电流。配置时钟树,我的外部晶振是8M的,其他的晶振根据硬件设置。在任务重添加TASK_LED任务。生成的初始化代码如下。

2023-12-28 20:31:07 554

原创 Linux内核打印等级

打印等级有四个数字,这四个数字分别代表console_ loglevel (控制台日志等级)、default_message_loglevel (默认消息等级)、minimum_console_ loglevel (最低控制台日志等级)、default_console_loglevel (默认控制台日志的等级)。这四个等级定义在kernel/printk/ printk. c文件。作用: dmesg命令可以用来显示打印信息。

2023-12-28 11:47:04 1888

原创 驱动-定时器

Linux内核中有一个宏HZ,这个宏用来表示一-秒钟对应的节拍的数量。利用Linux内核中的这个宏,我们就可以把时间转换成节拍数。比如,定时一.秒钟换成节拍数就是expires= jiffies+1*HZ,其中jiffies为 系统当前时间对应的节拍数。内核定时器的精度不高,所以不能作为高精度定时器使用。基于未来时间点的计时是以当前时刻为计时开始的时间点,以未来的某一一时刻为计时的终点。宏HZ的值我们是可以设置的,也就是说一秒钟对应多少个节拍数我们是可以设置的。节拍数怎么和时间关联上呢?

2023-12-28 11:34:39 398

原创 驱动-IO模型

在驱动中,需要实现file_operations结 构体的poll函数。在驱动中的fasync函数中调用fasync_ helper函数来操作fasync_ struct结 构体,fasync_ helper函数原。poll和select基本一样,都可以监听多个文件描述符,通过轮询文件描述符来获取已经准备好的文件描述符。当设备准备好的时候,驱动程序需要调用kill_fasync函数通知应用程序,此时应用程序的SIGIO信号处。阻塞方式打开设备,这样从设备中读取数据的时候就是非阻塞方式的了。

2023-12-27 20:41:46 375

原创 并发与竞争

在这种情况下,CPU1的对memory的修改被CPU2的操作覆盖了,因此执行结果是错误的。2、多核系统中,单个的机器指令就不是原子操作,因为多核系统里是多指令流并行运行的,一个核在执行一个指令时,其他核同时执行的指令有可能操作同一块内存区域,从而出现数据竞争现象。多核系统中的原子操作通常使用内存栅障(memory barrier)来实现,即一个CPU核在执行原子操作时,其他CPU核必须停止对内存操作或者不对指定的内存进行操作,这样才能避免数据竞争问题。线程:是进程内的执行单元,共享同一地址空间。

2023-12-26 12:28:56 1383

原创 RK3588 Lubancat SDK Ubuntu系统构建

野火提供了鲁班猫RK3588 Lubancat SDK,通过百度网盘下载。

2023-12-18 18:29:37 1414

原创 鲁班猫4系统配置

3.按住MASKROM按键不松开,先将准备好的USB线插入板卡的下载接口,再插入电源。部分下载接口与电源接口共用的板卡无需再插入额外的电源,但需保证电脑USB接口能提供至少5V 0.5A的供电。2.将所有有可能给板卡供电的接线都断开,如电源线,其他USB线等。电脑段最好去掉其他usb设备,不然容易造成冲突导致识别不到板子。4.等待软件提示 发现一个MASKROM设备,继续等待5秒以上再松开按键。1.将准备好的USB线缆,一端连接电脑,一端预留备用。5.如果不成功,重复2-4步骤。

2023-12-14 11:24:13 1478

原创 常用Linux命令

使用以下命令进行解压。

2023-12-14 11:15:37 375

原创 输入子系统(四)编写设备驱动步骤

在kerne/include/dt-bindings/input/input-event-codes.h头文件中Linux已经帮我们定义好了事件类型,这些事件类型将我们常用的都列出来了,对于不常用的可以使用。创建input_ dev 结构体变量,使用input_ allocate_ _device 函数。在input_dev结构体中,这些成员表示不同的位图,用于描述输入设备支持的时间类型和功能。注销和释放input_ dev,使用input_ free_类型可以通过_ sit_ bit 函数来设置。

2023-12-13 21:33:06 370

原创 输入子系统(三)源码及裁剪

驱动裁剪

2023-12-13 21:09:44 422

原创 make menuconfig出现flex:not found

首次make menuconfig出现错误

2023-12-13 20:51:02 695

原创 Linux宏EXPORT_SYMBOT

EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。导出符号不调用,改函数所做的动作也不会被执行。注意:需要添加许可证:MODULE_LICENSE(“GPL v2”), 不然编译报错。3、先加载定义该函数的模块,然后再加载调用该函数的模块,请注意这个先后顺序。1、在模块函数定义之后使用"EXPORT_SYMBOL(函数名)"来声明。2、在调用该函数的另外一个模块中使用extern对之声明。

2023-12-12 16:06:31 437

原创 输入子系统(二)系统框架

connect()函数位于evdev.c中,也就是事件处理层,其作用就是:创建设备,实现文件操作集,并且生成设备节点。在input_register_handler中使用input_attach_handler对input_handler和input_dev即事件处理层和设备驱动层进行进行匹配。在设备驱动层中,定义了input_dev结构体,此结构体位于input.h中,可以看到这个结构体非常长,这里面的部分函数需要我们自己实现。input子系统包括三个层次,分别是设备驱动层,核心层,事件处理层。

2023-12-12 15:49:36 408

原创 输入子系统(一)确定设备节点

输入子系统是Linux专门为输入类设备编写的一个子系统(框架)。从而规范驱动开发,降低开发难度。并且驱动的通用性兼容会更好。

2023-12-12 14:47:37 440

原创 uCOS-III 时间片轮转调度

参考https://blog.youkuaiyun.com/baidu_39514357/article/details/122901648。

2023-12-05 17:38:27 1792

原创 FreeRTOS时间片

在 RTOS 中,最小的时间单位为一个 tick,即 SysTick 的中断周期, RT-Thread 和 μC/OS 可以指定时间片的大小为多个 tick,但是 FreeRTOS 不一样,时间片只能是一个 tick。在SysTick中断函数中并不是直接执行任务切换,而是将xTickCount进行加1操作,xTickCount是FreeRTOS的系统时钟节拍数,具体实现函数则是xTaskIncrementTick(),该函数在中断函数中被调用。FreeRTOS支持时间片的功能。最后返回任务切换信息。

2023-12-05 17:23:16 1825

原创 野火RK3588 Uboot文件夹目录结构

【代码】野火RK3588 Uboot文件夹目录结构。

2023-12-04 16:20:04 849

原创 FreeRTOS任务切换分析

本文是对文章https://freertos.blog.youkuaiyun.com/article/details/51418383的一部分摘录与补充。

2023-11-28 18:16:05 1021

原创 编写博客原由

之前就知道自己在写文章时思维跳脱,没有逻辑。这次在毕业论文选题,完成毕业论文时栽了大坑。通过博客记录的方式来提升自己的思维逻辑性以及表达能力。对于自己学习的东西,看懂与表达出来有巨大鸿沟。通过编写博客的方式一是记录学习的过程,二是可以弥补在学习过程中一些忽略和未理解的知识点。

2023-11-28 17:31:51 337

空空如也

空空如也

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

TA关注的人

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