首页 > 解决方案 > sc_memset 中的 volatile 参数

问题描述

我正在编写的 C 程序的一部分包括使用 sc_memset() 函数初始化输入表。该表由 typedef 结构定义,如下所示。

typedef struct {
    UINT32 switchnum;
    UINT32 feedback[8];
    UINT32 switch_output[8];
} SWITCH_CHECK_IN;

SWITCH_CHECK_IN switch_input_table;

所有表元素,即 switchnum、feedback 和 switch_output 都应初始化为零。用于初始化的 sc_memset 函数原型是:

extern void sc_memset (volatile unsigned char *dest, unsigned long n, unsigned char data);

我已经编写了初始化代码,并且由于 SWITCH_CHECK_IN 和 volatile unsigned char 中的类型差异,我尝试进行如下一些转换(我尝试了几个转换语句)但是每次我从不兼容的指针中得到一个'传递 sc_memeset 的 arg 1类型”错误。

while( *(volatile unsigned char *) &switch_input_table) {
{
   sc_memset( &switch_input_table, sizeof(switch_input_table), 0 );
}

我是 C 的新手,所以我不太确定我的一般方法是否正确。1. 我哪里错了?你能告诉我正确的方法吗?2. 还有哪些方法可以使用?提前致谢。

标签: ctypedefvolatilememset

解决方案


您需要将指向 struct 的指针转换为指向 unsigned char 的指针,就像您在while条件中所做的那样:

sc_memset( (unsigned char*)&switch_input_table, ...

您不需要volatile在强制转换中 - 该函数隐式地将volatile类型限定符添加到传递的参数中。为什么它有volatile,我不知道——除非函数需要硬件寄存器等作为输入,否则它是可疑的代码。


推荐阅读