请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:EK-TM4C123GXL 主题中讨论的其他器件:TM4C123
工具/软件:Code Composer Studio
大家好、这让我感到非常疯狂。
我正在编写一个 API、除了一个函数外、该 API 几乎已经完全完成。 这一个函数持续触发硬故障
NVIC_FAULT_STAT = 0x00009200
和
NVIC_FAULT_ADDR = 0x1FFFFFF4
我已经查看了 TI 的故障诊断 PDF、但我仍然无法解决我的问题。 我真的很感谢在这方面提供的任何帮助、因为我很困在这里。
这是有问题的函数。 对于整数而言、似乎可以正常工作、但小数点值会使其变得很难实现。 它需要是转换字符串内部的东西来进行浮点。
clearArray (user_input、100); getString (user_input); if (!strncmp (user_input、"setFrequency"、 12)){ char out[20]、intMode[3]; int out_factor、intModeDecision; double out_freq、 结果; unsigned short nINT; unsigned long nFRAC、nMOD; clearArray (out、 20); clearArray (intMode、3); printString (new_line); printString (new_line); printString ("输入所需的输出频率:"); getString (out); printString (new_line); printString (new_line); printString ("整数模式? (整数为\"y\"、小数为\"n\"):"); getString (intMode); intModeDecision = ConvertStringToBool (intMode); output_freq = ConvertStringToFrequency (out、&out_FACTOR); 结果= GenerateFreq-Ratio (output_freq、out_factor、InternalReferenceValue、internalRefFactor); DetermineFeedbackValues (结果、 intModeDecision、&nINT、&nFRAC、&nMOD); SetFeedbackControlValues (nINT、 nFRAC、nMOD); printString (new_line); printString (new_line); printString ("Frequency has been set."); printString (new_line); printString (new_line); printString ("Enter command:"); }
double ConvertStringToFrequency (char* string、int*因子){ //频率范围通常为 GHz、因此我希望避免使用大数字、因为它们容易出现舍入错误 char 值[20]、unit[20]; char* value_ptr = value; char* unit_ptr = unit; int i; for (i = 0;i < 20;); i++){ Value[i]='\0'; unit[i]='\0'; }// 将数字部分复制到单独的数组中(58是 ASCII 表中数字的限制) ,而(*字符串<58){ *值_ptr =*字符串++; value_ptR++; } while (*字符串!= enter){**值+ =单元 double value_flt = ConvertStringToFloat (value); if (!strncmp (unit、"GHz"、3)){ *因数= 9;// 10^9 power } 否则(!strncmp (unit、"MHz"、3)){ *因数= 6;// 10^6 power } 否则(!strmp (unit、"3kHz )、*因数= 3) // 10^3 power } 否则,如果(!strncmp (unit、"Hz"、3)){ *因数= 0;// 10^0 power } 返回 value_flt; }
double ConvertStringToFloat (char* string){ char integerPart[20]、thapalPart[21]; char* int_ptr = intgerPart; char* dec _ptr =抽取器件; char* decimal_check =字符串; int i、flag = 0、decime_flag = 0、mult = 0; unsigned long integer 部分、decimal_part; double divider = 1、result; double intPart、decPart; //清除 (i = 0;i < 20;i++){integerPart[i]='\0';} for (i = 0;i < 21;i++){intualPart[i]='\0';} //检查十进制 ,同时(*十进制检查!='\0'){ 如果(*十进制检查++='.') { decimed_flag = 1;} if (decimal_flag){ //将整数部分复制到工作区 while (* string!='.') { * int_ptr =* string++; int_ptr++; } //将十进制部分复制到工作区 ,同时(* string!='\0'){ if (flag = 0){ string++; flag = 1; } 否则{ *十进制_dptr =*字符串++; dec = integr+ ;mult+; } 整数 部分= integrand_decrand_dec (十进制部分);integrand_decom_conominPart = integrand_decom_integrand_decominPart =(十进制部分)(十进制部分) 对于(i = 0;i < mult;i++){divider *= 10;} decPart /= divider; result = intPart + decPart; } 否则{ //复制整数部分(无小数位) while (* string!='\0'){ *int_ptr =* string++; int_ptr++; } int_part = integrPart (int_integrPart = integrand&int&int&int&integr&int&int&int&int&int&int&int&int&trl) 结果= intPart; } 返回结果; }
unsigned long ConvertStringToNumber (char* string){ //此函数可正确转换>unsigned<< long 整数的所有合法值:0D - 4、294、967、295d //数字字符串必须采用十进制格式,此函数不能接受十六进制值 int i、digit、curry_power =-1; unsigned long 值= 0; pt* temp_char; temp_ptr = string; while (* temp_ptp++!='\0'){CURRENT_POWER++;} while (* string!='\0'){ unsigned long 乘法器= 1; for (i = CURRENT_POWER--;i > 0;i-){乘法器*= 10;} switch (* string++){ case '0' = 1 ;数字 break:1:1: 案例"2": 数字= 2; 中断; 案例"3": 数字= 3; 中断; 案例"4": 数字= 4; 中断; 案例"5": 数字= 5; 中断; 案例"6": 数字= 6; 中断; 案例"7": 数字= 7; 中断; 案例"8": 数字= 8; 中断; 案例"9": 数字 = 9;中断} 值+=数字*乘法器 ;} 返回值; }