自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixin_42031299的博客

本人是刚入行嵌入式开发的技术小白,博客都是工作和业余学习的总结。如有不对,欢迎指教。

  • 博客(456)
  • 资源 (9)
  • 收藏
  • 关注

原创 以RISC-V架构的CLIC中断机制讲解:中断咬尾、中断抢占、中断晚到

中断抢占的条件高特权模式的中断可以抢占低特权模式的中断,不管低特权模式的全局中断是否使能同特权模式的中断,高中断等级的中断要抢占低特权等级的中断,前提是特权模式的全局中断必须要使能中断抢占:前一个中断还在执行时发生了更高等级的中断,立马去执行高等级的中断处理程序,等高等级的中断处理程序执行完毕,再回来执行前一个中断出来程序的剩余部分。

2024-03-22 19:00:00 363

原创 RISC-V架构中mret、sret、ret三个指令的区别

ret用于函数调用返回,mret和sret用于从高特权模式切换回陷入前的地特权模式。

2024-03-21 19:00:00 365

原创 RISC-V架构的三种特权模式如何切换

【代码】RISC-V架构的三种特权模式如何切换。

2024-03-20 20:25:23 1025

原创 QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

使用qemu时,想快速知道开发板的地址空间映射情况,特别是某些外设控制器的寄存器基地址。

2024-03-07 19:01:13 385

原创 嵌入式开发的常用软件、学习资源网站推荐

嵌入式开发常用软件、学习网站推荐

2024-03-06 20:30:39 1157

原创 RISC-V架构学习资料整理

https://github.com/bigmagic123/d1-nezha-baremeta

2024-03-06 19:24:15 450

原创 RISC-V架构的不可屏蔽中断(NMI:Non-Maskable Interrupt)介绍

以NMI为例,芯莱处理器的硬件行为在“The overall process of NMI”章节描述。注意,下面的操作在一个周期中同时完成:当发生NMI时,硬件会自动将NMI的编码保存到mcause寄存器中,异常、中断和NMI都有专属的trap ID。NMI的trap ID有两种潜在的值被mmisc_ctl寄存器控制软件可以通过查询Trap ID区分出陷入原因,并且对不同的陷入类型构建对应的处理函数

2024-03-06 19:12:05 716

原创 芯来芯片的硬件栈溢出检测机制(Stack Check)介绍

硬件的栈溢出检测机制

2024-02-26 19:00:00 325

原创 RISC-V架构——CLINT中断控制器初始化(直接模式、向量模式)

模式位占用两个bit,其中2和3这两个值是保留的,在有的芯片中,2和3会分别对应CLIC的直接模式和CLIC的向量模式模式位不仅可以决定是直接模式还是向量模式,还可以决定使用CLINT控制器还是CLIC控制。

2024-02-20 18:30:00 1005

原创 嵌入式开发——linux系统怎么知道接了多少物理内存?

1、前言linux系统是不知道当前设备接了多少内存,需要bootloader在启动时告诉linux系统感知到当前设备接了多少物理内存有两种方式动态识别(X86架构大多是这种):可以插拔的内存条,bootloader能识别出内存条的容量代码里写死(ARM架构大多是这种):设备的内存是贴片上去的,不支持动态改变,内存的容量在代码里写死(系统工程师在适配程序时要根据实际物理内存容量去修改代码)2、linux系统知道实际物理内存大小的方式设备树中可以通过"/memory"节点来指定内存的起始

2024-02-10 11:36:48 374

原创 freeRTOS的第一个任务是如何跑起来的?(以RISC-V架构分析)

介绍freeRTOS是如何开始运行第一个任务

2024-01-31 19:00:00 401

原创 链接脚本常用命令(KEEP、MEMORY、PROVIDE、ENTRY、AT、ALIGN等)

【代码】链接脚本常用命令(KEEP、MEMORY、PROVIDE、ENTRY、AT、ALIGN等)

2024-01-31 18:10:08 517

原创 GNU链接脚本的MEMORY命令解析

GNU链接脚本的MEMORY命令解析。

