【发布时间】:2015-09-23 03:46:23
【问题描述】:
我正在尝试从我的 C 项目中为嵌入式设备调用 Rust 代码。设备通过 UART 打印,所以我可以看到我的调用结果是什么。
以下 C 和 Rust 代码按预期工作(我省略了许多使其编译所需的样板 Rust 代码)。
C:
uint8_t input[] = {1,2,3};
uint8_t output[] = {4,5,6};
output = func(input, output);
printf("Sum: %d", output[0]);
生锈:
#[no_mangle]
pub extern fn func(input: &[u8], dst: &mut[u8]) -> u8 {
3
}
这会按预期打印 3。但是我一直在改变作为引用传入的数组:
C:
uint8_t input[] = {1,2,3};
uint8_t output[] = {4,5,6};
func(input, output);
printf("Sum: %d", output[0]);
生锈:
#[no_mangle]
pub extern fn func(input: &[u8], dst: &mut[u8]) {
for i in (0..1) {
dst[i] = input[i];
}
}
这会编译,但会打印 4 而不是预期的 1。由于某种原因,我无法更改数组的值。有什么想法吗?
编辑:C 函数声明分别是:
extern uint8_t func(uint8_t in[64], uint8_t output[64]);
extern void func(uint8_t in[64], uint8_t output[64]);
EDIT2:更新代码: C:
uint8_t input[64];
uint8_t output[64];
for(uint8_t = 0; i < 64; i++) {
input[i] = i;
}
func(input, output);
printf("Sum: %d", output[2]);
期望输出 2。
【问题讨论】: