KEIL 在函数里面用 *tmp = tmp1 给传进来的参赋值失败
时间: 2024-04-11 12:31:49 浏览: 13
您好!根据您的描述,您在函数中使用 `*tmp = tmp1` 给传入的参数赋值失败。这个问题可能有多种原因,我将提供一些常见的可能性以供参考:
1. 指针未初始化:在使用指针之前,确保为指针变量分配了内存空间。可以使用 `malloc` 或 `new` 来分配内存空间,例如 `int *tmp = (int *)malloc(sizeof(int));` 或 `int *tmp = new int;`。
2. 参数类型不匹配:确保 `tmp` 和 `tmp1` 的类型相同,否则赋值操作可能会失败。如果类型不匹配,可以尝试进行类型转换。
3. 空指针:确保 `tmp` 和 `tmp1` 不是空指针。在执行赋值操作之前,可以通过检查指针是否为空来避免悬空指针错误。
4. 内存越界:请确保 `tmp` 和 `tmp1` 指向的内存地址是有效的,并且不会越界访问其他内存区域。
5. 编译器警告或错误:检查编译器是否给出了与该赋值操作相关的警告或错误信息。这些信息可能会提供更详细的问题提示。
如果您可以提供更多的代码片段或错误信息,我将能更准确地帮助您解决问题。
相关问题
在KEIL中使用汇编语言给R1赋值完整代码
好的,以下是在Keil中使用ARM汇编语言给R1寄存器赋值的示例代码:
```
AREA Example, CODE, READONLY
; Entry point
ENTRY
MOV R1, #0x12345678 ; 将立即数0x12345678存储到R1寄存器中
; 在这里可以继续编写其他汇编代码
END ; 声明程序结束
END
```
在这个示例代码中,我们使用了ARM汇编语言的MOV指令将立即数0x12345678存储到R1寄存器中。然后,我们可以在这个代码段中继续编写其他汇编代码。最后,我们使用了END指令来声明程序结束。请注意,这是一个非常简单的示例程序,只是为了演示如何在Keil中使用ARM汇编语言给寄存器赋值。在实际的项目中,您需要编写更加复杂和完整的代码。
在keil5里面编写一个延时函数
好的,下面是一个简单的延时函数,可以在Keil5中使用:
```c
void delay(unsigned int ms)
{
unsigned int i, j;
for(i = 0; i < ms; i++)
{
for(j = 0; j < 121; j++);
}
}
```
这个延时函数的原理是利用了嵌套循环来实现延时。在内层循环中,执行了一个空语句,这个空语句不会对程序产生任何实际的影响,但是可以消耗一定的时间。通过调整内层循环的次数,就可以实现不同的延时时间。
需要注意的是,这个延时函数的延时时间并不是非常准确,可能会受到许多因素的影响,如CPU主频、编译器优化等等。如果需要更加精确的延时,可以使用硬件定时器或其他更加高级的延时方法。