📄 kw_config.lst
字号:
224 2 CM_ConfigParameter.RS232_bps = RS232_9600;
225 2 *str += 4;
226 2 }
227 1 else if(SM_CmpString("4800", *str, 4) == 1)
228 1 {
229 2 CM_ConfigParameter.RS232_bps = RS232_4800;
230 2 *str += 4;
231 2 }
232 1 else
233 1 {
234 2 return 0; //BPS错误
235 2 }
236 1
237 1
238 1 SkipSpace(*str);
239 1 CM_ConfigParameter.RS232_Data = Char2Byte(**str); //读取数据位数
240 1 if(CM_ConfigParameter.RS232_Data != 8)
C51 COMPILER V7.50 KW_CONFIG 10/12/2007 17:06:01 PAGE 5
241 1 {
242 2 return 0;
243 2 }
244 1 (*str)++;
245 1
246 1 SkipSpace(*str); //读取校验位
247 1 CM_ConfigParameter.RS232_CH = (**str);
248 1 if(CM_ConfigParameter.RS232_CH != 'N')
249 1 {
250 2 return 0;
251 2 }
252 1 (*str)++;
253 1
254 1 SkipSpace(*str); //读取停止位数
255 1 CM_ConfigParameter.RS232_Stop = Char2Byte(**str);
256 1 if(CM_ConfigParameter.RS232_Stop != 1)
257 1 {
258 2 return 0;
259 2 }
260 1 (*str)++;
261 1
262 1 return 1;
263 1 }
264
265 /*************************************************************************************
266 Function: CM_ReadFileNameParam
267 Description: 从配置文件中读取参数到CM_ConfigParameter中
268 Called By:
269 Input: N/A
270 Output: N/A
271 Return: 1:读取成功,0:失败
272 Others:
273 *************************************************************************************/
274 bit CM_ReadFileNameParam(BYTE ** str)
275 {
276 1 CM_SkipNote(str);
277 1 CM_ConfigParameter.File_StartLength = Char2Byte(**str); //读取文件名前缀长度
278 1 if(CM_ConfigParameter.File_StartLength < 0 || CM_ConfigParameter.File_StartLength >8)
279 1 {
280 2 return 0;
281 2 }
282 1
283 1 (*str)++;
284 1
285 1 SkipSpace(*str);
286 1 SM_CpyString(CM_ConfigParameter.File_Start,*str,CM_ConfigParameter.File_StartLength);
287 1 (*str) += CM_ConfigParameter.File_StartLength;
288 1
289 1 SkipSpace(*str);
290 1 CM_ConfigParameter.File_End = Char2Byte(**str); //读取文件命名方式
291 1 if(CM_ConfigParameter.File_End != 0 && CM_ConfigParameter.File_End != 1)
292 1 {
293 2 return 0;
294 2 }
295 1 (*str)++;
296 1
297 1 SkipSpace(*str);
298 1 SM_CpyString(CM_ConfigParameter.File_Ext, *str,3); //读取文件扩展名
299 1 (*str) += 3;
300 1 return 1;
301 1 }
302 /*************************************************************************************
C51 COMPILER V7.50 KW_CONFIG 10/12/2007 17:06:01 PAGE 6
303 Function: CM_ReadConfigToParam
304 Description: 从配置文件中读取参数到CM_ConfigParameter中
305 Called By:
306 Input: N/A
307 Output: N/A
308 Return: 1:读取成功,0:失败
309 Others:
310 *************************************************************************************/
311 bit CM_ReadConfigToParam()
312 {
313 1 xdata BYTE * tmp;
314 1 xdata WORD i,clus,current_clus;
315 1 xdata DWORD fp_start_sector,file_length;
316 1 Dir_tag * fp = FM_OpenFileInRoot(CM_CONFIG_FILE_NAME); //打开配置文件
317 1
318 1 if(fp == 0)
319 1 {
320 2 CM_LogError(LOG_OPEN_FILE);
321 2 return 0; //文件打开失败
322 2 }
323 1 NM_ReadPage(FM_CurrentDirLBA);
324 1 file_length = (fp->FileLength[0] | fp->FileLength[1]<<8 //获取文件长度
325 1 | fp->FileLength[2]<<16 | fp->FileLength[3]<<24);
326 1 if(file_length == 0) //文件长度错误
327 1 {
328 2 FM_WriteFile(DEFAULT_CONFIG,SM_GetStringLength(DEFAULT_CONFIG));
329 2 CM_LogError(LOG_OPEN_FILE);
330 2 return 0;
331 2 }
332 1 ((BYTE*)¤t_clus)[1] = fp->StartClus[0]; //获取开始簇
333 1 ((BYTE*)¤t_clus)[0] = fp->StartClus[1];
334 1
335 1 fp_start_sector = (current_clus-2) * FM_sectors_clus + FM_ptr_data; //获取首扇区
336 1 clus = file_length/(FM_sectors_clus * 512); //计算总簇数
337 1
338 1 NM_ReadPage(fp_start_sector); //读取首扇区
339 1 tmp = EP6FIFOBUF;
340 1
341 1
342 1
343 1 //读取并检查文件标志[KW_CONFIG]
344 1 if(CM_CheckFlag(&tmp, CONFIG_FILE_FLAG, CONFIG_FILE_FLAG_LENGTH) == 0)
345 1 {
346 2 CM_LogError(LOG_FILE_FLAG);
347 2 return 0;
348 2 }
349 1
350 1 //读取并检查RS232字段标志
351 1 if(CM_CheckFlag(&tmp, CONFIG_RS232_FLAG, CONFIG_RS232_FLAG_LENGTH) == 0)
352 1 {
353 2 CM_LogError(LOG_RS232_F);
354 2 return 0; //标志错
355 2 }
356 1
357 1 if(CM_ReadRS232Param(&tmp) == 0)
358 1 {
359 2 CM_LogError(LOG_RS232_P);
360 2 return 0; //格式错误
361 2 }
362 1
363 1
364 1 //读取并检查文件名字段标志
C51 COMPILER V7.50 KW_CONFIG 10/12/2007 17:06:01 PAGE 7
365 1 if(CM_CheckFlag(&tmp, CONFIG_NAME_FLAG, CONFIG_NAME_FLAG_LENGTH) == 0)
366 1 {
367 2 CM_LogError(LOG_FILENAME_F);
368 2 return 0; //标志错
369 2 }
370 1
371 1
372 1 if(CM_ReadFileNameParam(&tmp) == 0)
373 1 {
374 2 CM_LogError(LOG_FILENAME_P);
375 2 return 0; //标志错
376 2 }
377 1 CM_SkipNote(&tmp);
378 1
379 1 //读取并检查RTC字段标志
380 1 if(CM_CheckFlag(&tmp, CONFIG_RTC_FLAG, CONFIG_RTC_FLAG_LENGTH) == 0)
381 1 {
382 2 CM_LogError(LOG_RTC_F);
383 2 return 0; //标志错
384 2 }
385 1
386 1 SkipSpace(tmp);
387 1 for(i = 0; i<6; i++) //读取6个字节作为年月日时分秒
388 1 {
389 2 CM_ConfigParameter.RTC_Time[i] = SM_Char2BCD(tmp);
390 2 tmp += 3;
391 2 }
392 1
393 1 SkipSpace(tmp); //读取RTC有效标志
394 1 CM_ConfigParameter.RTC_Valid = Char2Byte(*tmp);
395 1
396 1 if(CM_ConfigParameter.RTC_Valid != 0 && CM_ConfigParameter.RTC_Valid != 1)
397 1 {
398 2 CM_LogError(LOG_RTC_P);
399 2 return 0;
400 2 }
401 1
402 1 if(CM_ConfigParameter.RTC_Valid == 1)
403 1 {
404 2 *tmp = '0'; //修改标志为无效
405 2 NM_WritePages(fp_start_sector); //回写数据
406 2 }
407 1 return 1;
408 1 }
409
410
411
412 /*************************************************************************************
413 Function: CM_SetConfigParameterDefault
414 Description: 设置配置参数为默认参数
415 Called By:
416 Input: N/A
417 Output: N/A
418 Return: void
419 Others: 仅当CM_ReadConfigToParam函数调用识别时才调用本函数
420 *************************************************************************************/
421 void CM_SetConfigParameterDefault()
422 {
423 1 CM_ConfigParameter.RS232_bps = RS232_115200; //默认BPS为115200
424 1 CM_ConfigParameter.RS232_Data = 8; //默认数据8位
425 1 CM_ConfigParameter.RS232_Stop = 1; //默认停止位1
426 1 CM_ConfigParameter.RS232_CH = 'N'; //默认不校验
C51 COMPILER V7.50 KW_CONFIG 10/12/2007 17:06:01 PAGE 8
427 1 CM_ConfigParameter.File_StartLength = 3; //默认文件前缀3个字符
428 1 SM_CpyString(CM_ConfigParameter.File_Start,"DAT", //默认文件前缀"DAT"
429 1 CM_ConfigParameter.File_StartLength);
430 1 CM_ConfigParameter.File_End = CONFIG_FILE_SN; //默认命名方式但序号
431 1 SM_CpyString(CM_ConfigParameter.File_Ext,"TXT", //默认文件扩展名"TXT
432 1 CM_ConfigParameter.File_StartLength);
433 1 CM_ConfigParameter.RTC_Valid = 0; //默认RTC参数无效
434 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2582 ----
CONSTANT SIZE = 735 ----
XDATA SIZE = 26 18
PDATA SIZE = ---- ----
DATA SIZE = ---- 44
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -