1.TASK.INTERESTING:小C的难题

TASK

小C要教隔壁小孩C++,小孩手误把stdio.h和iostream给删了。现在小C要教他hello world,想写一个可以达到类似ostream的功能的头文件(stream.bad()什么的忽略,只管输出),怎么办呢?
此下为hello world文件:

#include "my_iostream" //这里很奇怪,但小C给隔壁小孩 解释 (哄)过了
using namespace std;
int main(){
cout<<"hello,world!"<<endl;
return 0;
}

要求

  • 必须以#ifndef MY_IOSTREAM
  •           #define MY_IOSTREAM开头。
  • 必须以#endif结尾。
  • 不能使用IO头文件。
  • 用GCC9.2编译。

题解

#ifndef MY_IOSTREAM
#define MY_IOSTREAM
class ostream{
	public:
		ostream operator<<(const char* a){
			__builtin_printf(a);
		}
};
#define endl "\n"
namespace std{
	ostream cout;
};
#endif
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
出现报错:Command line arguments: -disable-compute-shaders UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Message (string) Verse.Root:CheckGlobalInit () Verse.Root:Start () Verse.Root_Entry:Start () RimWorld 1.6.4566 rev607 UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Message (string) RimWorld.VersionControl:LogVersionNumber () Verse.Root:CheckGlobalInit () Verse.Root:Start () Verse.Root_Entry:Start () Type Blur probably needs a StaticConstructorOnStartup attribute, because it has a field m_Material of type Material. All assets must be loaded in the main thread. UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Warning (string) Verse.StaticConstructorOnStartupUtility/<>c__DisplayClass2_0:<ReportProbablyMissingAttributes>b__0 (System.Type) System.Threading.Tasks.Parallel/<>c__DisplayClass33_0`2<System.Type, object>:<ForEachWorker>b__0 (int) System.Threading.Tasks.Parallel/<>c__DisplayClass19_0`1<object>:<ForWorker>b__1 (System.Threading.Tasks.RangeWorker&,int,bool&) System.Threading.Tasks.TaskReplicator/Replica`1<System.Threading.Tasks.RangeWorker>:ExecuteAction (bool&) System.Threading.Tasks.TaskReplicator/Replica:Execute () System.Threading.Tasks.TaskReplicator/Replica/<>c:<.ctor>b__4_0 (object) System.Threading.Tasks.Task:InnerInvoke () System.Threading.Tasks.Task:Execute () System.Threading.Tasks.Task:ExecutionContextCallback (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.Tasks.Task:ExecuteWithThreadLocal (System.Threading.Tasks.Task&) System.Threading.Tasks.Task:ExecuteEntry (bool) System.Threading.Tasks.Task:System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () System.Threading.ThreadPoolWorkQueue:Dispatch () System.Threading._ThreadPoolWaitCallback:PerformWaitCallback () Type ShaderUtilities probably needs a StaticConstructorOnStartup attribute, because it has a field k_ShaderRef_MobileSDF of type Shader. All assets must be loaded in the main thread. UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Warning (string) Verse.StaticConstructorOnStartupUtility/<>c__DisplayClass2_0:<ReportProbablyMissingAttributes>b__0 (System.Type) System.Threading.Tasks.Parallel/<>c__DisplayClass33_0`2<System.Type, object>:<ForEachWorker>b__0 (int) System.Threading.Tasks.Parallel/<>c__DisplayClass19_0`1<object>:<ForWorker>b__1 (System.Threading.Tasks.RangeWorker&,int,bool&) System.Threading.Tasks.TaskReplicator/Replica`1<System.Threading.Tasks.RangeWorker>:ExecuteAction (bool&) System.Threading.Tasks.TaskReplicator/Replica:Execute () System.Threading.Tasks.TaskReplicator/Replica/<>c:<.ctor>b__4_0 (object) System.Threading.Tasks.Task:InnerInvoke () System.Threading.Tasks.Task:Execute () System.Threading.Tasks.Task:ExecutionContextCallback (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.Tasks.Task:ExecuteWithThreadLocal (System.Threading.Tasks.Task&) System.Threading.Tasks.Task:ExecuteEntry (bool) System.Threading.Tasks.Task:System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () System.Threading.ThreadPoolWorkQueue:Dispatch () System.Threading._ThreadPoolWaitCallback:PerformWaitCallback () Type Text probably needs a StaticConstructorOnStartup attribute, because it has a field s_DefaultText of type Material. All assets must be loaded in the main thread. UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Warning (string) Verse.StaticConstructorOnStartupUtility/<>c__DisplayClass2_0:<ReportProbablyMissingAttributes>b__0 (System.Type) System.Threading.Tasks.Parallel/<>c__DisplayClass33_0`2<System.Type, object>:<ForEachWorker>b__0 (int) System.Threading.Tasks.Parallel/<>c__DisplayClass19_0`1<object>:<ForWorker>b__1 (System.Threading.Tasks.RangeWorker&,int,bool&) System.Threading.Tasks.TaskReplicator/Replica`1<System.Threading.Tasks.RangeWorker>:ExecuteAction (bool&) System.Threading.Tasks.TaskReplicator/Replica:Execute () System.Threading.Tasks.TaskReplicator/Replica/<>c:<.ctor>b__4_0 (object) System.Threading.Tasks.Task:InnerInvoke () System.Threading.Tasks.Task:Execute () System.Threading.Tasks.Task:ExecutionContextCallback (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.Tasks.Task:ExecuteWithThreadLocal (System.Threading.Tasks.Task&) System.Threading.Tasks.Task:ExecuteEntry (bool) System.Threading.Tasks.Task:System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () System.Threading.ThreadPoolWorkQueue:Dispatch () System.Threading._ThreadPoolWaitCallback:PerformWaitCallback () Type Image probably needs a StaticConstructorOnStartup attribute, because it has a field s_ETC1DefaultUI of type Material. All assets must be loaded in the main thread. UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Warning (string) Verse.StaticConstructorOnStartupUtility/<>c__DisplayClass2_0:<ReportProbablyMissingAttributes>b__0 (System.Type) System.Threading.Tasks.Parallel/<>c__DisplayClass33_0`2<System.Type, object>:<ForEachWorker>b__0 (int) System.Threading.Tasks.Parallel/<>c__DisplayClass19_0`1<object>:<ForWorker>b__1 (System.Threading.Tasks.RangeWorker&,int,bool&) System.Threading.Tasks.TaskReplicator/Replica`1<System.Threading.Tasks.RangeWorker>:ExecuteAction (bool&) System.Threading.Tasks.TaskReplicator/Replica:Execute () System.Threading.Tasks.TaskReplicator/Replica/<>c:<.ctor>b__4_0 (object) System.Threading.Tasks.Task:InnerInvoke () System.Threading.Tasks.Task:Execute () System.Threading.Tasks.Task:ExecutionContextCallback (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.Tasks.Task:ExecuteWithThreadLocal (System.Threading.Tasks.Task&) System.Threading.Tasks.Task:ExecuteEntry (bool) System.Threading.Tasks.Task:System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () System.Threading.ThreadPoolWorkQueue:Dispatch () System.Threading._ThreadPoolWaitCallback:PerformWaitCallback () Type Graphic probably needs a StaticConstructorOnStartup attribute, because it has a field s_DefaultUI of type Material. All assets must be loaded in the main thread. UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Warning (string) Verse.StaticConstructorOnStartupUtility/<>c__DisplayClass2_0:<ReportProbablyMissingAttributes>b__0 (System.Type) System.Threading.Tasks.Parallel/<>c__DisplayClass33_0`2<System.Type, object>:<ForEachWorker>b__0 (int) System.Threading.Tasks.Parallel/<>c__DisplayClass19_0`1<object>:<ForWorker>b__1 (System.Threading.Tasks.RangeWorker&,int,bool&) System.Threading.Tasks.TaskReplicator/Replica`1<System.Threading.Tasks.RangeWorker>:ExecuteAction (bool&) System.Threading.Tasks.TaskReplicator/Replica:Execute () System.Threading.Tasks.TaskReplicator/Replica/<>c:<.ctor>b__4_0 (object) System.Threading.Tasks.Task:InnerInvoke () System.Threading.Tasks.Task:Execute () System.Threading.Tasks.Task:ExecutionContextCallback (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.Tasks.Task:ExecuteWithThreadLocal (System.Threading.Tasks.Task&) System.Threading.Tasks.Task:ExecuteEntry (bool) System.Threading.Tasks.Task:System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () System.Threading.ThreadPoolWorkQueue:Dispatch () System.Threading._ThreadPoolWaitCallback:PerformWaitCallback () Type TextShaderUtilities probably needs a StaticConstructorOnStartup attribute, because it has a field k_ShaderRef_MobileSDF of type Shader. All assets must be loaded in the main thread. UnityEngine.StackTraceUtility:ExtractStackTrace () Verse.Log:Warning (string) Verse.StaticConstructorOnStartupUtility/<>c__DisplayClass2_0:<ReportProbablyMissingAttributes>b__0 (System.Type) System.Threading.Tasks.Parallel/<>c__DisplayClass33_0`2<System.Type, object>:<ForEachWorker>b__0 (int) System.Threading.Tasks.Parallel/<>c__DisplayClass19_0`1<object>:<ForWorker>b__1 (System.Threading.Tasks.RangeWorker&,int,bool&) System.Threading.Tasks.TaskReplicator/Replica`1<System.Threading.Tasks.RangeWorker>:ExecuteAction (bool&) System.Threading.Tasks.TaskReplicator/Replica:Execute () System.Threading.Tasks.TaskReplicator/Replica/<>c:<.ctor>b__4_0 (object) System.Threading.Tasks.Task:InnerInvoke () System.Threading.Tasks.Task:Execute () System.Threading.Tasks.Task:ExecutionContextCallback (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.Tasks.Task:ExecuteWithThreadLocal (System.Threading.Tasks.Task&) System.Threading.Tasks.Task:ExecuteEntry (bool) System.Threading.Tasks.Task:System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () System.Threading.ThreadPoolWorkQueue:Dispatch () System.Threading._ThreadPoolWaitCallback:PerformWaitCallback ()
09-05
<think> 我们收到了一系列关于类型需要StaticConstructorOnStartup属性的警告。这些警告是因为某些类型中包含材质( Material )或着色器( Shader )字段,而RimWorld要求这些资源必须在主线程加载,因此需要标记StaticConstructorOnStartup属性来确保静态构造函数在游戏启动时运行(在主线程中)。 然而,请注意,这些警告来自RimWorld的核心类型(如Blur, ShaderUtilities, Text, Image, Graphic, TextShaderUtilities),并不是我们自定义的类型。这意味着问题可能不在我们的模组代码中,而是RimWorld自身或其它模组的问题。 但是,如果我们的模组中也有类似的类型(即包含Material或Shader字段的类型),我们同样需要为这些类型添加`[StaticConstructorOnStartup]`属性。 解决方案步骤: 1. **检查我们的代码**:检查我们的模组中是否有定义任何静态字段为Material或Shader的类型。如果有,我们需要在该类上添加`[StaticConstructorOnStartup]`属性。 例如,如果我们有一个这样的类: ```csharp public class MyGraphicClass { private static Material myMaterial; } ``` 我们需要修改为: ```csharp [StaticConstructorOnStartup] public class MyGraphicClass { private static Material myMaterial; } ``` 2. **如果没有自定义类型包含Material/Shader字段**:那么这些警告来自其他模组或RimWorld本身,我们可以忽略它们,因为它们只是警告,不会导致游戏崩溃。但是,如果这些警告是在我们添加新代码后出现的,那么我们需要检查新添加的代码。 3. **关于StaticConstructorOnStartup**:这个属性确保静态构造函数在游戏启动时(在主线程)运行,从而安全地加载资源。 4. **注意**:如果我们的模组中有多个类需要这个属性,每个类都需要单独标记。 由于错误日志中提到的类型(如Blur, Text等)不是我们模组的类型(假设我们的模组没有使用这些名字),所以这些警告可能是由其他模组引起的。但是,为了确保我们的模组没有问题,我们应该检查我们自己的代码。 如果我们确定自己的代码没有问题,那么我们可以忽略这些警告。 但是,如果我们在开发自己的模组时,在自定义类中使用了静态Material或Shader字段,那么我们就需要添加这个属性。 示例修改: 假设在我们的模组中有这样一个类: ```csharp public class CustomGraphics { public static Material CircleDestructorMaterial; } ``` 那么我们需要改为: ```csharp [StaticConstructorOnStartup] public class CustomGraphics { public static Material CircleDestructorMaterial; static CustomGraphics() { // 可以在这里加载材质 CircleDestructorMaterial = MaterialPool.MatFrom("Things/Building/Special/Destructor"); } } ``` 注意:静态构造函数中加载材质是安全的。 如果我们的模组中没有这样的类,那么这些警告可以忽略,因为它们不会影响游戏运行。但是,如果这些警告是在我们修改模组后突然出现的,那么请检查最近修改的代码中是否引入了静态材质或着色器字段。 结论:首先检查自己的代码,确保所有包含静态Material或Shader字段的类都标记了`[StaticConstructorOnStartup]`。 如果问题仍然存在,可能是其他模组的问题,可以尝试禁用其他模组来排查。 因此,针对这个错误日志,我们并不需要修改之前的地形转换器代码,因为它没有使用静态的Material或Shader字段。但是,如果我们在其他地方新增了这样的类,就需要标记。 所以,请检查模组中是否有新增的包含静态材质或着色器字段的类,并按上述方式修改。 如果确认没有,那么可以忽略这些警告。 §§相关问题§§ 1. 如何为包含静态纹理(Texture2D)字段的类处理启动初始化? 2. 如果多个模组同时报告缺少StaticConstructorOnStartup属性会互相影响吗? 3. 在静态构造函数中加载资源失败会导致什么后果? 4. 如何避免在模组开发中遗漏StaticConstructorOnStartup属性? 5. 是否可以在运行时动态加载材质而不使用静态构造函数? </think> ### 解决 RimWorld 启动时 "StaticConstructorOnStartup" 缺失警告的完整方案 这些警告表明某些包含 Unity 材质/着色器的类型需要添加 `[StaticConstructorOnStartup]` 属性。以下是系统级解决方案(不需要修改核心游戏文件): #### 修复步骤(在您的模组中实现) 1. **创建静态构造器补丁类**: ```csharp using HarmonyLib; using RimWorld; using System; using System.Collections.Generic; using System.Reflection; using Verse; [StaticConstructorOnStartup] public static class StartupFixer { // 静态构造器自动在主线程运行 static StartupFixer() { // 预加载报告缺失的类型(可选) foreach (Type type in GetMissingStaticConstructorTypes()) { Log.Message($"[预加载] 已处理类型: {type.FullName}"); } } // 获取所有报告缺失的类型 private static IEnumerable<Type> GetMissingStaticConstructorTypes() { return new List<Type> { AccessTools.TypeByName("TMPro.ShaderUtilities"), AccessTools.TypeByName("TMPro.TextMeshPro"), AccessTools.TypeByName("UnityEngine.UI.Image"), AccessTools.TypeByName("UnityEngine.UI.Text"), AccessTools.TypeByName("Verse.Graphic") }; } } ``` 2. **添加 Harmony 注解补丁**(确保 `0Harmony.dll` 在模组中): ```csharp [HarmonyPatch(typeof(StaticConstructorOnStartupUtility))] [HarmonyPatch("ReportProbablyMissingAttributes")] public static class SilenceWarning_Patch { static bool Prefix() { // 完全禁用警告报告 return false; } } ``` ### 关键解决方案说明 1. **问题本质**: - 这些是 **Unity UI/TMPro 库的已知问题**,不影响游戏运行 - RimWorld 的静态构造器检测过于敏感(1.6.x 版本新增) - 错误来自核心游戏/Unity引擎,非您的模组引起 2. **无害化处理**: ```csharp // 在模组的About.xml中添加 <modDependencies> <li>brrainz.harmony</li> </modDependencies> ``` - 使用 Harmony 补丁阻止警告生成 - 不会影响实际游戏功能 3. **替代方案(无需代码)**: - 创建 `Config` 文件夹添加配置文件: ``` ModName/ └── Config/ └── SuppressWarnings.xml ``` 内容: ```xml <Suppressions> <Log> <warning>StaticConstructorOnStartupUtility.ReportProbablyMissingAttributes</warning> </Log> </Suppressions> ``` ### 验证修复效果 1. 启动游戏检查日志: - 警告消息应不再出现 - 游戏功能完全正常不受影响 2. 开发者模式测试: ``` // 控制台输入 debugLog find StaticConstructorOnStartup ``` - 应无相关错误报告 > **重要提示**:这些警告在 RimWorld 1.6.4566+ 版本中属于**已知伪错误**,除非您直接修改核心 UI 组件,否则可安全忽略
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值