StudyWinter
码龄7年
关注
提问 私信
  • 博客:1,010,710
    社区:1
    1,010,711
    总访问量
  • 451
    原创
  • 3,144
    排名
  • 7,772
    粉丝

个人简介:持续学习

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:瑞典
  • 加入CSDN时间: 2017-05-29
博客简介:

StudyWinter的博客

查看详细资料
  • 原力等级
    领奖
    当前等级
    8
    当前总分
    6,144
    当月
    34
个人成就
  • 获得2,055次点赞
  • 内容获得277次评论
  • 获得5,685次收藏
  • 代码片获得37,026次分享
创作历程
  • 41篇
    2024年
  • 85篇
    2023年
  • 129篇
    2022年
  • 127篇
    2021年
  • 153篇
    2020年
  • 1篇
    2019年
  • 9篇
    2017年
成就勋章
TA的专栏
  • opencv
    3篇
  • 数据结构
    21篇
  • tools
    6篇
  • u-boot完全分析与移植
    1篇
  • 韦东山嵌入式linux系列
    23篇
  • linux系统内核设计与实现
    6篇
  • C&C++记录学习
    98篇
  • 算法
    18篇
  • 剑指offer
    2篇
  • 刷题
    77篇
  • C++11/14/17
    6篇
  • c/c++的边边角角
    4篇
  • AI学习
    1篇
  • STM32
    6篇
  • linux系统编程
    25篇
  • 虚拟机
    7篇
  • QT
    24篇
  • git
    14篇
  • 安装与卸载
    10篇
  • Effective C++
    24篇
  • 程序员的自我修养
  • Rust
    16篇
  • 深度探索c++对象模型
    8篇
  • 计算机基础
    49篇
  • 操作系统
    36篇
  • python
    20篇
  • 计算机网络
    5篇
  • 排序
    11篇
  • STL
    7篇
  • linux网络编程
    13篇
  • mysql&redis
    7篇
  • 设计模式
    17篇
  • 各种BUG
    2篇
  • ros
    11篇
  • 人工智能
    2篇
  • 知识图谱
    1篇
  • 数学建模
    1篇
  • spring&springboot学习记录
    16篇
  • java学习记录
    19篇
  • 资源下载
    1篇
  • 查找
    8篇
  • Docker
    2篇
  • 论文
    1篇
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

175人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

u-boot完全分析与移植-U-Boot的功能

"U-Boot" 是 "Universal Bootloader" 的简称,是一个广泛使用的开源引导程序,主要用于嵌入式系统。U-Boot 的主要功能是在设备启动时初始化硬件、加载操作系统内核并将控制权移交给内核。它支持多种处理器架构和硬件平台,因此在嵌入式设备、单板计算机、路由器等多种设备中得到了广泛应用。U-Boot 允许用户通过命令行界面执行各种任务,如修改引导参数、调试硬件问题、从网络或存储设备加载操作系统镜像等。这种灵活性使得 U-Boot 成为嵌入式开发中的一个重要工具。
原创
发布博客 2024.08.21 ·
448 阅读 ·
5 点赞 ·
0 评论 ·
9 收藏

韦东山嵌入式linux系列-mmap

ARM 架构支持一级页表映射,也就是说 MMU 根据 CPU 发来的虚拟地址可以找到第 1 个页表,从第 1 个页表里就可以知道这个虚拟地址对应的物理地址。一级页表里地址映射的最小单位是 1M。ARM 架构还支持二级页表映射,也就是说 MMU 根据 CPU 发来的虚拟地址先找到第 1 个页表,从第 1 个页表里就可以知道第 2 级页表在哪里;再取出第 2级页表,从第 2 个页表里才能确定这个虚拟地址对应的物理地址。二级页表地址映射的最小单位有 4K、 1K, Linux 使用 4K。
原创
发布博客 2024.08.06 ·
1060 阅读 ·
15 点赞 ·
0 评论 ·
8 收藏

韦东山嵌入式linux系列-驱动程序基石

值得注意的是,上面 2个红线部分都属于 APP1 的“上下文”,或者这样说:红线所涉及的代码,都是 APP1调用的。但是按键的中断服务程序,不属于 APP1的“上下文”,这是突如其来的,当中断发生时, APP1正在休眠呢。当 APP1 再次运行时,就会继续执行 drv_read 中剩下的代码,把数据复制回用户空间,返回用户空间。在中断的处理过程中,也就是 gpio_key_irq 的执行过程中,它不能休眠:“中断”怎么能休眠?在 APP1的“上下文”,也就是在 APP1的执行过程中,它是可以休眠的。
原创
发布博客 2024.07.31 ·
775 阅读 ·
10 点赞 ·
0 评论 ·
20 收藏

韦东山嵌入式linux系列-Linux 系统对中断的处理

