|
#define TCP_REQ_LEN ((u16_t)*((u16_t *)TCP_REQ_PTR_LEN)) #define TCP_REQ_DATA_U8 ((u8_t)*((u8_t *)TCP_REQ_PTR_DATA)) #define TCP_REQ_DATA_U16 ((u16_t)*((u16_t *)TCP_REQ_PTR_DATA)) #define TCP_REQ_DATA_U32 ((u32_t)*((u32_t *)TCP_REQ_PTR_DATA)) #define TCP_REQ_DATA_U16A TCP_REQ_DATA_U16 //first 16bit #define TCP_REQ_DATA_U16B ((u16_t)*((u16_t *)(TCP_REQ_PTR_DATA+2)))
c. 定義通用head file #ifdef PLATFORM_MSP //special for MSP 16bit typedef unsigned char u8_t; typedef signed char s8_t; typedef unsigned int u16_t; typedef signed int s16_t; typedef unsigned long u32_t; typedef signed long s32_t; #else //Win32 Linux Unix ---Client 32bit-platform typedef unsigned char u8_t; typedef signed char s8_t; typedef unsigned short u16_t; typedef signed short s16_t; typedef unsigned int u32_t; typedef signed int s32_t; #endif
//packet id define for client/MSP #define PKTID_GENERAL 'G0' #define PKTID_CHANGE_MODE (PKTID_GENERAL+0 ) //change mode between (XXXXserver/ SYSburnserver/ HTTPserver) #define PKTID_DUMP_FLASH (PKTID_GENERAL+1 ) //download ANY datas from any positon in flash- mem Data-Zone .... typedef struct struReqHead_XXX{ u32_t key; // key for security u16_t order; // same as order_code (see above) = PKTID_... u16_t len; }struReqHead;
typedef struct struNetInfo_XXX{ u16_t MyIP[2]; u16_t MasterIP[2]; u16_t SubnetMask[2]; u16_t GatewayIP[2]; }struNetInfo;
//for protocal_support; #define PROTOCAL_SUPPORT 0x0001 #define PROTOCOL_ICMP (PROTOCAL_SUPPORT<<0) #define PROTOCOL_BROADCAST (PROTOCAL_SUPPORT<<1) #define PROTOCAL_FULL_SUPPORT (PROTOCOL_ICMP|PROTOCOL_BROADCAST)
#define TCP_PORT_XXX 4112 #define TCP_PORT_MASTER 5001
(一次傳不了,見(jiàn)下)
//------------------------------------------------------------------------------------
TI-MSP430F149在TCP/IP上的擴(kuò)展(續(xù))
d. 幾個(gè)優(yōu)化: #define SendFrame1() {CopyToFrame8900(&TxFrame1, TxFrame1Size);} #define SendFrame2() {CopyToFrame8900(&TxFrame2, TxFrame2Size);} #define TCPRestartTimer() {TCPTimer = 0;} #define TCPStopTimer() {TCPFlags &= ~TCP_TIMER_RUNNING;} 將CalcChecksum()劃分成兩個(gè), 內(nèi)部代碼做簡(jiǎn)單優(yōu)化(在C-spy中看看匯編就知道了) u16_t CalcChecksum(...) { 最開(kāi)始 u32_t Sum = 0; ...
最后 Sum = (Sum >> 16) + (Sum & 0xffff); // add hi 16 to low 16 Sum += (Sum >> 16); // add carry return ~Sum; }
5. BROADCAST功能支持的擴(kuò)展
6. UDP的擴(kuò)展(很容易的,見(jiàn):http://www.faqs.org/rfcs/rfc768.html)
7. 系統(tǒng)在線升級(jí): 基本流程(直到舊系統(tǒng)擦除前,隨時(shí)可以Cancel) a.模式切換(權(quán)限驗(yàn)證) b.代碼dump(由于接收緩沖區(qū)小,這是最耗時(shí)間的地方,目前12K的新系統(tǒng)代碼dump所需時(shí)間大概15秒) c.代碼驗(yàn)證 d.全部FLASH擦除(除了系統(tǒng)升級(jí)代碼區(qū)和dump區(qū)). e.代碼解析和復(fù)制 f.reboot. #define REBOOT {WDTCTL=0x1000;} //(PUC) is generated see slau049.pdf p146
注:在d和e運(yùn)行其間如果掉電的話,就只有到現(xiàn)場(chǎng)去取下設(shè)備來(lái)JXXX/BSL編程了.
8. 其他
a. 轉(zhuǎn)換程序:將msp430.txt格式的代碼文件轉(zhuǎn)為適合在線系統(tǒng)升級(jí)的數(shù)據(jù)包(編碼前---保護(hù)版權(quán)哦)
|