请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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;中断} 值+=数字*乘法器 ;} 返回值; }
				