標籤:檔案 資料 2014 io 代碼 時間
/****************************************************************Copyright (c) 2014,TianYuan*All rights reserved.**檔案名稱: standard.h*檔案標識: 編程規範範例程式碼**目前的版本:V1.0*wuyq *完成日期:20140709**修改記錄1: //修改記錄,包括修改日期、版本號碼、修改人及修改內容等*修改日期 版本號碼 修改人 修改內容* --------------------------------------------------------------------------------------------------* 20140709 V1.0 wuyq 建立******************************************************************/#ifndef _STANDARD_H__#define _STANDARD_H__/*重定義一些基礎資料型別 (Elementary Data Type)*/typedef char s8;typedef unsigned char u8;typedef signed short s16;typedef unsigned short u16;typedef int s32;typedef unsigned int u32;typedef float f32;typedef signed long long s64;typedef unsigned long long u64;typedef enum {FALSE =0, TRUE =!FALSE} bool; typedef bool BOOL;/* 訊息頭 */typedef struct { u16 u16MsgType; /* 訊息類型*/ u16 u16MsgLength; /*有效訊息資料長度*/ u8 u8TransType;/*傳輸通道0:網路 1:串口*/ u8 u8Reserved[3];/*對齊*/}STRU_MSG_HEAD;/* 時間資訊*/typedef struct { u16 u16Year;/*年*/ u16 u16Month;/*月*/ u8 u8Day;/*日*/ u8 u8Hour;/*時*/ u8 u8Minute;/*分*/ u8 u8Second;/*秒*/}STRU_TIME_INFO;/* MCM->Main 查詢系統資訊*/struct stru_machine_info_req { STRU_MSG_HEAD struMsgHeader;/*訊息頭*/};/* Main->MCM 反饋系統資訊*/struct stru_machine_info_rsp { STRU_MSG_HEAD struMsgHeader;/*訊息頭*/ f32 f32Temp;/*當前採樣溫度*/ f32 f32Vol;/*當前採樣電壓*/ f32 f32CpuFreq;/*Cpu頻率*/ u32 u32FreeMem;/*剩餘記憶體*/ u32 u32FreeDisk;/*剩餘FLASH空間*/};/* Main向MCM返回軟體升級結果 */struct stru_software_update_rsp { STRU_MSG_HEAD struMsgHeader; u8 b8Successful;/*是否升級成功*/ u8 u8Reserved[3];/*字對齊,保留*/};//函數頭部的可採用如下的樣式/********************************************************************** *功能描述: *輸入參數: *輸出參數: *傳回值: *其它說明: *修改記錄1: //修改記錄,包括修改日期、版本號碼、修改人及修改內容等 *修改日期 版本號碼 修改人 修改內容 * -------------------------------------------------------------------------------------------------- * 20140709 V1.0 wuyq 建立 ***********************************************************************/#endif
/***********************************************************************Copyright (c) 2014,TianYuan*All rights reserved.** 檔案名稱: UnitTest.c* 檔案標識:無* 內容摘要:協議及單元測試範例程式碼* 其它說明:無* 目前的版本: V1.0* 作 者: wuyq* 完成日期: 20140709**修改記錄1: //修改記錄,包括修改日期、版本號碼、修改人及修改內容等*修改日期 版本號碼 修改人 修改內容* --------------------------------------------------------------------------------------------------* 20140709 V1.0 wuyq 建立**********************************************************************/#include <stdio.h>#include <string.h> // 重定義資料類型typedef unsigned char UINT8;typedef unsigned short int UINT16;typedef unsigned int UINT32;typedef signed int INT32; // 訊息頭結構typedef struct{ UINT16 iReserve1; UINT16 iReserve2; UINT16 iReserve3; UINT16 iReserve4;}MsgHead_T; // 訊息結構體(包含訊息頭和訊息體)typedef struct{ MsgHead_T MsgHead; // 訊息頭 UINT32 iOperType; // 操作類型, 操作類型只能為1或2 UINT8 szUserNumber[30]; // 使用者號碼 UINT8 szOperTime[20]; // 操作時間, 格式為: yyyymmdd UINT32 iReserve1; // 保留欄位1 UINT8 szReserve2[50]; // 保留欄位2}UserReqMsg_T; // 函式宣告INT32 ProcUserReqMsg(UserReqMsg_T *ptUserReqMsg);INT32 main(); /*********************************************************************** 功能描述:主函數* 輸入參數:無* 輸出參數:無* 傳回值: 0-執行完畢* 其它說明:無* 修改日期 版本號碼 修改人 修改內容* --------------------------------------------------------------------------------------------------* 20140507 V1.0 zzx 建立***********************************************************************/INT32 main(){ UINT8 iRetVal = 0; UINT32 iOperType = 0; // 操作類型 UINT8 szUserNumber[30] = {0}; // 使用者號碼 UINT8 szOperTime[10] = {0}; // 操作時間, 格式為: yyyymmdd UserReqMsg_T tUserReqMsg = {0}; // 請求訊息 // 對訊息頭部進行賦值 tUserReqMsg.MsgHead.iReserve1 = 1; tUserReqMsg.MsgHead.iReserve2 = 2; tUserReqMsg.MsgHead.iReserve3 = 3; tUserReqMsg.MsgHead.iReserve4 = 4; // 讀入具體訊息欄位的值 printf("操作類型: \n"); scanf("%d", &iOperType); printf("使用者號碼: \n"); scanf("%s", szUserNumber); printf("操作時間: \n"); scanf("%s", szOperTime); // 對具體訊息欄位進行賦值(保留欄位可不賦值) tUserReqMsg.iOperType = iOperType; strncpy(tUserReqMsg.szUserNumber, szUserNumber, strlen(szUserNumber));// 擷取號碼, 用strncpy代替strcpy strncpy(tUserReqMsg.szOperTime, szOperTime, strlen(szOperTime)); // 擷取時間, 用strncpy代替strcpy // 對訊息體的欄位進行異常判斷 iRetVal = ProcUserReqMsg(&tUserReqMsg); // 注意: 傳遞參數的時候要加上& if (iRetVal == 0) // 函數執行正確 { // 列印訊息欄位內容 printf("The user request message is: iOperType=%d, szUserNumber=%s, szOperTime=%s.\n", tUserReqMsg.iOperType, tUserReqMsg.szUserNumber, tUserReqMsg.szOperTime); return 0; } else // 列印異常訊息 { printf("Some content of the user request message is wrong, please check!\n"); return -1; }} /*********************************************************************** 功能描述:對訊息體的欄位進行異常判斷* 輸入參數: ptUserReqMsg-使用者請求訊息* 輸出參數:無* 傳回值: 0-成功 其它-失敗* 其它說明:無* 修改日期 版本號碼 修改人 修改內容* --------------------------------------------------------------------------------------------------* 20140507 V1.0 zzx 建立***********************************************************************/INT32 ProcUserReqMsg(UserReqMsg_T *ptUserReqMsg){ INT32 iRetValue = 0; // 對輸入參數進行異常判斷 if (ptUserReqMsg == NULL) { printf("ProcUserReqMsg(...): input parameter(ptUserReqMsg) is NULL.\n"); return -1; } // 對訊息體欄位進行異常判斷 if ((ptUserReqMsg->iOperType != 1) && (ptUserReqMsg->iOperType != 2)) // 操作類型只能為1或2, 其它為資料異常 { printf("ProcUserReqMsg(...): the iOperType is wrong, iOperType=%d.\n", ptUserReqMsg->iOperType); return -2; } if (strlen(ptUserReqMsg->szUserNumber) != 8) // 使用者號碼異常, 長度8位才正確 { printf("ProcUserReqMsg(...): the szUserNumber is wrong.\n"); return -3; } if (strlen(ptUserReqMsg->szOperTime) != 8) // 操作時間異常, 長度8位才正確 { printf("ProcUserReqMsg(...): the szOperTime is wrong.\n"); return -4; } return 0;}