【C编译问题】variably modfied '' at file scope

本文解决了在代码移植过程中遇到的“variably modified”错误。详细分析了错误原因,并通过调整宏定义中的位移操作数避免了创建过大的数组。

在移植代码时出现了 “variably modfied 'g_mem_array' at file scope”的错误,

在网上找的都是如下:

const int bufsize=100;
char buf[bufsize];

定义的时候使用

const int bufsize=100; 在C语言中,const不是一个真真正正的常量,其代表的含义仅仅是只读。使用const声明的对象是一个运行时对象,无法使用其作为某个量的初值、数组的长度、case的值或在类型的情形中使用

所以修改为:

    #define BUFSIZE 100

   char buf[BUFSIZE];

 就可以了。

但是对我的这个问题,g_mem_array是定义成一个宏的:

#define MEM_CNT 800

#define MEM_BIT 8

#define MEM_SIZE ((184+(1<<MEM_CNT)))  

unsigned int g_mem_array[MEM_SIZE];

后来仔细看了下编译的log:

#define MEM_SIZE ((184+(1<<MEM_CNT)))   warning:left shift count >= width of type

因为MEM_CNT 是800,所以(1<<MEM_CNT)是一个巨大的数,所以 定义的这个数组g_mem_array就是一个巨大的数组,

显然没有能支持这个大小的系统。

后和相关同事确认之后,修改MEM_SIZE:

#define MEM_SIZE ((184+(1<<MEM_BIT)))  

就编译过了。


                
内容概要:本文介绍了一种用于电磁暂态(EMT)研究的第四类全变流器型风力发电系统的通用Simulink仿真模型,旨在构建一个能够准确反映实际风电系统动态特性的简化通用模型。该模型涵盖了风力机、传动链、发电机、全功率变流器及其控制策略等关键组成部分,重点突出系统在电网故障、风速波动等复杂工况下的动态响应能力,适用于风电并网电磁暂态分析、新型电力系统稳定性评估及高比例可再生能源接入场景的研究。模型设计兼顾准确性与仿真效率,便于研究人员快速搭建和调试,推动风电系统建模与控制技术的发展; 适合人群:具备一定电力系统理论基础和MATLAB/Simulink仿真能力,从事新能源发电、电力电子变换、风电并网控制及相关方向的研究生、科研人员及工程技术人员; 使用场景及目标:①开展风电系统在电网扰动下的电磁暂态仿真分析;②研究全功率变流器风电机组的动态行为与控制特性;③支撑新型电力系统中高渗透率风电接入的稳定性与电能质量评估,服务于学术研究、课程教学与工程项目前期仿真验证; 阅读建议:建议读者结合文中提供的模型结构与参数设置,在Simulink环境中动手复现并调试仿真模型,通过设置不同运行工况(如三相短路、低电压穿越、风速突变等)观察系统响应,深入理解全变流器风电机组的建模方法、控制逻辑与动态特性,进而拓展应用于更复杂的多机并网或综合能源系统仿真场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值