avatar
文章
64
标签
87
分类
13
主页
项目列表
友链
  • 半方池水半方田
  • 小音理
Reglucis' Blog内联汇编 返回首页
搜索
主页
项目列表
友链
  • 半方池水半方田
  • 小音理

内联汇编

发表于2026-02-22|更新于2026-06-28
|总字数:6|阅读时长:1分钟|浏览量:
文章作者: Reglucis
文章链接: https://www.244744.xyz/blog/post/%E6%97%A5%E6%8B%B1%E4%B8%80%E5%8D%92/%E5%BC%80%E5%8F%91%E6%97%A5%E5%BF%97/YueOS/AssemblerInstructions/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Reglucis' Blog!
ARMYueOS汇编LLVM
上一篇
二〇二六年五月
二〇二六年五月 不知不觉入职已经快一个半月了,四月因为某个可恶的项目疯狂加班,要不是五一假期真的要撑不住了。我直接一个废学忘习般的寝食(睡了整整一天半😴),连饭都只吃了一顿QAQ。 每天基本就是宿舍与工位,游戏什么的都没心情去玩了,稍稍缓口气以后,有一些些后怕吧。“人不是变老才停止游戏,而是停止游戏才会变老”,大概是萧伯纳说的?总之我还满认同的。我害怕失去对这个世界的好奇心与探索欲,理工男只是直了点,不是行尸走肉。我希望我永远都是那个愿意“追求真理,洞悉本质”的机甲大师。 好在一直都有在坚持减肥,也不完全算虚度光阴。入职时骑行 10km 就半死不活的,现在已经可以做到 50km 后再加班 9h 😂。体能明显恢复了不少,截止 2026.5.2 已经掉了 10kg 了🥳🥳🥳。 希望可以早日回到恒通实习时的状态(图片不来源于网络) 仔细回想过去几个月,二战失败后的确有些迷茫,有些急于工作了,从找开始工作到入职好像一共两个星期?后面陆陆续续收到了包括但不限于现代汽车北京研究院、步步高集团小天才公司、容知日新、云间信息等等一票公司...
下一篇
YueOS 重构日志 (0) - 任务与进程
任务与进程 任务 任务是在构建应用时逻辑上进行划分的最小单位。任务按照性质被划分为重要任务、次要任务与系统任务。 重要任务 指对时间敏感的任务。(亦可理解为原叙述中的"为完成某个该任务而进行的系统设计") 次要任务 指对时间不敏感的任务。(亦可理解为原叙述中的"为完成重要任务而执行的辅助任务") 系统任务 系统为维持自身功能正常而必须进行的任务。 进程 因为 STM32 多为单核心,因此只使用进程进行描述。在每个进程可以完成逻辑上的一个或多个任务,但注意进程是系统调度中的最小单位。 进程管理器系列 API 职能:完成进程的创建/删除,启动/停止,信息收集与管理;调度器系列 API 职能:对进程进行调度。 在语法上有一个明显区别:即进程管理器必须指定目标对象;调度器不需要指定对象。 与任务一一对应,处理重要任务的进程被称为重要进程,处理次要任务的进程被称为次要进程,处理系统任务的进程被称为系统进程。 进程的调度行为 重要进程的调度由任务管理器生成的静态调度表进行规划,属于硬实时调度。 次要进程的调度由优先级决定,属...
相关推荐
2025-12-28
STM32再认识 - (0)序言
STM32再认识 俱怀逸兴壮思飞,欲上青天揽明月 对我个人而言,几乎没有完整系统的学习过 STM32 (准确的说是任何编程语言/计算机课程)。 从来都是凭借着一点点可笑的小聪明按照直觉在写代码,形容一下的话就是,那些问题的答案不是睁开眼睛就能看到嘛。若是有问题就去翻手册、找博客,在东拼西凑下,知识体系算是勉强建立起来了。最起码远比某些在B站上的主流教程是强的。 但现在,我希望能够解决一些更复杂的系统问题。知识体系残缺的弊端就被暴露出来了,因此,借此机会,我决定系统整理一下 STM32 相关的知识体系,更准确地说,是 Cortex-M 系列的内核。 本篇笔记的姊妹篇《YueOSKernal 开发日志》可能在一段时间内都不会公开。简单来说,YueOSKernal 目的在于开发一款足够轻量的操作系统内核,在近乎于裸机的效率下,实现一些多任务调度功能,主要用于边缘系统(如电机控制)。 主要文献 参考文献主要来自于 ARM 公司的文档,其次是 ST 公司 F4 系列的手册,最后是一些书籍。详情可以参照各个章节最后的部分。 主要的实验平台为 STM32F407 。
2025-12-28
STM32再认识 - (1) Cortex®-M4
Cortex®-M4 处理器 Cortex®-M4 处理器介绍 Cortex-M4 处理器是一款专为微控制器市场设计的高性能 32 位处理器。其显著优点包括: • 出色的处理性能与快速中断处理相结合 • 通过广泛的断点和跟踪功能增强系统调试 • 高效的处理器内核、系统和存储器 • 超低功耗,集成睡眠模式和可选的深度睡眠模式 • 平台安全稳健,具有可选的集成内存保护单元(MPU) Cortex-M4 处理器基于高性能处理器内核构建,采用 3 级流水线哈佛架构,非常适合要求苛刻的嵌入式应用。该处理器通过高效的指令集和广泛优化的设计提供卓越的功效,提供高端处理硬件,包括可选的符合 IEEE754 标准的单精度浮点计算、一系列单周期和 SIMD 乘法以及累加乘法功能、饱和算术和专用硬件除法。 Cortex-M3: 针对低功耗微控制器设计的处理器,面积小但是性能强劲,支持可以处理器快速处理复杂任务的丰富指令集。具有硬件除法器和乘加指令(MAC).并且,M3支持全面的调试和跟踪功能,使软件开发者可以快速的开发他们的应用 Cortex-M4: 不但具备Cortex-M3的所有功能,并...
2026-01-02
YueOS 开发日志 (1) - 内核篇:基础概念
基础结构 本系列属于开发日志,随着开发的深入某些概念/思想可能发生改变。因此,一旦发生前后文冲突,以后文为准;笔者会尽可能标注出准确定义的位置。 HAL 库标准启动流程 当系统上电时,由 reset 异常触发异常处理。 1.1. CortexM4 内核自动从 0x00000000 处读取异常向量表首地址(一般为 0x08000000),即 *__initial_sp 1.2 将 MSP 置位后,继续从向量表中读取并置位 PC 初值。(一般表现为进入 startup.s) 注意: 笔者在 Ozone 调试时发现复位后有 SP=0x2000 3E30, PC=0x0800 03C4; 同时命令行输出为: Target.ReadU32 (0x08000000); // returns 0x4, data is 0x20003E30 Target.SetReg (“SP”, 0x20003E30); Target.ReadU32 (0x08000004); // returns 0x4, data is 0x80003C5 Target.SetReg (“PC”, 0x...
2026-01-04
YueOS 开发日志 (2) - 内核篇:任务与调度
任务与调度 尽可能梳理成分类讨论了,笔者自己的思考过程耦合性有亿点点高。 任务的分类 任务划分结构可以被嵌套表示为 异常任务(中断任务) 词如其意。在内核 Handler Mode 处理的任务被称为异常任务。 线程任务 与上文类似的,在内核 Thread Mode 处理的任务被称为线程任务。线程任务按重要程度又可划分为 重要任务 次要任务 内核任务 重要程度划分的定义参见前文。 综上,调度策略的分析中一共存在四种任务: 异常任务 重要任务 次要任务 内核任务 后三者被合称为线程任务。 上下文切换 从逻辑上看,在某一时刻时内核处理的任务发生了改变的动作被称为任务的上下文切换。 从动作上看,在某一时刻时内核的堆栈指针被手动修改称为任务的上下文切换。 在任一时刻,可能发生的上下文切换无非以下两种情况 主动切换 即当前任务主动触发上下文切换。 被动切换 即当前任务因操作系统内核/处理器内核调度而被动发生上下文切换。 调度策略 由顶向下划出大纲后,当然是自底向上具体分析。 约定 0: 在宏观上来看,所有需要执行的任务一定都是可以在其超时...
2026-01-05
YueOS 开发日志 (3) - 内核篇:OS API
操作系统函数的调用接口 约定:非特权级称为用户态,特权级称为内核态。且为了安全性保证,系统初始化之后一定是使用 PSP 的用户态。 OS API 的调用 由于种种原因,用户很多时候无法执行 OS API。因此在用户态下试图访问某些系统功能,就需要使用 SVC 来向内核提出申请,并在 SVC_Handler 中实现要求。 嗯,挺好的。但是,理想很丰满,现实很骨感。这里有些细节需要考虑。 如何完成 SVC 到系统具体服务的映射? 如何实现一个统一、易于阅读且简洁优雅的 SVC 封装?(不会有人想挨个手撸汇编吧?写几行性能关键语句就得了) 如何保证 OS API 调用是可靠的?用户在中断中调用 SVC 那不炸了吗? SVC 调用下的 OS API 当发起 SVC 请求时,一共存在 256 个被内核忽略的立即数。简单的方式是为每一个 SVC 服务分配一个立即数,但这略麻烦,我懒。 所以使用指针传递的方式。由 ARM ABI 约定易知,应该使用 R0-R3 完成实参传递且使用 R0 传回返回值,同时使用 R12 传递实调函数。 我们使用 0 号 SVC 服务作为内核调用入口,余下...
2026-01-08
YueOS 开发日志 (4) - 内核篇:任务的具体实现
任务的具体实现 任务的数据结构是一切的基础。 任务管理器 调度器可调度的任务都需要先使用任务管理器向内核注册。注册后的任务,任务管理器自身会维护一个链表,该链表保存着全部任务。 任务注册 任务注册时,用户需要使用结构 ‘Task_InitConfig_t’ 提供任务的基础信息。 12345678910111213typedef struct { /* 不允许为空 */ Task_Handle_t entryPoint; // 任务的入口点 Kernal_TaskType_e type; // 任务类型,即前文中的四种,用户只关心重要和次要任务即可 uint8_t priority; // 任务的优先级,被次要任务使用 uint32_t* stackAddr; // 堆栈起始地址(最大栈顶) 栈底需要 8 byte 对齐 uint32_t stackSize; // 单位: byte 推荐 4 的倍数 /* 可选 */ void* argv; // 在入口点传入的参数 const ch...
avatar
Reglucis
一只努力学习的菜猪
文章
64
标签
87
分类
13
Follow Me
公告
欢迎来访我的博客。这里记录着菜猪的学习日志。
目录
  1. 1. 内联汇编
    1. 1.1. 内联汇编的格式
      1. 1.1.1. Basic Asm
      2. 1.1.2. Extended Asm
        1. 1.1.2.1. volatile
        2. 1.1.2.2. AssemblerTemplate
        3. 1.1.2.3. OutputOperands
        4. 1.1.2.4. InputOperands
        5. 1.1.2.5. Clobbers and Scratch Registers
  2. 2. 参考文献
最新文章
AI 使用入门2026-06-28
FOC 学习笔记(1) - Clarke 变换2026-06-27
FOC 学习笔记(0) - 基础知识2026-06-26
磁元件 - 2.变压器2026-06-14
磁元件 - 1.电感2026-06-13
© 2025 - 2026 By Reglucis框架 Hexo 7.3.0|主题 Butterfly 5.5.0
搜索
数据加载中