EventType clr20r3错误的解决方法

本文详细解析了前端开发领域的核心技术,包括HTML、CSS、JavaScript等,深入探讨了Vue、React和Angular等现代前端框架的应用,以及Webpack、Babel等工具的使用。同时,文章还涉及了前端开发中的一些关键概念和技术细节,旨在为前端开发者提供全面的技术指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*================================================================================ NC P63 红 P64 CS P65 绿 P62 VDD 蓝 P61 GND 触摸 P60 主频:8M/4T TKCOM = P65 P60做触摸按键 短按切换模式:白-红-绿-蓝-黄-粉红-七彩慢闪,循环 长按触摸按键:3秒开关机 ,开机白灯 ================================================================================ */ #include "XC8PT8500.H" #include "XJ_DEFINE.H" #include "XC8PT8500_TOUCH_LIB.H" #include "XC8PT8500_TOUCH_LIB_CFG.H" //================================================================================ volatile __at(0x10) unsigned char A_BUFF; //中断ACC保护RAM volatile __at(0x11) unsigned char R3_BUFF; //中断STATUS保护RAM volatile __at(0x12) unsigned char Reg_1MS_Count; //1ms计数RAM volatile __at(0x13) unsigned char Reg_10MS_Count; //10ms计数RAM volatile __at(0x14) unsigned char R_GOTOLOWPOWERMODE_COUNT; //超时低功耗计数RAM //=============================================================================== // IO 端口定义 #define red PORT6_4 #define green PORT6_2 #define blue PORT6_1 // 按键所用 unsigned int Reg_Key1Cnt; unsigned char Reg_Key1check; unsigned char Reg_Key1_10MS; unsigned char Reg_Led_Mode; unsigned char Reg_Duty; unsigned char LED_Duty; unsigned char red_duty,green_duty,blue_duty; unsigned int qicai_time; // 七彩周期时间 unsigned char light_count; // 调取亮度 unsigned char led_count; // 调取LED unsigned char qicai_number; // 七彩次数 unsigned char qicai_on_off; // 七彩顺闪开关 unsigned char Key1_Long_time; unsigned char Reg_Led_Mode_check; __at(0x15) ob8 Reg_Bit1; #define Bit_1MS Reg_Bit1.b0 #define Bit_10MS Reg_Bit1.b1 //============================================================= //按键使用 #define bit_key1_press Reg_Bit1.b2 //key1按键按下标志位 #define Bit_Flag Reg_Bit1.b3 #define bit_Key1_Long Reg_Bit1.b4 //长按标志位 #define Bit_Inc_Dec Reg_Bit1.b5 //==================================================================== //以下不可修改,若未使能串口调试,则释放该地址RAM #if TKLib_UartDebugSwitch == 1 unsigned char R_UART_TX_BUF; unsigned char R_UART_TX_CNT; unsigned char R_UART_TX_DELAY; #endif //==================================================================== #if (TKLib_OPENED_TK_AMOUNT == 1) extern unsigned char RTkGBuff0[6]; #endif #if (TKLib_OPENED_TK_AMOUNT == 2) extern unsigned char RTkGBuff0[6]; extern unsigned char RTkGBuff1[6]; #endif #if (TKLib_OPENED_TK_AMOUNT == 3) extern unsigned char RTkGBuff0[6]; extern unsigned char RTkGBuff1[6]; extern unsigned char RTkGBuff2[6]; #endif #if (TKLib_OPENED_TK_AMOUNT == 4) extern unsigned char RTkGBuff0[6]; extern unsigned char RTkGBuff1[6]; extern unsigned char RTkGBuff2[6]; extern unsigned char RTkGBuff3[6]; #endif #if TKLib_TouchLowerPower extern unsigned char RTkLPGBuff0[4]; #endif //================================================================================ void CLR_RAM(void); void IO_Init(void); void TCC_Init(void); void TK_BASETIMER(void); void WDT_WakeUp_Handle(void); void file_irRec(void); void T1_Init(void); void file_Key1Scan(void); void file_Key1Scan_Long(void); void file_LED_Charge(void); //================================================================================ //初始化RAM:10H~5FH //================================================================================ void CLR_RAM() { for(RSR=0x90;RSR<0xDF;RSR++) //清零 BANK0 RAM {IAR = 0;} IAR = 0; } //================================================================================ //端口初始化 //================================================================================ void IO_Init(void) { PORT6 = 0x00; //P6口输出低 P6CR = 0x00; // P6DCR= 0xfd; } //================================================================================ //TC0初始化 //================================================================================ void TCC_Init(void) { WDE = 0X00; CONT = 0x00; //TCC 2分频 TCC = 156; //1/2 * 2 * (256-156) = 100us 公式:1/IRC频率 * 预分频 * (256-初值) ISR = 0xfe; //清TC0中断标志位 IMR = 0x01; //使能TCC } //================================================================================ //TC1初始化 //================================================================================ void T1_Init(void) { /* PWMCON = 0x88; //pwm=1/8*2(分频)*4clock*100=100us PRD = 100; // ISR = 0x00; //清TC0中断标志位 IMR = 0x09; //使能TCC */ } //================================================================================ //中断服务程序 //================================================================================ void int_isr(void) __interrupt { __asm__("org 0x08"); PUSH(_A_BUFF,_R3_BUFF); //中断入栈保护 //============================================================================ if(TCIF == 1) //判断TCIF是否为0 { TCC += 156; //1/2 * 2 * (256-156) = 100us 公式:1/IRC频率 * 预分频 * (256-初值) ISR = 0xfe; //清TC0中断标志位 if(++Reg_1MS_Count >= 10) { Reg_1MS_Count = 0; Bit_1MS = 1; } if(Reg_Led_Mode>0) { switch(Reg_Led_Mode) { case 1:red = 1;green = 1;blue = 1;break; //白色 case 2:red = 1;green = 0;blue = 0;break; //红 case 3:red = 0;green = 1;blue = 0;break; //绿 case 4:red = 0;green = 0;blue = 1;break; //蓝 case 5:red = 1;green = 1;blue = 0;break; //黄 case 6:red_duty = 10;green_duty = 2;blue_duty = 2;break; // 粉红 // case 7:red_duty = 1;green_duty = 1;blue_duty = 1;break; // 七彩 } if(Reg_Led_Mode==6) { if(LED_Duty<10) LED_Duty++; else LED_Duty = 1; if(LED_Duty<=red_duty) red = 1; else red = 0; if(LED_Duty<=green_duty) green = 1; else green = 0; if(LED_Duty<=blue_duty) blue = 1; else blue = 0; } if(Reg_Led_Mode==7) { if(qicai_time>LED_light[light_count]) { red = red_light[led_count]; green = green_light[led_count]; blue = blue_light[led_count]; } else { red = red_light[led_count+1]; green = green_light[led_count+1]; blue = blue_light[led_count+1]; } if(qicai_time<50) qicai_time++; else { qicai_time = 1; qicai_number++; if(qicai_number>=8) { qicai_number = 0; light_count++; if(light_count>=50) { light_count = 0; led_count++; if(led_count>=3) led_count = 0; } } } } } else { red = 0; green = 0; blue = 0; } } if(T1IF == 1) //判断T1IF是否为1,pwm周期中断 { ISR = 0xf7; //ISR的bit3:T1IF清零 } if(TKIF == 1) //判断TkIF是否为0 { ISR = 0x0f; //清标志 } ISR = 0x19; //清标志 //=============================================== ============================= POP(_A_BUFF,_R3_BUFF); //中断出栈保护恢复 } //================================================================================ //MAIN主程序 //================================================================================ void main() { IO_Init(); CLR_RAM(); TkInit(); //[仿真时单步执行该语句较慢,可用Step Over执行] TCC_Init(); T1_Init(); EI(); //打开总中断 LED_Duty = 0; qicai_time = 0; light_count = 0; led_count = 0; qicai_number = 0; qicai_on_off = 0; Key1_Long_time = 0; Reg_Key1Cnt = 0; Reg_Key1check = 0; Reg_Led_Mode = 0; // Reg_Duty = 188; Bit_Inc_Dec=0; // Reg_Led_Mode = 7; //调试闪法 while(1) { CWDT(); TkScanAndSignalHandle(); //触摸主函数扫描,主循环间隔时间不宜过长,否则影响触摸响应时间 if(Bit_OneScanDone) //判断一轮是否转换结束 { Bit_OneScanDone = 0; #if TKLib_UartDebugSwitch == 1 //串口使能 TK_UartDebug(); #endif if(RKeyOnFlg == 0) //触摸按键全部松开 { if(Bit_10MS) { Bit_10MS = 0; #if TKLib_TouchLowerPower if(--R_GOTOLOWPOWERMODE_COUNT == 0) //触摸按键松开超过设定时间,允许进入触摸低功耗模式 { R_GOTOLOWPOWERMODE_COUNT = T_GOTOLOWPOWERMODE_C_Init_DF; Bit_LowPowerModeReset = 0; //0:进入低功耗前会先复位参考 ; 1:直接进入低功耗 (不容易进低功耗则可考虑置1) Bit_LowPowerModeRun = 1; //允许进入触摸低功耗模式 } #endif } } else { #if TKLib_TouchLowerPower R_GOTOLOWPOWERMODE_COUNT = T_GOTOLOWPOWERMODE_C_Init_DF; #endif } #if TKLib_TouchLowerPower if(Bit_LowPowerModeRun) { if((Reg_Led_Mode==0)&&(F_TK0_On==0)&&(Reg_Key1Cnt==0)&&(Reg_Key1check==0)) //额外睡眠条件 { //============================================================================================ //下面可加进入低功耗模式前其它需要处理的操作 //(触摸相关的TkLowPowerMode()会自行处理WDT 与 CPU 工作模式 用户不需要处理) //如低功耗模式下端口处理,外设模块等 //端口唤醒配置详情参考规格书或功能demo //============================================================================================ TkLowPowerMode(); //进入触摸低功耗模式 //============================================================================================ //下面可加退出低功耗模式后,其它需要恢复的操作 // Reg_Key1Cnt = 1; } //============================================================================================ } #endif ScanContinue(); //重置检测 } if(Bit_1MS) { Bit_1MS = 0; TK_BASETIMER(); if(++Reg_10MS_Count >= 10) { Reg_10MS_Count = 0; Bit_10MS = 1; file_Key1Scan(); //10ms一次,触摸按键短按滤波3次 ,长按是90次*10ms = 900ms } } } } //================================================================================ //功能:校准和长按时钟 //说明:触摸库需要的时基,不可删除,但可以调整位置,即只需要产生下列时基即可 //================================================================================ void TK_BASETIMER(void) { if(++RTK_CaliBaseTime_Cnt >= TKLib_CaliBaseTime) { RTK_CaliBaseTime_Cnt = 0; RTkCBTFlag = TKLib_TK_EN_MASK; if(++RTK_LongKeyBaseTime_Cnt >= TKLib_LongKeyBaseTime) { RTK_LongKeyBaseTime_Cnt = 0; RTkLBTFlag = TKLib_TK_EN_MASK; } } } //================================================================================ //功能:此程序是在触摸低功耗模式下,需要处理的操作,如有需要可增加操作程序 //说明:如有外部按键需退出触摸低功耗模式,可在此处增加相关程序确定是否需要退出触摸低功耗模式 // 可根据需求,判断系统是否需要强制唤醒(清Bit_LowPowerModeRun,强制唤醒系统) //================================================================================ void WDT_WakeUp_Handle(void) { #if TKLib_TouchLowerPower //为降低休眠的功耗,程序采用分组采样法,将所有需要唤醒的口最多分为两组去检测,能够有效降低功耗。 //当一组采样口大于1时,其采样数据不可作为单通道的数据,所以休眠时的数据跟正常工作时的数据是分开的, //如果进休眠时的环境值跟唤醒时的环境值相差比较大,那么就会出现唤醒后触摸释放不掉的问题。 //如果每组采样都只有一个通道时,采样的值可用作正常工作的值,可以通过下面的指令在休眠状态下更新正常工作的环境值。 // RTkGBuff0[0] = RTkLPGBuff0[0]; //只有一个按键时使用 // RTkGBuff0[1] = RTkLPGBuff0[1]; //只有一个按键时使用 // RTkGBuff0[2] = RTkLPGBuff0[0]; //只有一个按键时使用 // RTkGBuff0[3] = RTkLPGBuff0[1]; //只有一个按键时使用 // RTkGBuff1[5] = RTkLPGBuff0[2]; //有两个通道时使用 // RTkGBuff1[4] = RTkLPGBuff0[3]; //有两个通道时使用 // RTkGBuff1[3] = RTkLPGBuff0[2]; //有两个通道时使用 // RTkGBuff1[2] = RTkLPGBuff0[3]; //有两个通道时使用 //TKLib_TKLPGroup0_MASK,TKLib_TKLPGroup1_MASK使能唤醒脚也要按照顺序来, //比如TKLib_TKLPGroup0_MASK = 0x01;TKLib_TKLPGroup1_MASK = 0x02;是对的。 //比如TKLib_TKLPGroup0_MASK = 0x02;TKLib_TKLPGroup1_MASK = 0x01;是错的。 //注意:以上程序仅限于唤醒通道<=2时使用,并且每组检测只能检测一个通道。 //如果需要唤醒的口大于2时,不能使用上面的方法去更新环境值,我们可以利用外界唤醒变化缓慢的特性,间隔一段时间清Bit_LowPowerModeRun退出休眠去更新环境值。 //Bit_LowPowerModeRun = 0; //可根据需求,判断系统是否需要强制唤醒(清Bit_LowPowerModeRun,强制唤醒系统) #endif } //================================================================================ //功能:按键短按检测程序 //说明: //================================================================================ void file_Key1Scan(void) { if(F_TK0_On&&Reg_Key1check==0) //按下标志位为1 { if(++Reg_Key1Cnt>=300) { if(Reg_Led_Mode==0) { Reg_Led_Mode = 1; red = 1; green = 1; blue = 1; } else { red = 0; green = 0; blue = 0; LED_Duty = 0; qicai_time = 0; light_count = 0; led_count = 0; qicai_number = 0; qicai_on_off = 0; Reg_Led_Mode = 0; } // file_LED_Charge(); // LED输出放在定时器里面 Reg_Key1Cnt = 0; Reg_Key1check = 3; } } else { if(!F_TK0_On) //按下标志为0,释放判断 { if(Reg_Key1Cnt>=3&&Reg_Key1Cnt<300&&Reg_Led_Mode>0) { if(Reg_Led_Mode<2) Reg_Led_Mode++; else Reg_Led_Mode = 0; LED_Duty = 0; qicai_time = 0; light_count = 0; led_count = 0; qicai_number = 0; qicai_on_off = 0; // file_LED_Charge(); // LED输出放在定时器里面 Reg_Key1Cnt = 0; Reg_Key1check = 3; } if(Reg_Key1check>0) Reg_Key1check--; Reg_Key1Cnt = 0; } } } //================================================================================ //功能:按键长按检测程序 //说明: //================================================================================ void file_Key1Scan_Long(void) { if(bit_Key1_Long) //已经确认是长按 { //执行渐变程序 if(Bit_Inc_Dec) //为1时执行渐亮 { if(Reg_Duty<188) { Reg_Duty++; file_LED_Charge(); } } else //为0时执行渐暗 { if(Reg_Duty>6) { Reg_Duty--; file_LED_Charge(); } } } } //================================================================================ //功能:led输出子程序 //说明: //================================================================================ void file_LED_Charge(void) //正输出 { if(Reg_Led_Mode==0) //关机 { red = 0; green = 0; blue = 0; } if(Reg_Led_Mode==1) //白色 { red = 1; green = 1; blue = 1; } }改一下代码短触摸一次P61亮,短触摸第二次P61灭进入睡眠,其他功能都不要
最新发布
07-30
<think>好的,用户遇到了.NET程序中的CLR20r3错误,问题签名是d75adb08。我需要先理解这个错误的具体含义和常见原因,然后提供针对性的解决方案。 首先,CLR20r3错误通常与.NET应用程序的崩溃有关,问题签名中的代码可能指向特定的异常类型或模块。常见的导致原因包括程序集缺失、依赖项版本不匹配、代码中的未处理异常,或者是权限问题。问题签名d75adb08可能需要具体分析崩溃报告,但用户可能没有详细日志,所以得给出通用的排查步骤。 接下来,我应该分步骤指导用户检查这些可能的原因。首先建议他们检查事件查看器,因为Windows会记录应用程序错误的详细信息,特别是.NET的异常堆栈。然后,确保所有依赖项正确安装,比如.NET Framework版本是否兼容,是否有缺少的DLL文件。代码中的未处理异常也是一个常见问题,建议用户使用调试工具或日志记录来定位问题。此外,权限问题可能导致无法访问某些资源,需要以管理员身份运行程序或调整文件夹权限。 用户可能需要更新.NET Framework到最新版本,或者重新安装程序以修复损坏的文件。如果问题依然存在,提供进一步的帮助渠道,比如社区支持或联系开发者,这样用户知道后续该怎么做。 最后,生成相关问题时要覆盖错误的其他可能原因、调试方法、常见错误签名对比,以及如何在服务器环境中处理此类错误,这样用户可以全面了解问题并找到更多解决方案。</think>### .NET CLR20r3 错误解决方案(问题签名 d75adb08) #### 1. 错误背景分析 CLR20r3 是.NET应用程序运行时常见的崩溃错误代码,表示公共语言运行时(CLR)检测到未处理的异常[^2]。问题签名 `d75adb08` 是错误报告的唯一标识符,需结合具体日志定位根源。 #### 2. 排查步骤 **步骤1:查看事件查看器日志** - 打开 `事件查看器` → `Windows 日志` → `应用程序` - 查找带 `.NET Runtime` 来源的错误事件 - 记录异常类型(如 `System.NullReferenceException`)和堆栈跟踪 **步骤2:检查依赖项完整性** - 验证程序引用的所有DLL文件存在且版本匹配 - 使用 _Fuslogvw.exe_(程序集绑定日志查看器)分析加载失败的程序集 - 示例命令: ```powershell fuslogvw /logpath=C:\logs /enable ``` **步骤3:更新.NET Framework** - 通过控制面板→程序→启用或关闭Windows功能 - 确认已安装对应版本的.NET Framework(如4.8) - 运行Windows Update安装最新补丁 **步骤3:调试代码** - 在可能引发异常的代码块添加try-catch: ```csharp try { // 业务代码 } catch (Exception ex) { File.WriteAllText("error.log", ex.ToString()); } ``` #### 3. 典型解决方案 | 问题类型 | 解决方案 | 验证方法 | |---------|---------|---------| | 缺失DLL | 通过NuGet重新安装依赖包 | 检查`bin`目录文件完整性 | | 权限不足 | 以管理员身份运行程序 | 检查系统日志中的访问拒绝记录 | | 内存溢出 | 使用内存分析工具(如ANTS Memory Profiler) | 监控任务管理器内存占用 | #### 4. 高级处理 对于 `d75adb08` 这类特定签名,建议: 1. 获取完整的崩溃转储文件(通过ProcDump): ```cmd procdump -ma -e YourApp.exe ``` 2. 使用WinDbg分析转储文件: ```windbg .loadby sos clr !analyze -v ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值