91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

帶移植說明的xmodem源碼(STM32) //移植時,需要修改該函數 //串口收發,實用查詢方式。 void xm_port_write(uint8 *ch) { while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET); USART1->DR = *ch; } //串口接收函數,需要移植 sint8 xm_port_read(uint8 *ch) { if(USART_GetFlagStatus(USART1, USART_IT_RXNE) != RESET) { *ch = USART_ReceiveData(USART1); return 1; } return 0; } //在定時中斷里調用該函數 //定時時間5ms void xm_timer(void) { xmodem_timeout++; }

資源截圖

代碼片段和文件信息



#include?“xmodem/xmodem.h“

static?sint32?last_error?=?0;
uint16?xmodem_timeout?=?0;

/****************Portting?Start?*******************/


void?xm_outbyte(uint8?trychar)
{
uint8?buf[2];
buf[0]?=?trychar;
xm_port_write(buf);
}

void?xm_timer(void)
{
xmodem_timeout++;
}

uint8?xm_inbyte(uint32?time_out)
{
uint8?ch;

last_error?=?0;

//超時管理
xmodem_timeout?=?0;
while(xmodem_timeout? {
if(xm_port_read(&ch)?==?1)
return?ch;
}

last_error?=?1;
return?ch;
}

void?*xm_memcpy(void?*destaddr?void?const?*srcaddr?sint32?len)
{
?? uint8?*dest?=?destaddr;
?? uint8?const?*src?=?srcaddr;

?? while(len--?>?0)
??? *dest++?=?*src++?;
?? return?destaddr;
}

void?*xm_memset(void?*src?sint32?c?sint32?count)
{
?uint8?*tmpsrc=(uint8*)src;
?while(count--)
?? *tmpsrc++?=(uint8)c;
?return?src;
}

/****************Portting?End*******************/
static?sint32?xm_check(sint32?crc?const?uint8?*buf?sint32?sz)
{
if?(crc)?
{
uint16?crc?=?xm_crc16_ccitt(buf?sz);
uint16?tcrc?=?(buf[sz]<<8)+buf[sz+1];
if?(crc?==?tcrc)
return?1;
}
else?
{
sint32?i;
uint8?cks?=?0;
for?(i?=?0;?i? {
cks?+=?buf[i];
}
if?(cks?==?buf[sz])
return?1;
}

return?0;
}

static?void?xm_flushinput(void)
{
//xm_inbyte(0);
;
}

void?xm_disp(sint8?*str)
{
while(*str)
{
xm_outbyte(*str++);
}
}


uint8?xm_buf[1030];?/*?1024?for?XModem?1k?+?3?head?chars?+?2?crc?+?nul?*/
sint32?xm_receive(uint8?*dest?sint32?destsz)
{

uint8?*p;
sint32?bufsz?crc?=?0;
uint8?trychar?=?‘C‘;
uint8?packetno?=?1;
sint32?i?c?len?=?0;
sint32?retry?retrans?=?MAXRETRANS;

xm_disp(“\n\rStart?Xmodem?Receive!\n\r“);
for(;;)?
{
for(?retry?=?0;?retry? {
if?(trychar)?
xm_outbyte(trychar);
c?=?xm_inbyte((XM_DLY_1S)<<1);
if?(last_error?==?0)?
{
switch?(c)?
{
case?XM_SOH:
bufsz?=?128;
goto?start_recv;
case?XM_STX:
bufsz?=?1024;
goto?start_recv;
case?XM_EOT:
xm_flushinput();
xm_outbyte(XM_ACK);
return?len;?/*?normal?end?*/
case?XM_CAN:
c?=?xm_inbyte(XM_DLY_1S);

if?(c?==?XM_CAN)?
{
xm_flushinput();
xm_outbyte(XM_ACK);
return?-1;?/*?canceled?by?remote?*/
}
break;
default:
break;
}
}
}
if?(trychar?==?‘C‘)?
{?
trychar?=?XM_NAK;?
continue;?
}
xm_flushinput();
xm_outbyte(XM_CAN);
xm_outbyte(XM_CAN);
xm_outbyte(XM_CAN);
return?-2;?/*?sync?error?*/

start_recv:
if?(trychar?==?‘C‘)?crc?=?1;
trychar?=?0;
p?=?xm_buf;
*p++?=?c;
for?(i?=?0;??i? {
c?=?xm_inbyte(XM_DLY_1S);

if?(last_error?!=?0)?
goto?reject;
*p++?=?c;
}

if?(xm_buf[1]?==?(uint8)(~xm_buf[2])?&&?
(xm_buf[1]?==?packetno?||?xm_buf[1]?==?(uint8)packetno-1)?&&
xm_check(crc?&xm_buf[3]?bufsz))?
{
if?(xm_buf[1]?==?packetno)
{
sint32?count?=?destsz?-?len;
if?(count?>?bufsz)?
count?=?bufsz;
if?(count?>?0)?
{

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????5862??2014-01-07?21:45??XMODEM\xmodem.c

?????文件????????839??2014-01-07?21:44??XMODEM\xmodem.h

?????文件???????2204??2013-12-24?23:50??XMODEM\xmodem_crc16.c

?????文件????????514??2014-01-07?21:44??XMODEM\xmodem_hw.c

?????目錄??????????0??2014-01-07?21:45??XMODEM

-----------?---------??----------?-----??----

?????????????????9419????????????????????5


評論

共有 條評論