以前用 work 来线程化地处理中断,一个 worker 线程只能由一个 CPU 执行,多个中断的 work 都由同一个 worker 线程来处理,在单 CPU 系统中也只能忍着了。而这些线程,之间是互相独立的,“同时运行”,也就是说:每一个线程,都有自己的栈。在中断的处理过程中,该 CPU 是不能进行进程调度的,所以中断的处理要越快越好,尽早让其他中断能被处理──进程调度靠定时器中断来实现。可以,但是开销太大:读按键的程序,要把按键通知播放音乐的程序,进程间通信的效率没那么高。
原创
发布博客 2024.07.27 ·
846 阅读 ·
22 点赞 ·
0 评论 ·
23 收藏

韦东山嵌入式linux系列-异常与中断的概念及处理流程

中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。后面的 3 种方式,都需要“小孩来中断妈妈”:中断她的睡眠、中断她的工作。
原创
发布博客 2024.07.27 ·
912 阅读 ·
20 点赞 ·
0 评论 ·
26 收藏

韦东山嵌入式linux系列-GPIO 和 Pinctrl 子系统的使用

前面的学习,我们使用直接操作寄存器的方法编写驱动。这只是为了让大家掌握驱动程序的本质,在实际开发过程中我们可不这样做,太低效了!如果驱动开发都是这样去查找寄存器,那我们就变成“寄存器工程师”了,即使是做单片机的都不执着于裸写寄存器了。Linux 下针对引脚有 2 个重要的子系统: GPIO、 Pinctrl。
原创
发布博客 2024.07.26 ·
868 阅读 ·
20 点赞 ·
0 评论 ·
22 收藏

韦东山嵌入式linux系列-具体单板的按键驱动程序(查询方式)

button_operations 结 构 体 中 有 init 函 数 指 针 , 它 指 向board_stm32mp157_button_init 函数,在里面将会初始化 LED 引脚:使能、设置为 GPIO 模式、设置为输出引脚。该寄存器共32位,涉及16个GPIO,每个GPIO对应 2 位。button_operations 结 构 体 中 还 有 有 read 函 数 指 针 , 它 指 向board_stm32mp157_button_read 函数,在里面将会读取并返回按键引脚的电平。
原创
发布博客 2024.07.24 ·
1235 阅读 ·
24 点赞 ·
1 评论 ·
17 收藏

韦东山嵌入式linux系列-gpio_drv_template

合并 LED 、 BUTTON 框 架 驱 动 程 序 :01_led_drv_template 、01_button_drv_template,合并为:gpio_drv_template
原创
发布博客 2024.07.23 ·
346 阅读 ·
3 点赞 ·
0 评论 ·
7 收藏

韦东山嵌入式linux系列-查询方式的按键驱动程序_编写框架

这样的结构易于扩展,对于不同的单板,只需要替换 board_xxx.c 提供自己的 button_operations 结构体即可。register_button_operations 函 数代码如下,它还根据底层提供button_operations 调用 device_create,这是创建设备节点。上层是 button_drv.c,它的核心是 file_operations 结构体,首先看看入口函数,代码如下。按键被按下后,上图中左边的 GPIO 电平为低,右边的 GPIO 电平为高。
原创
发布博客 2024.07.22 ·
1030 阅读 ·
15 点赞 ·
0 评论 ·
24 收藏

韦东山嵌入式linux系列-APP 怎么读取按键值

在做单片机开发时,要读取GPIO按键,通常是执行一个循环,不断地检测GPIO引脚电平有没有发生变化。。这 4 种方法并不仅仅用于 GPIO 按键,在所有的APP 调用驱动程序过程中,都是使用这些方法。通过这 4 种方式的学习,可以掌握如下知识:① 驱动的基本技能:中断、休眠、唤醒、 poll 等机制。这些基本技能是驱动开发的基础,其他大型驱动复杂的地方是它的框架及设计思想,但是基本技术就这些。② APP 开发的基本技能:阻塞 、非阻塞、休眠、 poll、异步通知。
原创
发布博客 2024.07.21 ·
784 阅读 ·
24 点赞 ·
0 评论 ·
30 收藏

韦东山嵌入式linux系列-驱动总结

一步步由简单到框架。
原创
发布博客 2024.07.21 ·
1019 阅读 ·
22 点赞 ·
0 评论 ·
20 收藏

韦东山嵌入式linux系列-LED 模板驱动程序的改造:设备树-具体单板stm32mp157的驱动程序

韦东山嵌入式linux系列-LED 模板驱动程序的改造:设备树-具体单板stm32mp157的驱动程序
原创
发布博客 2024.07.21 ·
399 阅读 ·
5 点赞 ·
0 评论 ·
10 收藏

韦东山嵌入式linux系列-LED 模板驱动程序的改造:设备树