2024-01-31 17:57:38 317

原创 RISC-V架构常见gcc编译选项(-march、-mabi=、-mcmodel、-mlittle-endian、-mbig-endian)

【代码】RISC-V架构常见gcc编译选项(-march、-mabi=、-mcmodel)

2024-01-28 10:35:19 1321

原创 gcc扩展选项__attribute__((interrupt))——指定中断处理函数属性

不使用__attribute__((interrupt))修饰,函数内只需要保存被调用者保存的寄存器使用__attribute__((interrupt))修饰后,只要在函数内使用到的寄存器都必须保存再恢复,会占用更多的栈空间,翻译得到的汇编代码也会增多还可以指定中断处理函数的优化等级:只有中断处理函数才用__attribute__((interrupt))修饰,其余常规函数不要使用。

2024-01-20 15:32:39 1080

原创 获取编译工具链默认的链接脚本

1、ld命令使用“–verbose”参数命令:riscv64-linux-gnu-ld --verbose想使用自己的链接脚本,链接时使用“-T”指定

2024-01-19 22:31:02 378

原创 freeRTOS的栈溢出检测机制

/当前任务使用的栈空间地址,也就是SP指向的地址//记录分配给任务的栈空间的最低地址《freertos任务调度机制深度分析(以RISC-V架构为例)》;在创建任务时,把任务的栈空间赋值成特殊值在切换任务时,检查栈空间的最后一小段是否被改写过如果不是特殊值则说明该段栈空间被使用过,则认为任务栈空间不足,曾经发生过栈溢出上面介绍的两种栈空间溢出检测机制,基本只能检测出是否发生过栈空间溢出,不好定位是何时何地发生栈空间溢出。

2024-01-05 19:00:00 980

原创 四种“栈溢出检测方法”实现分析(2种纯软件、一种纯硬件、一种软硬件结合)

介绍栈溢出检测机制

2024-01-05 19:00:00 499

原创 freeRTOS学习资料整理

1、视频资料韦东山的freeRTOS视频:《韦东山freeRTOS系列教程:FreeRTOS的内部机制》;2、文档资料3、硬件平台学谁的视频买谁的开发板使用qemu平台来学习,适合有经验的人,可以节省买开发板的钱

2023-12-25 19:59:38 424

原创 嵌入式开发——移植printf函数源码到裸机程序中

【代码】嵌入式开发——移植printf函数源码到裸机程序中。

2023-12-24 21:00:00 465

原创 gitee提交代码步骤介绍(含git环境搭建)

gitee提交代码步骤

2023-12-17 21:17:07 258

原创 Windows中安装Git软件和TortoiseGit软件

>https://tortoisegit.org/download/

2023-12-17 13:50:58 192

原创 在qemu平台使用gdb调试程序

x:指定gdb的配置文件,这个不是必须的。使用配置文件可以提高调试效率,将每次开始gdb调试都需要输入的命令,提前写到配置文件中。ctrl键 + n:下一条命令(功能和在linux命令行使用“下键”来查看之前输入过的命令)ctrl键 + p:上一条命令(功能和在linux命令行使用“上键”来查看之前输入过的命令)shell + linux命令:在gdb命令行使用linux命令。配置文件实现的效果和在命令行手动敲命令是一样的。

2023-12-16 19:00:00 856

原创 FreeRTOS的三处栈空间设置分析

参考博客:;

2023-12-12 19:00:00 442

原创 分配栈空间的三种方式(基于适配qemu的FreeRTOS分析)

1、定义全局的数组定义的全局数组属于bss段,相当于把bss段的一部分作为栈空间,栈空间的大小就是数组的大小如果把栈空间放在bss段,则在bss段清零时会多清零一段地址空间2、在链接脚本中指定用链接脚本在所有段的后面增加stack段,在上一个段的尾部增加_stack_top大小作为栈的最高地址,用_stack_top符号记录栈空间的大小由_stack_size指定栈的所在地址是根据链接时候动态指定的3、直接在代码里指定栈空间起始地址直接在代码中指定栈空间最高位地址,但是没有指

