当前位置: 首页 > news >正文

平面设计创意图片培训seo去哪家机构最好

平面设计创意图片,培训seo去哪家机构最好,做移动网站快速,国泰君安建设工程官方网站请阅读【嵌入式开发学习必备专栏】 文章目录 Debug system registers中断控制状态寄存器(ICSR)Debug Halting Control and Status Register, DHCSR Debug 寄存器DCRSR与DCRDRCPU 寄存器读操作CPU 寄存器写操作CPU 寄存器选择CPU 寄存器读写示例 调试故障…


请阅读【嵌入式开发学习必备专栏】


文章目录

    • Debug system registers
      • 中断控制状态寄存器(ICSR)
      • Debug Halting Control and Status Register, DHCSR
    • Debug 寄存器DCRSR与DCRDR
      • CPU 寄存器读操作
      • CPU 寄存器写操作
      • CPU 寄存器选择
      • CPU 寄存器读写示例
    • 调试故障状态寄存器(DFSR)

Debug system registers

在ARMv7架构中,调试功能通过一系列的系统控制块(System Control Block, SCB)寄存器来提供。这些寄存器不仅帮助开发者诊断程序运行中的错误,还提供了硬件故障的详细信息。以下是SCB中与调试相关的重要寄存器和标志位的介绍:

中断控制状态寄存器(ICSR)

ICSR 寄存器可在应用程序中用于:

  • 设置和清除系统异常的挂起状态,其中包括 SysTick、PendSV 和 NMI。
  • 通过读取 VECTACTIVE 可以确定当前执行的异常/中断编号。

另外,调试器还可利用该寄存器确定中断状态。VECTACTIVE 域和 IPSR 相同。

  • 中断控制和状态寄存器(SCB->ICSR,0xE000ED04)

在这里插入图片描述

debug 寄存器小结
在这里插入图片描述

Debug Halting Control and Status Register, DHCSR

在这里插入图片描述

  • C_DEBUGEN: Enables debug.
    启用调试。这只能由 AHB-AP 修改,而不是由软件修改。它在软件进行写入时将被忽略,软件不能设置或清除它。当写入 C_HALT 来暂停CPU时,内核必须向它写入 1。当外部debugger将该bit配置从0修改为1时 必须同时将 域 C_MASKINTS(bit[3])置0

  • C_Halt: Halts the core.
    暂停 cpu。当CPU停止时,该位自动设置。例如断点。此位在CPU reset 时清除。该位只能在 C_DEBUGEN 为 1 时写入,否则将被忽略。

    • 当设置该位为 1 时,且 C_DEBUGEN 置位时,将会将cpu halt住;
    • 当CPU 处于 debug state时,将该bit写0,将会退出 debug state。
  • C_STEP, bit[2]:单步调试使能bit。

  • C_MASKINTS, bit[3]:当debug 模式使能后,也即C_DEBUGEN 配置为1后,外部 debugger 可以通过配置该bit来屏蔽ysTick 和 外部其它中断。

  • C_SNAPSTALL, bit[5]:设置此位为1允许调试器请求不精确地进入调试状态。C_SNAPSTALL 提供了一种机制,通过它调试器可以请求处理器进入调试状态,而不需要等待具体的断点触发。这对于那些需要在特定条件下暂停处理器执行,但又不依赖于精确断点位置的调试场景特别有用。

当处理器执行加载(load)或存储(store)指令时,可能会遇到“阻塞”(stalled)的情况。这种情况通常发生于数据无法立即从内存中被访问时,例如因为缓存未命中(cache miss)、访问外设或者内存争用等原因。阻塞的加载或存储指令需要等待相关数据可用后才能完成其操作。下面详细介绍这一过程及其影响。可以通过配置C_SNAPSTALL 让 阻塞的 load 或者store强制结束。

  • S_REGRDY:
    调试内核寄存器选择器寄存器上的寄存器读/写可用。 为1表示最后一次传输完成。

  • S_HALT
    当 S_HALT 为高时,表示处于调试状态

  • S_SLEEP
    表示内核正在休眠.WFI、WFE 或 SLEEP-ON-EXIT, 必须使用 C_HALT 来获得控制权或等待中断唤醒。

  • S_LOCKUP:
    如果内核正在运行(未停止)并且存在锁定条件,则读取为 1。

  • S_RETIRE_ST: I表示自上次读取后指令已完成。 这是一个在读取时清除的粘性位。 这确定核心是否在加载/存储或获取时停止。

  • S_RESET_ST
    表示自从上次读取该位以来,内核已被复位或正在被复位。 这是一个在读取时清除的粘性位。 因此,读取两次并得到 1 然后 0 意味着它在过去被重置。 读取两次并获得 1 意味着它现在正在重置(仍然保持在重置状态)。

Debug 寄存器DCRSR与DCRDR

与调试功能有关的,还有NVIC中另外两个寄存器。它们分别是:调试内核寄存器选择者寄存器DCRSR),以及调试内核寄存器数据寄存器DCRDR)。调试器需要通过这两个寄存器来访问处理器的寄存器,并且只有在处理器停机时,才能使用这里的寄存器传送功能

DCRSR
在这里插入图片描述
DCRDR
在这里插入图片描述

CPU 寄存器读操作

