gpt4 book ai didi

c - 使用 RL78 的 IAR 编译器进行 Vectorcast

转载 作者:行者123 更新时间:2023-11-30 16:41:04 27 4
gpt4 key购买 nike

我刚刚开始使用 Vectorcast 和 IAR for RL78 编译器。我想使用 IAR Compiler for RL78 Microcontroller 在 Vectorcast 中构建一个环境。

用于测试的代码已在RL78的IAR嵌入式工作台中成功编译。

我在为模块构建 Vectorcast 环境时遇到以下错误。

错误:

40_MCAL\Memory\FDL\fdl_types.h", line 133: error:
division by zero
enum { R_FDLT02_ASSERT_LINE_133 = 1/(! !(sizeof(fdl_u16)==2)) };
^

40_MCAL\Memory\FDL\fdl_types.h", line 137: error:
division by zero
enum { R_FDLT02_ASSERT_LINE_137 = 1/(! !(sizeof(fdl_command_t)==1)) };
^

40_MCAL\Memory\FDL\fdl_types.h", line 138: error:
division by zero
enum { R_FDLT02_ASSERT_LINE_138 = 1/(! !(sizeof(fdl_status_t)==1)) };
^
40_MCAL\Memory\FDL\fdl_types.h", line 141: error:
division by zero
enum { R_FDLT02_ASSERT_LINE_141 = 1/(! !(sizeof(fdl_request_t)==8)) };
^


40_MCAL\Memory\FDL\fdl_types.h", line 142: error:
division by zero
enum { R_FDLT02_ASSERT_LINE_142 = 1/(! !(sizeof(fdl_descriptor_t)==10)) };
^
5 errors detected in the compilation of "Flash.c".

源代码如下:

# define R_FDLT02_ASSERT_CONCAT_(a, b) a##b        

#define R_FDLT02_ASSERT_CONCAT(a, b) R_FDLT02_ASSERT_CONCAT_(a, b)

#define R_FDLT02_STATIC_ASSERT(e) enum { R_FDLT02_ASSERT_CONCAT
(R_FDLT02_ASSERT_LINE_, __LINE__) = 1/(!!(e)) }

/* assertion if unsigned data type size is not correct, please evaluate compiler settings for integer types */

R_FDLT02_STATIC_ASSERT(sizeof(fdl_u08)==1);

R_FDLT02_STATIC_ASSERT(sizeof(fdl_u16)==2);

R_FDLT02_STATIC_ASSERT(sizeof(fdl_u32)==4);


/* assertion if enumeration type size is not correct, please evaluate compiler settings for enumeration types */

R_FDLT02_STATIC_ASSERT(sizeof(fdl_command_t)==1);

R_FDLT02_STATIC_ASSERT(sizeof(fdl_status_t)==1);

/* assertion if structure type size is not correct, please evaluate compiler settings for structure types */

R_FDLT02_STATIC_ASSERT(sizeof(fdl_request_t)==8);

R_FDLT02_STATIC_ASSERT(sizeof(fdl_descriptor_t)==10);

最佳答案

如果指定类型的大小不符合库的要求,它们是旨在使编译失败的表达式。

您需要检查诸如 fdl_u16 之类的类型的定义适合您的目标。对于 IAR 的 RL78 编译器,基本类型具有以下大小:

bool               8 bits
char 8 bits
signed char 8 bits
unsigned char 8 bits
signed short 16 bits
unsigned short 16 bits
signed int 16 bits
unsigned int 16 bits
signed long 32 bits
unsigned long 32 bits
signed long long 32 bits
unsigned long long 32 bits

但是,如果需要特定大小来定义此类类型,例如uint16_t,那么它通常更便携。例如。

然而,很难想出 fdl_u16 的合理定义。假设 fdl_u8 没有错误,则其大小不会为 2或fdl_u32 ,但您尚未提供该代码。

任何特定枚举的大小为 1 的明显期望是不安全的(例如,参见 What is the size of an enum in C?),尽管在 IAR RL78 编译器手册中指出将使用可以容纳所有枚举常量的最小类型。

结构类型的失败很可能是 fdl_u16 失败的结果。 ,但是如果没有这些类型的定义,就很难区分。

关于c - 使用 RL78 的 IAR 编译器进行 Vectorcast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400353/

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