- 博客(475)
- 资源 (9)
- 收藏
- 关注
原创 RISC-V架构的平台级中断控制器(PLIC:platform-level interrupt controller)详解
本规范根据RISC-V平台级中断控制器规范(从RISC-V特权规范V1.11草案中删除)中定义的通用PLIC(platform-level interrupt controller )架构描述操作参数,以便在RISC-V系统的上下文中工作。PLIC将各种设备中断复用到Hart上下文的外部中断线上,并且具有中断优先级的硬件支持。PLIC最多支持1023个中断(中断号0保留)和最多15872个上下文,但是实际中断和上下文的数量取决于PLIC实现。
2025-02-27 20:17:19
663
原创 业务栈、异常栈、中断栈独立设置的优劣势分析(RISC-V架构)
业务栈:运行业务代码时用到的栈。如果支持任务调度,不同任务的栈也是独立的异常栈:当CORE进入异常时,跳转到异常处理代码时用到的栈中断栈:当CORE接收到中断时,跳转到中断处理代码时用到的栈。
2024-12-24 20:17:29
335
原创 svn/git提交代码的说明规范样例
1、无论是在公司提交代码,还是在gitbub等代码托管平台提交代码,都需要在提交代码时说明此次修改了什么地方,方便维护代码库,可以查询提交记录来知道什么版本修改了什么功能;2、如果没有填写详细的提交说明,那以后想知道不同版本的修改点,只能通过修改的代码点去分析,费时又费力;3、说明规范没有统一的标准,目的是让以后查看代码库版本时,能够快速知道修改了什么地方,影响/实现什么功能;备注:公司提交代码都有规范,按照公司的规范来。
2024-12-11 20:52:33
224
原创 快速将二进制文件(.bin文件)转换成C语言数组:xxd命令
1、xxd 是一个 Unix/Linux 系统中的命令行工具,用于生成二进制文件的十六进制表示(hex dump)以及将十六进制表示转换回二进制文件。它常用于查看和编辑二进制文件内容2、-p:生成一个纯十六进制数字的连续输出,不显示行号和 ASCII 部分3、-c :设置每行显示的字节数4、-b:以二进制格式(而非十六进制格式)显示输出。
2024-10-30 20:22:16
647
原创 问题排查:编译器优化导致读写寄存器操作异常,从而导致core挂死
1、访问寄存器的操作(以32位机器分析)在嵌入式开发时,经常需要访问寄存器,有时候只需要得到寄存器的部分bit位,会将寄存器的值读出来再进行移位操作,从而解析出特定的bit位上面的C代码,想要读取出某个寄存器的高16bit,从C代码层面看是没有问题的,但是实际运行时可能会出错,这取决于使用的编译器优化等级。编译器不优化执行不会出错,编译器优化就可能出错2、编译器优化:使用-Os优化等级使用-Os优化等级编译代码,程序运行时会导致core挂死,原因如下:使用-Os优化等级编译代码,编译器
2024-10-07 15:58:44
618
原创 快速查看字符对应的ASCII码
1、借助gdb查看打印字符串用双引号括起来打印单个字符用单引号括起来x 表示十六机制d 表示十进制t 表示二进制2、借助二进制查看软件第一步:把要查看的字符保存到文本文件中第二步:借助二进制查看工具(比如:Hex Editor Neo)进行查看
2024-05-15 21:00:00
1064
原创 以RISC-V架构的CLIC中断机制讲解:中断咬尾、中断抢占、中断晚到
中断抢占的条件高特权模式的中断可以抢占低特权模式的中断,不管低特权模式的全局中断是否使能同特权模式的中断,高中断等级的中断要抢占低特权等级的中断,前提是特权模式的全局中断必须要使能中断抢占:前一个中断还在执行时发生了更高等级的中断,立马去执行高等级的中断处理程序,等高等级的中断处理程序执行完毕,再回来执行前一个中断出来程序的剩余部分。
2024-03-22 19:00:00
2540
原创 RISC-V架构中mret、sret、ret三个指令的区别
ret用于函数调用返回,mret和sret用于从高特权模式切换回陷入前的地特权模式。
2024-03-21 19:00:00
3474
原创 QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息
使用qemu时,想快速知道开发板的地址空间映射情况,特别是某些外设控制器的寄存器基地址。
2024-03-07 19:01:13
987
原创 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
3132
原创 RISC-V架构——CLINT中断控制器初始化(直接模式、向量模式)
模式位占用两个bit,其中2和3这两个值是保留的,在有的芯片中,2和3会分别对应CLIC的直接模式和CLIC的向量模式模式位不仅可以决定是直接模式还是向量模式,还可以决定使用CLINT控制器还是CLIC控制。
2024-02-20 18:30:00
3419
2
原创 嵌入式开发——linux系统怎么知道接了多少物理内存?
1、前言linux系统是不知道当前设备接了多少内存,需要bootloader在启动时告诉linux系统感知到当前设备接了多少物理内存有两种方式动态识别(X86架构大多是这种):可以插拔的内存条,bootloader能识别出内存条的容量代码里写死(ARM架构大多是这种):设备的内存是贴片上去的,不支持动态改变,内存的容量在代码里写死(系统工程师在适配程序时要根据实际物理内存容量去修改代码)2、linux系统知道实际物理内存大小的方式设备树中可以通过"/memory"节点来指定内存的起始
2024-02-10 11:36:48
566
原创 链接脚本常用命令(KEEP、MEMORY、PROVIDE、ENTRY、AT、ALIGN等)
【代码】链接脚本常用命令(KEEP、MEMORY、PROVIDE、ENTRY、AT、ALIGN等)
2024-01-31 18:10:08
3014
2
原创 RISC-V架构常见gcc编译选项(-march、-mabi=、-mcmodel、-mlittle-endian、-mbig-endian)
【代码】RISC-V架构常见gcc编译选项(-march、-mabi=、-mcmodel)
2024-01-28 10:35:19
4349
原创 gcc扩展选项__attribute__((interrupt))——指定中断处理函数属性
不使用__attribute__((interrupt))修饰,函数内只需要保存被调用者保存的寄存器使用__attribute__((interrupt))修饰后,只要在函数内使用到的寄存器都必须保存再恢复,会占用更多的栈空间,翻译得到的汇编代码也会增多还可以指定中断处理函数的优化等级:只有中断处理函数才用__attribute__((interrupt))修饰,其余常规函数不要使用。
2024-01-20 15:32:39
2448
原创 获取编译工具链默认的链接脚本
1、ld命令使用“–verbose”参数命令:riscv64-linux-gnu-ld --verbose想使用自己的链接脚本,链接时使用“-T”指定
2024-01-19 22:31:02
514
原创 freeRTOS的栈溢出检测机制
/当前任务使用的栈空间地址,也就是SP指向的地址//记录分配给任务的栈空间的最低地址《freertos任务调度机制深度分析(以RISC-V架构为例)》;在创建任务时,把任务的栈空间赋值成特殊值在切换任务时,检查栈空间的最后一小段是否被改写过如果不是特殊值则说明该段栈空间被使用过,则认为任务栈空间不足,曾经发生过栈溢出上面介绍的两种栈空间溢出检测机制,基本只能检测出是否发生过栈空间溢出,不好定位是何时何地发生栈空间溢出。
2024-01-05 19:00:00
1688
原创 freeRTOS学习资料整理
1、视频资料韦东山的freeRTOS视频:《韦东山freeRTOS系列教程:FreeRTOS的内部机制》;2、文档资料3、硬件平台学谁的视频买谁的开发板使用qemu平台来学习,适合有经验的人,可以节省买开发板的钱
2023-12-25 19:59:38
582
RISC-V 平台级中断控制器 (PLIC) 规范解析与实现要点
2025-03-01
从零开始用C语言实现图片解码播放器源码
2022-08-27
BMP格式转RGB格式源码
2022-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人