gpt4 book ai didi

c - 大端交换宏 "uswap"导致意外错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:45:19 27 4
gpt4 key购买 nike

<分区>

我面临以下问题。

#define uswap_32(x) \
((((x) & 0xff000000) >> 24) | \
(((x) & 0x00ff0000) >> 8) | \
(((x) & 0x0000ff00) << 8) | \
(((x) & 0x000000ff) << 24))

获取后面的数字作为参数 x = 0x49074808

为什么我的程序会在这里中断/重置?

谢谢

编辑:

我的真实应用描述:

我有一个引导加载程序位于闪存起始地址 0x08000000U 到 0x08004000U。在引导加载程序之后,闪存中有一个 uImage header (取自 uboot),大小为 0x40。在我的应用程序中,我只想检查是否确实存在正确的 uImage header ,因为我有两个 bootloader 版本。一个可以处理 uImage 类型的图像,而另一个不能。在最后一种情况下,在引导加载程序应用程序之后根本没有 uImage header ,只有应用程序代码!

在应用程序中,我只想检查 header crc:

#define UIMAGE_FLASH_ADDRESS     (0x08004000U)
image_header_t *header;
header = (image_header_t *) UIMAGE_FLASH_ADDRESS;
if (image_check_hcrc(header))
/* do something...*/




static int image_check_hcrc(const image_header_t *hdr)
{
uint32_t hcrc;
uint32_t len = image_get_header_size();
image_header_t header;

/* Copy header so we can blank CRC field for re-calculation */
memcpy(&header, (char *)hdr, image_get_header_size());
header.ih_hcrc = 0; // byte order independent
hcrc = crc32(0, (unsigned char *)&header, len);

return hcrc == image_get_hcrc(hdr);
}

uswap_32() 的调用发生在上述函数的最后一行:

#define uswap_32(x) \
((((x) & 0xff000000) >> 24) | \
(((x) & 0x00ff0000) >> 8) | \
(((x) & 0x0000ff00) << 8) | \
(((x) & 0x000000ff) << 24))

# define cpu_to_be32(x) uswap_32(x)
# define be32_to_cpu(x) uswap_32(x)
#define uimage_to_cpu(x) be32_to_cpu(x)
#define cpu_to_uimage(x) cpu_to_be32(x)



#define image_get_hdr_l(f) \
static inline uint32_t image_get_##f(const image_header_t *hdr) \
{ \
return uimage_to_cpu(hdr->ih_##f); \
}
image_get_hdr_l(magic) /* image_get_magic */
image_get_hdr_l(hcrc) /* image_get_hcrc */
image_get_hdr_l(time) /* image_get_time */
image_get_hdr_l(size) /* image_get_size */
image_get_hdr_l(load) /* image_get_load */
image_get_hdr_l(ep) /* image_get_ep */
image_get_hdr_l(dcrc) /* image_get_dcrc */

#define image_get_hdr_b(f) \
static inline uint8_t image_get_##f(const image_header_t *hdr) \
{ \
return hdr->ih_##f; \
}
image_get_hdr_b(os) /* image_get_os */
image_get_hdr_b(arch) /* image_get_arch */
image_get_hdr_b(type) /* image_get_type */
image_get_hdr_b(comp) /* image_get_comp */

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com