avatar
Articles
140
Tags
0
Categories
18
首页
归档
标签
分类
友链
李瑞琦的博客
首页
归档
标签
分类
友链

李瑞琦的博客

rtt
Created2025-06-04|05-MCU
1.描述适配RT-Thread与调度相关的主要的API有哪些?这些API在哪些场景会使用? 移植RT-Thread新的内核的过程中,为了能让各个线程正常地调度,需要对于该内核重写/libcpu中定义的以下API: (1)上下文切换函数: 12345678//没有来源线程的上下文切换,在调度器启动第一个线程的时候调用,以及在 signal 里面会调用void rt_hw_context_switch_to(rt_uint32_t to);//用于线程和线程之间的切换,从 from 线程切换到 to 线程void rt_hw_context_switch(rt_uint32_t from, rt_uint32_t to);//用于中断里面进行切换的时候使用,从 from 线程切换到 to 线程void rt_hw_context_switch_interrupt(rt_uint32_t from, rt_uint32_t to); (2)全局中断控制:调度器依赖全局中断的开关来保证临界区的安全,需实现以下API: 12345//关闭全局中断rt_base_t...
串口通信进制问题
Created2025-06-04|05-MCU
串口通信进制问题由于UART一般通信帧是8 bit,所以通常以ASIIC码的形式进行传输,但也可以用一位16进制数来进行传输。 常见的串口助手默认发送的都是字符型比如’5’,或者说ASIIC码的形式,如果要发送16进制数,需要选择16进制发送,比如要发0xFF,串口助手这里发送写成FF就行,但单片机的的if中必须写成0XFF Python发送16进制数先用bytearry打包,然后serial.write就行了
优秀的程序结构
Created2025-06-04|05-MCU
记录从网上一些大佬的代码中学习到的比较好的代码结构,有助于简化编程。 1.main.cpp和CUBE生成的main.c分开放,在main.cpp中定义用户函数Main(),放到main.c的main()中。这样即使CUBE再生成也不会覆盖了。 2.稚晖君在Main()中做了如下的事情: Main(){电机:绑定驱动、编码器、初始化按键:绑定回调函数开启定时器主循环} 3.在main.cpp中,它还定义了一堆定时器的Event Callbacks,按键回调函数的实现。 4.定时器中断函数不要直接写在Cube给我们定义的接口中,可以自己定一个函数,比如Tim1Callback100Hz(),然后把这个函数放进定时器的IRQHandler中调用就行了,比较直观。 5.如果一个类需要定时器作为时间基准,那么就定义.Tick()函数,并放到定时器的回调函数中。然后在类中定义_Elapsedtime这个变量记录时间。 Tick函数的内容一般就是:给类中的_Elapsedtime变量加时间;如果涉及状态机,则在Tick()里面更新状态,并调用回调函数。手表的PageManager类就是这样的。
06 input子系统
Created2025-06-04|04-Linux04-应用开发
input子系统 在应用层对于input子系统的开发,其实就是:通过读取/dev/input/eventX设备文件,获取某个input设备的输入信息的过程 1.怎么看某个硬件设备对应input子系统下哪个event呢? 1cat /proc/bus/input/devices 看Handlers字段 2.应用层如何获取从input子系统的设备获取数据? 对/dev/input/eventX设备节点进行open()和read()系统调用 12345678910int fd = open("/dev/input/eventX",O_RDONLY);struct input_event ev;while(1){ if(read(fd,&ev,sizeof(struct input_event)) != sizeof(struct input_event)) { perror("error!"); exit(-1); ...
07 V4L2框架
Created2025-06-04|04-Linux04-应用开发
V4L2框架简介V4L2是Linux内核中的一套驱动框架,为视频类设备(USB、CSI摄像头…)的驱动开发和应用层提供了一套统一的接口规范 V4L2将视频设备视为字符设备,例如/dev/videoX,用户可以通过标准的文件系统接口(如ioctl、open、read、write等)与之交互 在音视频开发领域,许多框架比如FFmpeg都是以V4L2作为基础开发的,所以这个框架还是比较重要的 工作流程 从流程图中可以看到,几乎对摄像头的所有操作都是通过 ioctl()来完成,搭配不同的 V4L2 指令请求不同的操作,这些指令定义在头文件 linux/videodev2.h 中 打开设备打开设备其实和别的类型的设备一样,用open()系统调用就行了 1fd = open("/dev/video0", O_RDWR); 查询属性在V4L2中,使用ioctl()封装了一个指令和结构体用于属性的查询 1234567891011ioctl(int fd, VIDIOC_QUERYCAP, struct v4l2_capability *cap);struct...
01 应用开发概述
Created2025-06-04|04-Linux04-应用开发
...
02 应用层控制GPIO
Created2025-06-04|04-Linux04-应用开发
应用层控制GPIO控制GPIO硬件有以下几种方法: 编写驱动程序,在设备的IO操作里完成对GPIO的任意控制 在应用层依靠GPIO子系统在/sys/class/gpio中为GPIO类设备的属性文件来进行简单控制 1.基于sysfs进入到/sys/class/gpio 目录下可以看到GPIO控制器包含以下属性: export unexport gpiochipX 在使用一个GPIO前,需要将一个GPIO导出到用户空间,这样才能使用它,通过将要导出的GPIO序号写入到export属性文件即可完成导出,取消导出的话将要取消导出的GPIO序号写入到unexport属性文件即可。 在导出一个GPIO后,在/sys/class/gpio 目录下会新多出一个目录,代表此GPIO设备,该目录包含4个属性文件: 1.active_low:配置GPIO的极性,value的0/1到底代表高还是低电平由此属性决定( ==输入输出均是==) 1234567891011121314//active_low 等于 0 时echo...
03 文件IO
Created2025-06-04|04-Linux04-应用开发
文件IO Linux下,一切皆文件。这句话指的是,Linux系统中,将对所有输入/输出资源(文件、管道、Socket、硬件设备)的操作都抽象成了对文件的操作。所以学习文件I/O的相关API很重要 1.文件描述符在Linux系统中,使用open()系统调用打开一个I/O资源后,会返回一个非负整数,这个非负整数就是==文件描述符==fd。后续所有的对于该资源的操作,都需要这个文件描述符。 这里我使用I/O资源而不是文件,因为打开像socket这样的资源时,并不是真的打开了一个文件,但是也会返回一个文件描述符。 Linux内核中,对每一个进程都维护一个打开文件表(struct...
05 FrameBuffer设备
Created2025-06-04|04-Linux04-应用开发
FrameBuffer设备 帧缓冲设备的应用开发通常是对/dev/fbX这个帧缓冲设备文件进行I/O操作,在注册帧缓存设备时,会在内核中开辟一个缓冲区,可以把它看成指向显存的指针,通过修改这个缓冲区的内存,内核会同步更改显存,进而改变帧缓冲设备实际显示的内容 个人感觉这一章介绍的对于Framebuffer设备的应用开发API过于底层,实际开发应该不会用如此底层的API来开发,而是用Qt或者LVGL那样的框架进行开发,所以==这章学习的意义不是很大== 1.基本步骤对帧缓冲设备的应用开发主要包括以下几步: 1.打开/dev/fbX这个设备文件 2.通过ioctl()系统调用获得帧缓冲设备的一些重要信息:如屏幕的分辨率大小、像素格式,根据屏幕参数计算显示缓冲区的大小 3.通过存储映射 I/O 方式将屏幕的显示缓冲区映射到用户空间(mmap),之后就能像操作数组一样操作显存 4.映射成功后就可以直接读写屏幕的显示缓冲区,进行绘图或图片显示等操作了 5.完成显示后,调用 munmap()取消映射、并调用...
04 网络编程
Created2025-06-04|04-Linux04-应用开发
...
1…678…14
avatar
Li Ruiqi
总有低谷
Articles
140
Tags
0
Categories
18
Follow Me
Categories
  • 01-计算机基础八股12
  • 02-开发工具11
    • CMake7
  • 03-C++15
  • 04-Linux39
    • 01-Linux基本操作6
    • 02-系统移植7
    • 03-内核开发19
    • 04-应用开发7
  • 05-MCU28
    • 01-FreeRTOS6
    • 02-STM329
    • 03-MSP4304
    • 04-LVGL4
  • 06-嵌入式硬件5
  • 07-RISC-V3
  • 08-Qt20
  • 09-ROS7
Website Info
Article Count :
140
Unique Visitors :
Page Views :
Last Update :
©2019 - 2025 By Li Ruiqi
Framework Hexo|Theme Butterfly
人因梦想而伟大