使用DCRSRDCRDR这两个寄存器来读取内核的寄存器的内容,则必须按如下的顺序做:

  • 确定处理器已停机
  • DCRSR写数据来选择读CPU的哪个寄存器,其中bit[16]要为0,表示这是要读数据
  • 查询,直到DHCSR.S_REGRDY=1
  • 读取DCRDR以获取寄存器的内容

CPU 寄存器写操作

寄存器写操作的顺序与上面的类似:

  • 确定处理器已停机
  • DCRDR中写数据
  • DCRSR写数据来选择准备写CPU的哪个寄存器,其中bit[16]要为1,表示这是要写数据
  • 查询,直到DHCSR.S_REGRDY=1

NOTE: 使用DCRSR和DCRDR来访问寄存器,只适用于停机模式。

CPU 寄存器选择

DCRSR bit[16] 用标志是读操作还是写操作:

  • 0 Read
  • 1 Write

DCRSR bits[6:0] 用于选择要操作哪个寄存器:

  • 0b0000000-0b0001100:选择寄存器R0-R12
  • 0b0001101:选择寄存器 SP
  • 0b0001110:选择寄存器 LR
  • 0b0001111:DebugReturnAddress
  • 0b0010000:xPSR
  • 0b0010001:Main stack pointer, MSP
  • 0b0010010 Process stack pointer, PSP.
  • 0b0010100 Bits[31:24] CONTROL.
    • Bits[23:16] FAULTMASK.
    • Bits[15:8] BASEPRI.
    • Bits[7:0] PRIMASK.
  • 0b0100001:Floating-point Status and Control Register, FPSCR.

CPU 寄存器读写示例

写操作:

#define REGW_FLAG    BIT(16)
#define S_REGRDY     BIT(16)int cpu_reg_write(uint32_t reg, uint32_t val)
{uint32_t data, try = 5;mcu_write(DCRDR, val);mcu_write(DCRSR, REGW_FLGA | reg);mcu_read(DHCSR, &data);while ((data & S_REGRDY) == 0x0 && try) {log_warn("wait for transfer complete\n");try--;}if (!try) {log_err("write gpu mcu reg failed\n");return -1;}return 0;
}

读操作

uint32_t cpu_reg_read(uint32_t reg, uint32_t *pdata)
{uint32_t data, try = 5;mcu_write(DCRSR, reg);mcu_read(DHCSR, &data);while ((data & S_REGRDY) == 0x0 && try) {log_warn("wait for transfer complete\n");try--;}if (!try) {log_err("write gpu mcu reg failed\n");return -1;}mcu_read(DCRDR, pdata);return 0;
}

调试故障状态寄存器(DFSR)

DFSR(Debug Fault Status Register)是SCB的一部分,提供了与调试相关的故障信息。它指示了最后一次调试事件的原因,例如硬件断点触发或访问违例。DFSR寄存器包括以下几个关键字段:
在这里插入图片描述

  • HALTED:当处理器因调试请求而停止时,该位被设置。 C_HALT 和 C_STEP 请求都会触发该位置位。
  • BKPT:当执行到PFB中硬件断点时或者软件断点指令BKPT指令时,该位被设置。
  • DWTTRAP:当数据观察点和追踪(Data Watchpoint and Trace, DWT)单元检测到匹配事件时,该位被设置。
  • VCATCH:当向量捕捉事件发生时,该位被设置。
  • EXTERNAL:当由于外部调试请求而停止时,该位被设置。

DFSR为开发者提供了关于程序为何停止的直接线索,是调试过程中不可或缺的资源。

http://www.hkea.cn/news/114349/

相关文章:

  • 兰州移动端网站建设广东整治互联网霸王条款
  • 彩票网站该怎么建设天津seo实战培训
  • 原平的旅游网站怎么做的新冠疫情最新情况最新消息
  • 网站开发软件著作权归谁seo外包
  • 小说网站的网编具体做哪些工作南宁网站快速排名提升
  • 承德网站设计seo互联网营销培训
  • 工信部网站备案查询 手机seo专员的工作内容
  • 淘宝活动策划网站视频营销成功的案例
  • 精准营销数据杭州排名优化软件
  • 中卫网站建站设计seo学习论坛
  • wordpress初始登录seo排名赚app靠谱吗
  • 软件外包保密协议seo相关岗位
  • 后台网站开发文档下载班级优化大师app
  • 辛集城乡建设管理局网站网络营销网络推广
  • 阿里云部署一个自己做的网站吗电商网站搭建
  • 免费汽车租赁网站模板网站域名解析ip查询
  • 企业解决方案官网国内seo排名分析主要针对百度
  • 变态版手游石景山区百科seo
  • 阿里云控制台登录入口seo矩阵培训
  • wordpress苗木模板网站搜索排优化怎么做
  • 网站图片引导页怎么做重庆seo招聘
  • 如何做属于自己的领券网站郑州百度网站优化排名
  • 建设银行益阳市分行桃江支行网站公司页面设计
  • vps 网站上传网站seo优化是什么意思
  • wordpress cos腾讯云seo网站优化收藏
  • 鹤岗商城网站建设免费域名申请
  • 江苏三个地方疫情严重抖音视频排名优化
  • 竞价排名广告东莞关键词排名快速优化
  • 做视频网站要什么格式好网络营销公司怎么注册
  • 企业专业网站建设快速网站搭建