自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 RH850 F1K系列芯片 从DeepStop到WakeUp 读取WUF寄存器异常分析

1,在使用RH850 F1K系列芯片开发新项目中需要在MCU进入DeepStop Mode后唤醒时读取唤醒源WUF0寄存器以区分CAN唤醒还是ACC唤醒。3、进行工程debug,将断点打在0地址,进入DeepMode后使用CAN唤醒,读取WUFC0寄存器数值0x200,可以看出寄存器数值非0,为CAN唤醒。2、但唤醒打印WUFC0寄存器数值为0,经与瑞萨FAE确认正常读取该寄存器可以识别唤醒源,证明方向一致,怀疑该寄存器在读取前被Clean。

2024-05-08 14:17:27 373 1

原创 Makefile缺失库文件.a规则导致源文件未参与编译报错问题分析

3,打开hsm_engine.c中相关的makefile文件,可以看出正常编译是应该输出 hsm_engine.o文件,故意改错修改hsm_engine.c 内容,查找OUT文件夹下的目标文件 hsm_engine.o,并未找到,由以上两点可以断定hsm_engine.c并未参与编译,而且可以看出如果该文件参与编译,那么会输出satechar的库文件。

2024-04-28 14:42:30 495

原创 Makfile中 = 、:= 、+=、?=的区别

用"="对变量进行赋值时,解析该变量的时候,该变量的值等于最后一次赋值时的值,而不是当前位置时该变量的值。“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。也就是说,变量的值将会是整个makefile中最后被指定的值。用":=“来赋值的,则是就地直接解析,只用往前看即可,和我们在C语言里的”="逻辑上是一样的。在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。在上例中,y的值将会是 xyz bar ,而不是 foo bar。

2024-04-28 12:57:34 151

原创 (二)DaVinci Developer AutoSAR工具 SWC Component 中Port口配置方法

4 ,下面把pot连接如runnable,连接后port才能让runnable使用,首先选择Runnable Entity List ->选择Runnable Entity -> Access points->New ->invoke operation。13,在component 的 runnable中可以看到port口的连接,到这里添加Port的功能的整个配置过程就完成了,希望对大家有帮助。12,在代码中runnable可以看到有port读取操作代码,10,查看自动连接是否是需要的连接,Finish。

2024-04-07 11:15:44 710

原创 (一)DaVinci Developer AutoSAR工具 如何新建SWC、Component、RTE工程,超级详细步骤,赚到

​1,创建SWC,第一步需要创建一个App组件类型,首先点击Object Brower菜单,然后左键Application Component Types 选项,然后右键New Application Component Type,组件类型的作用是来后续实例一个Compoent2、 Properties 选项卡中Nane中输入Type的名字,注意根据规范命名规则已CtAp开头,其他默认就好​

2024-03-28 15:39:01 976 1

原创 AUTOSAR OS 中新建Task方法

OS概念网络上资料比较多,这里不在重诉,下面我们使用 davinci 新建一个task,体验一下配置过程。1,首先我们 OS Application 位置,点击 + 号进行新建任务。3 将 任务的触发于task进行映射。2 双击 task 进行属性设置。4,check 编译就可以咯。

2024-03-21 16:44:38 401 1

原创 RH850 setup RAM初始化过程分析

大家都知道,我们的变量,这里说的变量是指初始化或未初始化的全局变量,静态全局变量,初始化或未初始化的静态局部变量,这些变量的地址已经在编译器程序连接后固定,且在map表里可以查看到,分配于date段和未初始化的分配于bss段中,但这些变量的值在编译后以二进制文件存于ROM中,并在MCU setup时由ROM搬运到RAM中,那么变量是怎么由ROM搬到RAM的map地址处呢?2,ram清除完成后进入_start处开始执行,接下来执行至ghs_ind_crt0处。map中ram段开始地址如下。

2024-03-08 16:31:57 660 1

原创 MCU汇编指令总结

jr和jal与程序调用函数有关。程序调用函数,当函数调用结束后需要重新继续执行原来的程序,所以在调用函数之前,必须先存储函数返回起始点地址。:比较目的操作数减去源操作数的隐含减法操作,不修改任何操作数。是寄存器中的数相加,

2024-03-05 15:37:14 239

原创 RH850 Setup.850 启动过程分析

中断变量重映射完成即进入main中,其实中间还有一些函数的调用,但不是重要流程,这里不一一列出了,从上我们可以看出其实启动过程主要完成就是CPU寄存器初始化,中断向量表重映射、和外链函数调用,希望对大家有所帮助。我们需要将中断处理函数的地址写入中断向量表偏移量相应位置中,这样发生相关中断才能找到中断服务入口,执行中断服务程序,下面是相关代码我们一起分析一下。下面我们来验证一下,下面是INTDMA0的map地址,和DEBUG中memery中段向量表的地址一致。的伪指令,表示“当前地址存放的内容为XX”。

2024-03-05 11:17:34 1339 2

原创 嵌入式MCU在进行嵌套函数调用或中断函数回调做了那些事

在进入嵌入函数前,将当前程序的PC指针压入LP指针中,然后开辟一块statck ,将SP指向该statck,将CPU寄存器中需要保存的数据压入栈中,更新PC指针执行内嵌函数,执行完内嵌函数,返回时将stack中保存的寄存器数据返回复制给CPU寄存器,更新母函数的SP, 将LD ->SP,返回上级函数处执行。这两天整理了相关知识,捋顺贯通了嵌套函数调用或中断函数回调做的事情,如下记录。

2024-03-01 16:51:08 157 1

原创 嵌入式系统中 CPU Reginsters 中 SP指针、Stack堆栈工程解析

因为程序在进行内嵌函数调用时,或回调中断HOOK时,需要保存CPU寄存器数据,比如LP,Rn等等寄存器数据,否则函数执行完后,返回到上级函数时,此时没有保存上级函数现场数据那么程序就会G掉或跑飞,方法就是进入内嵌函数前开辟一块内存堆栈空间,把所需保存的寄存器数据推入栈中,此时堆栈指针SP指向栈顶,内嵌函数执行完成返回上级函数时,再把寄存器数据从栈中弹出,PC指针指向上级函数的堆栈地址。

2024-03-01 15:53:41 436 1

原创 嵌入式系统中LP(Link pointer) SP(Stack point) PC(Program Counter)

LP:Used When the compiler call a function,当编译器调用函数时使用,其主要作用为当函数A内调用另一个函数B,PC在函数A的执行位置的指令地址存于LP中,然后程序执行进入函数B ,函数B执行之后将要返回函数A执行时,将LP指针中存放的指令地址返回给PC,PC在函数A中继续向下执行。下图在进入函数B后,LP中存放函数A PC+4,也就是B执行后会返回到A的下一个指令地址,另B的指令地址如下,可以看出此时PC指针指向了函数B的指令地址。下图可以看到当前PC在函数A中。

2024-03-01 10:52:57 444 1

原创 .bss段、.data段、与栈(statck)

局部变量存在堆栈中,临时生成,所以map中没有固定的内存地址,全局变量或静态局部变量存在BSS或Data段中,故有固定内存地址,以此记录。Data段:存放程序中已经初始化的全局变量及已经初始化的静态局部变量的一块区域。--定义为全局变量或静态局部变量在map表里能够搜到,局部变量在map中无法搜到,现象一:未初始化的全局变量,map中分配地址空间,在bss段中。现象二: 初始化的全局变量,map中分配地址空间,在data段中。现象三:局部变量在map中没有分配地址空间。

2024-02-29 18:17:34 257

空空如也

空空如也

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

TA关注的人

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