cuốn sách gpt4 ai đã làm

c - Nhận giá trị từ bộ nhớ ram khi địa chỉ ram được lưu dưới dạng u32

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:54:30 35 4
mua khóa gpt4 Nike

Tôi gặp sự cố khi nhận giá trị từ địa chỉ ram.

Tôi có một số hạn chế, đó là nó phải là mã C và địa chỉ nơi lưu trữ thông tin được cung cấp bởi giá trị u32, ví dụ 0x001c0080.

Môi trường là ARM và tôi sử dụng sdk nhật thực. Làm cách nào tôi có thể lấy dữ liệu từ địa chỉ này? Tôi có một chức năng không thể thay đổi như thế này:

u32 get_data(địa chỉ u32, trạng thái u16 *)
{
......
u32 return_value;
char cbuf[128];
return_value= địa chỉ ?????;
sprintf(cbuf,"\tA:%x->%x",(int)address,(int)return_value);
in(cbuf);
return return_value; // ở đây dữ liệu u32 được lưu trong ram theo địa chỉ sẽ được trả về
}

câu trả lời hay nhất

Bạn có thể chuyển đổi địa chỉ thành con trỏ.

    return_value = *(u32 *) địa chỉ;

Ngoài ra, nên sử dụngchứ không phải là một loại tùy chỉnh. Mã của bạn có thể trông như thế này:

#include 
#include

uint32_t get_data(địa chỉ uint32_t, uint16_t *trạng thái)
{
//…
uint32_t return_value;
char cbuf[128];
return_value = *(uint32_t *) địa chỉ;
sprintf(cbuf, "\tA:%x->%x", địa chỉ (int), (int) return_value);
printf(cbuf);
trả về return_value;
}

Hãy cẩn thận! Sớm hay muộn, dự án của bạn có thể được chuyển sang CPU 64-bit. Mã của bạn sẽ không thể di chuyển được.Truyền địa chỉ dưới dạng số nguyên thay vì con trỏ là một ý tưởng tồi và thậm chí còn tệ hơn khi giả sử kích thước con trỏ. bạn nên kiểm tra get_data() Hàm môi trường được gọi để đảm bảo rằng địa chỉ có thể được truyền dưới dạng con trỏ. Nếu địa chỉ phải được chuyển dưới dạng giá trị nguyên chứ không phải con trỏ, hãy sử dụng uintptr_tThay vào đó, nó sẽ tự động trở thành kích thước chính xác.

Ngoài ra, định dạng của bạn không cần phải chuyển đổi. Bạn có thể sử dụng format để tránh chuyển đổi đối số chuỗi định dạng.

Ví dụ: cuộc gọi của bạn làgọi_get_datavà địa chỉ0x001c0080Macro từ các tập tin tiêu đề.

#include  // Tiêu đề xác định ĐỊA CHỈ là 0x001c0080 thông qua #define ĐỊA CHỈ 0x001c0080
#include
#include
#include

uint32_t get_data(uint32_t *địa chỉ, uint16_t *trạng thái)
{
//…
uint32_t return_value;
char cbuf[128];
return_value = *địa chỉ;
sprintf(cbuf, "\tA:" PRIxPTR "->" PRIx32, địa chỉ, return_value);
printf(cbuf);
trả về return_value;
}

void call_get_data(void)
{
uint32_t addressValue = ĐỊA CHỈ;
uint32_t *địa chỉ = (uint32_t *) addressValue;
//…
uint32_t returnValue = get_data(địa chỉ, /* … */);
//…
}

Lưu ý: Môi trường là ARM, không thành vấn đề nếu bạn sử dụng Eclipse SDK.

Về c - nhận giá trị từ bộ nhớ ram khi địa chỉ ram được lưu dưới dạng u32, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/51184327/

35 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress