Tag: ram

如何在Cortex-M3(STM32)上从RAM执行function?

我正在尝试从Cortex-M3处理器(STM32)上的RAM执行一个函数。 该function擦除并重写内部闪存,所以我肯定需要在RAM中,但我该怎么做? 我试过的是:使用memcpy将函数复制到RAM中的字节数组(检查它是否正确对齐),将函数指针设置为指向字节数组然后调用函数(指针)。 这可能适用于10条指令(我可以跟随调试器的执行)但然后我得到一个总线错误并且处理器重置。 第二次通过循环时发生总线错误,因此代码应该没问题(因为它在第一次传递时起作用)。 我认为更快的RAM访问会以某种方式破坏总线时序…… 无论如何有一个正确的方法来做到这一点? 分散文件如何将函数自动放入RAM中(我使用Keil uVision for Cortex-M3)? 编辑:更多信息:工具链:RealView MDK-ARM V 4.10编译器:Armcc v4.0.0.728汇编程序:Armasm v4.0.0.728链接器:ArmLink v4.0.0.728处理器:STM32F103ZE 发生复位时,IMPRECISERR位在总线故障寄存器中置1。

memcpy的内部实现如何工作?

标准C函数’memcpy’如何工作? 它必须将(大)RAM块复制到RAM中的另一个区域。 因为我知道你不能在汇编中直接从RAM移动到RAM(使用mov指令)所以我猜它在复制时使用CPU寄存器作为中间存储器? 但它是如何复制的? 通过块(如何通过块复制?),按单个字节(char)或它们具有的最大数据类型(复制在long long double中 – 在我的系统上为12个字节)。 编辑: 好吧显然你可以直接将数据从RAM移动到RAM ,我不是汇编专家,所有我学习的汇编都来自这个文档( X86汇编指南 ),在有关你无法从中移动的mov指令的部分中提及RAM到RAM。 显然这不是真的。

嵌入式C中的动态内存分配

我可以在嵌入式C中使用malloc和delete函数吗? 例如,我有一个函数,其中在函数malloc的结构上创建了指针。 这个函数在ram中返回地址,我可以使用它。 退出我的function,在那里分配了内存,这个指针将被删除或者这个内存为此保留,而不会被函数删除终止? Typedef struct { Char varA; Char varB } myStruct ; Void myfunc ( void) { myStruct * ptrStruct = ( myStruct *) malloc ( sizeof (myStruct)) ; // Code here //…….. return ; }