① dts 在PC机上被编译为 dtb 文件;② u-boot 把dtb文件传给内核;③ 内核解析dtb文件,把每一个节点都转换为 device_node 结构体;④ 对于某些 device_node 结构体,会被转换为 platform_device 结构体。
原创
发布博客 2024.07.20 ·
918 阅读 ·
28 点赞 ·
0 评论 ·
26 收藏

韦东山嵌入式linux系列-驱动进化之路:设备树的引入及简明教程

在内核中,使用同一个芯片的板子,它们所用的外设资源不一样,比如A板用 GPIO A, B 板用 GPIO B。而 GPIO 的驱动程序既支持 GPIO A 也支持GPIO B,你需要指定使用哪一个引脚,怎么指定?比如 LED 驱动,在内核的驱动程序里去操作寄存器,但是操作哪一个引脚?请想想,要操作硬件就需要去操作复杂的寄存器,如果设备树可以操作寄存器,那么它就是“驱动”,它就一样很复杂。设备树并不是重新发明出来的,在 Linux 内核中其他平台如 PowerPC,早就使用设备树来描述硬件了。
原创
发布博客 2024.07.18 ·
1037 阅读 ·
24 点赞 ·
0 评论 ·
22 收藏

韦东山嵌入式linux系列-LED 模板驱动程序的改造:总线设备驱动模型

p_led_opr这个指针是由底层芯片相关的(chip_demo_gpio.c)代码提供的,其中chip_demo_gpio.c这里面有led_operations结构体,结构体中有init/ctl函数。应用程序调用open/write等函数最简单的方法时驱动层也提供对应的drv_open/drv_write,应用程序调用read/write,驱动层也提供对应的drv_open/drv_write等等,需要写出驱动层的函数。platform_driver有name,和platform_device匹配;
原创
发布博客 2024.07.17 ·
1069 阅读 ·
21 点赞 ·
0 评论 ·
30 收藏

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型-课后作业

③ 进入 platform_device_register/platform_driver_register 内部,分析 dev 和 drv 的匹配过程。有一个platform device,里面有resource,resource指向一个数组,里面定义了设备的资源,平台设备指定资源。(1)搜索 platform_device_register,随便找一个文件,找有全局变量的。(4)继续搜索它的platform_driver,按名称搜索(orion_nand)(2)点进去,在这个文件中可以看到注册。
原创
发布博客 2024.07.16 ·
251 阅读 ·
8 点赞 ·
0 评论 ·
2 收藏

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型

应用程序调用open等函数最简单的方法是驱动层也提供对应的drv_open,应用程序调用read,驱动层也提供对应的drv_read等等。需要写出驱动层的函数,为了便于管理,将这些函数放到file_operations结构体中,即第一步定义对应的file_operations结构体,并实现对应的open等程序(第一步);实现完成之后,将file_operations结构体通过register_chrdev注册到内核(第二步);然后通过入口函数调用注册函数(chrdev),安装驱动程序的时候,内核会调用入口函
原创
发布博客 2024.07.13 ·
1036 阅读 ·
28 点赞 ·
0 评论 ·
10 收藏

韦东山嵌入式linux系列-驱动设计的思想(面向对象/分层/分离)

比如 board_A.c 使用芯片 chipY,那就可以写出: chipY_gpio.c,它实现芯片 Y 的 GPIO 操作,适用于芯片 Y 的所有 GPIO 引脚。以面向对象的思想,在 board_A_led.c 中实现 led_resouce 结构体,它定义“资源”──要用哪一个引脚。在 chipY_gpio.c 中仍是实现 led_operations 结构体,它要写得更完善,支持所有 GPIO。a) 有方向寄存器 DIR、数据寄存器DR等,基础地址是addr_base_addr_gpio1。
原创
发布博客 2024.07.13 ·
1128 阅读 ·
11 点赞 ·
0 评论 ·
19 收藏

韦东山嵌入式linux系列-具体单板的 LED 驱动程序

1怎么写 LED 驱动程序?详细步骤如下:① 看原理图确定引脚,确定引脚输出什么电平才能点亮/熄灭 LED② 看主芯片手册,确定寄存器操作方法:哪些寄存器?哪些位?地址是?③ 编写驱动:先写框架,再写硬件操作的代码注意:在芯片手册中确定的寄存器地址被称为物理地址,在 Linux 内核中无法直接使用。
原创
发布博客 2024.07.13 ·
858 阅读 ·
13 点赞 ·
0 评论 ·
17 收藏

韦东山嵌入式linux系列-实现读LED状态的功能

这是第五篇第5章的课后作业,尝试实现实现读 LED 状态的功能:涉及 APP 和驱动。
原创
发布博客 2024.07.13 ·
863 阅读 ·
9 点赞 ·
0 评论 ·
18 收藏
加载更多