2023-12-11 22:00:00 85

原创 Ubuntu中编译出Windows的可执行程序(.exe)

在嵌入式开发中,交叉编译是很常见的情况,如果你把Windows电脑也看做一块高性能的开发板,那在Ubuntu中编译出Windows上运行的可执行程序也是很好理解的行为。

2023-12-09 23:03:50 668

原创 freertos任务调度机制深度分析(以RISC-V架构为例)

/就绪链表,configMAX_PRIORITIES是定义的当前支持最大的优先级,数字越大优先级越高//就绪链表有多个,每个优先级有一个就绪链表//两个都是挂起休眠任务的,之所以有两个是为了解决tickCount超过表示范围产生翻转//这是两个链表指针,用于指向上面的两个休眠链表//任务调度器挂起期间解除阻塞条件得到满足的阻塞任务,在任务调度器恢复工作后,//这些任务会被移动到就绪链表组中,变为就绪状态。//这个保存被删除的任务,等待空闲链表去回收资源。

2023-11-29 21:30:00 1438

原创 freeRTOS异常处理函数分析(以RISC-V架构进行分析)

1、异常处理函数的注册对RISC-V架构中断不熟悉,可参考博客:《RISC-V架构——中断处理和中断控制器介绍》;2、异常处理函数分析2.1、数调用关系freertos_risc_v_trap_handler //异常处理函数入口 portcontextSAVE_CONTEXT_INTERNAL //保存任务切换上下文 asynchronous_interrupt //异步异常:时钟中断 handle_interrupt //异步异常:时钟中断 portUPDATE_MTIM

2023-11-29 19:00:00 262

原创 freerots启动过程分析(qemu仿真RISC-V架构为例)

汇编文件:FreeRTOSv202212.01\FreeRTOS\Demo\RISC-V-Qemu-virt_GCC\start.S。

2023-11-28 21:30:00 125

原创 freertos任务切换的现场保存、恢复(任务栈空间)深度分析(以RISC-V架构为例)

1、任务控制块在内存中的布局RISC-V架构采用的减栈,即栈向低地址空间生长;在freertos中采用任务控制块(TCB)结构来表示一个任务每个任务有自己的任务栈,任务栈是紧挨着TCB的,且TCB在地址高位,任务栈在地址低位。TCB在地址高位,任务栈在地址低位的原因:xTaskCreate函数中先申请的任务栈,再申请的2、创建任务时初始化任务栈线程函数的地址保存在mepc,这样在切换线程时就会把mepc寄存器中的值写到pc寄存器中,进而执行线程函数线程函数的传参保存在x10寄存

2023-11-27 16:42:29 446

原创 移植freertos到qemu上运行

1、freertos源码下载参考博客:《freertos源码下载和目录结构分析》;2、编译freertos2.1、选择合适的Demofreertos官方已经适配过qemu,所以我们并不需要做源码级别的移植,只需要选择合适的Demo文件夹。2.2、修改Makefile2.3、编译3、在qemu上运行freertosqemu安装可参考博客:《freertos源码下载和目录结构分析》;

2023-11-15 20:26:15 383

原创 freertos源码下载和目录结构分析

1、源码下载下载网址:https://www.freertos.org/zh-cn-cmn-s/;2、源码目录结构3、关键的代码文件

2023-11-15 19:54:00 306

原创 Windows安装svn命令

1、svn命令下载地址https://www.visualsvn.com/downloads/;2、安装svn命令3、测试svn命令是否安装成功

2023-11-08 19:00:00 419

原创 韦东山D1S板子——利用xfel工具初始化内置64MB内存,并直接下载程序到内存运行

(1)最近使用韦东山老师的D1S板子学习RISC-V架构知识,我是结合《RISC-V体系结构编程与实践》这本书的进行学习,其中韦东山老师对书中的代码做了部分移植,到MMU模块就没有在移植书中代码;(2)前面章节移植的代码都是下载到D1S芯片内置的IRAM中运行,后续实验需要将代码搬运至内存中,IRAM大小已经不够了;(3)最初我是想剥离出初始化DDR的代码并添加到工程里,后来发现数据手册里根本没有关于DDR部分的描述。

2023-10-31 19:30:00 212

原创 韦东山D1S板子——汇编启动代码第一行分析(.long 0x0300006f)

全志SDK里是通过代码来构建出jal跳转指令,相较于韦东山老师写的0x0300006f要更灵活,可以根据启动代码的头来动态计算出偏移量;而韦东山老师写的代码,头的大小只能是0x30字节。

2023-10-28 16:00:00 212

原创 Notepad++实用小技巧

1、选中当前列2、选中当前列一直到最后一行3、删除当前行:ctrl + L

2023-10-28 10:28:47 331

原创 RISC-V架构——中断处理和中断控制器介绍

本文不是从零开始讲解中断,对于中断的基本知识不再赘述,对中断不是很了解可以先学习ARM中断的文章。;

2023-10-25 20:45:00 1001

原创 RISC-V架构——中断委托和中断注入

(1)默认情况下,所有的陷入(中断和异常)都是在M模式下处理,然后再返回到发生陷入前的模式;(2)所有陷入都在M模式处理会涉及到模式切换,而模式切换是比较消耗性能和时间的。比如:在S模式下发生外部中断,需要切换到M模式处理中断,然后再返回到S模式;(3);

2023-10-25 19:00:00 647

原创 我为什么写博客?写博客给我带来了什么?

(1)刚开始接触CSDN,是大三的时候开始学习嵌入式开发,经常需要到网上百度查资料,由此经常游览CSDN上的博客;(2)在嵌入式的过程中,需要总结学习过的知识。以前总结知识是习惯手写,但是学习嵌入式会涉及图片和代码,手写不合适了,刚开始尝试过用word,但是使用过程很不习惯;受到其他博主在网上发布博客的启发,自己也把知识总结以博客的形式发布,个人觉得Markdown编辑器比word更容易入门;

2023-10-24 23:05:38 497

原创 从github下载文件时遇到报错(Unable to render code block)解决办法

https://ghproxy.com/ (GitHub 文件 , Releases , archive , gist , raw.githubusercontent.com 文件代理加速下载服务)

2023-10-24 19:15:00 3392 4

玄铁c906用户手册pdf

玄铁c906用户手册pdf

2023-10-23

全志裸机烧录工具xfel

此版本xfel修复了因为spi norFlash写保护而不能烧写norFlash的BUG。

2023-10-09

wireshark软件

压缩包里是wireshark软件安装包,包含Windows32位和Windows64位两个安装程序。

2023-06-04

pcie学习资料112233

pcie学习资料11111111111111111111111111111111111

2023-04-20

从零开始用C语言实现图片解码播放器源码

源码稍加修改可以直接编译运行,整个源码的功能是实现bmp、png、jpg图片的解码播放,支持触摸屏翻页。详细的项目介绍可以阅读我的博客:https://blog.csdn.net/weixin_42031299/article/details/126563220

2022-08-27

BMP格式转RGB格式源码

资源包里是BMP图像格式转RGB图像格式的源码,可以直接编译成可执行程序进行测试, 该源码支持8bit、16bit、24bit、32bit的BMP图像。

2022-08-20

【hisi3516d芯片】基于hwmon驱动框架——获取芯片温度驱动的源码

【hisi3516d芯片】基于hwmon驱动框架——获取芯片温度驱动的源码

2022-05-21

Makefile学习资料

很详细的介绍了Makefile知识

2022-05-07

查看二进制文件的常用软件

查看二进制文件的常用软件

2022-04-18

SecureCRT软件

Windows中阅读C语言的常用软件

2022-04-18

7YUV--查看YUV、RGB等格式的软件

7YUV--查看YUV、RGB等格式的软件

2022-04-18

Windows中tftp服务器软件

在Windows中搭建tftp服务器

2022-04-18

Windows中nfs服务器软件

在Windows中搭建NFS服务器

2022-04-18

iperf-2.0.9版本的源码

iperf-2.0.9版本的源码

2022-04-07

空空如也

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

TA关注的人

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