亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ymodem.c

?? 基于STM32 的IAP升級庫
?? C
字號:
/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
* File Name          : ymodem.c
* Author             : MCD Application Team
* Date First Issued  : 05/21/2007
* Description        : This file provides all the software functions related to
*                      the ymodem protocol.
********************************************************************************
* History:
* 05/21/2007: V0.1 
********************************************************************************
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "common.h"
#include "stm32f10x_flash.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
u8 file_name[FILE_NAME_LENGTH];
u32 FlashDestination = ApplicationAddress; /* Flash user program offset */
u16 PageSize = 0x400;
u32 EraseCounter = 0x0;
u32 NbrOfPage = 0;
FLASH_Status FLASHStatus = FLASH_COMPLETE;
u32 RamSource;
extern u8 tab_1024[1024];

/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name  : Receive_Byte
* Description    : Receive byte from sender
* Input          : - c: Character
*                  - timeout: Timeout
* Output         : None
* Return         : 0: Byte received
*                  -1: Timeout
*******************************************************************************/
static  s32 Receive_Byte (u8 *c, u32 timeout)
{
  while (timeout-- > 0)
  {
    if (SerialKeyPressed(c) == 1)
    {
      return 0;
    }
  }
  return -1;
}

/*******************************************************************************
* Function Name  : Send_Byte
* Description    : Send a byte
* Input          : - c: Character
* Output         : None
* Return         : 0: Byte sent
*******************************************************************************/
static u32 Send_Byte (u8 c)
{
  SerialPutChar(c);
  return 0;
}

/*******************************************************************************
* Function Name  : Receive_Packet
* Description    : Receive a packet from sender
* Input 1        : - data
* Input 2        : - length
* Input 3        : - timeout
* Output         : *length:
*                  0: end of transmission
*                  -1: abort by sender
*                  >0: packet length
* Return         : 0: normally return
*                  -1: timeout or packet error
*                  1: abort by user
*******************************************************************************/
static s32 Receive_Packet (u8 *data, s32 *length, u32 timeout)
{
  u16 i, packet_size;
  u8 c;
  *length = 0;
  if (Receive_Byte(&c, timeout) != 0)
  {
    return -1;
  }
  switch (c)
  {
  case SOH:
    packet_size = PACKET_SIZE;
    break;
  case STX:
    packet_size = PACKET_1K_SIZE;
    break;
  case EOT:
    return 0;
  case CA:
    if ((Receive_Byte(&c, timeout) == 0) && (c == CA))
    {
      *length = -1;
      return 0;
    }
    else
    {
      return -1;
    }
  case ABORT1:
  case ABORT2:
    return 1;
  default:
    return -1;
  }
  *data = c;
  for (i = 1; i < (packet_size + PACKET_OVERHEAD); i ++)
  {
    if (Receive_Byte(data + i, timeout) != 0)
    {
      return -1;
    }
  }
  if (data[PACKET_SEQNO_INDEX] != ((data[PACKET_SEQNO_COMP_INDEX] ^ 0xff) & 0xff))
  {
    return -1;
  }
  *length = packet_size;
  return 0;
}
/*******************************************************************************
* Function Name  : Ymodem_Receive
* Description    : Receive a file using the ymodem protocol
* Input          : Address of the first byte
* Output         : None
* Return         : The size of the file
*******************************************************************************/
s32 Ymodem_Receive (u8 *buf)
{
  u8 packet_data[PACKET_1K_SIZE + PACKET_OVERHEAD], file_size[FILE_SIZE_LENGTH], *file_ptr, *buf_ptr;
  s32 i, j, packet_length, session_done, file_done, packets_received, errors, session_begin, size = 0;

  for (session_done = 0, errors = 0, session_begin = 0; ;)
  {
    for (packets_received = 0, file_done = 0, buf_ptr = buf; ;)
    {
      switch (Receive_Packet(packet_data, &packet_length, NAK_TIMEOUT))
      {
        case 0:
          errors = 0;
          switch (packet_length)
          {
            /* Abort by sender */
			case - 1:    
              Send_Byte(ACK);
              return 0;
			/* End of transmission */
            case 0:     
              Send_Byte(ACK);
              file_done = 1;
              break;
			/* Normal packet */
            default:    
            if ((packet_data[PACKET_SEQNO_INDEX] & 0xff) != (packets_received & 0xff))
            {
              Send_Byte(NAK);
            }
            else
            {
              if (packets_received == 0)   
              {/* Filename packet */
                if (packet_data[PACKET_HEADER] != 0)    
                {/* Filename packet has valid data */
                  for (i = 0, file_ptr = packet_data + PACKET_HEADER; (*file_ptr != 0) && (i < FILE_NAME_LENGTH);)
                  {
                    file_name[i++] = *file_ptr++;
                  }
                  file_name[i++] = '\0';
                  for (i = 0, file_ptr ++; (*file_ptr != ' ') && (i < FILE_SIZE_LENGTH);)
                  {
                    file_size[i++] = *file_ptr++;
                  }
                  file_size[i++] = '\0';
                  Str2Int(file_size, &size);
                  /* Test the size of the image to be sent */
                  /* Image size is greater than Flash size */
				  if (size > 0x0801FFFF) 
                  {
                    /* End session */
                    Send_Byte(CA);
                    Send_Byte(CA);
                    return -1;
                  }
                  /* Erase the needed pages where the user application will be loaded */
                  /* Define the number of page to be erased */
                  NbrOfPage = FLASH_PagesMask(size);
                  /* Erase the FLASH pages */
                  for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
                  {
                    FLASHStatus = FLASH_ErasePage(FlashDestination + (PageSize * EraseCounter));
                  }
                  Send_Byte(ACK);
                  Send_Byte(CRC16);
                }
				/* Filename packet is empty, end session */
                else   
                {
                  Send_Byte(ACK);
                  file_done = 1;
                  session_done = 1;
                  break;
                }
              }
			  /* Data packet */
              else    
              {
                memcpy(buf_ptr, packet_data + PACKET_HEADER, packet_length);
                RamSource =(u32)buf;
                for (j = 0;(j < packet_length) && (FlashDestination <  ApplicationAddress + size);j += 4)
                {
                  /* Program the data received into STM32F10x Flash */
                  FLASH_ProgramWord(FlashDestination, *(u32*)RamSource);
                  if (*(u32*)FlashDestination != *(u32*)RamSource)
                  {
                    /* End session */
                    Send_Byte(CA);
                    Send_Byte(CA);
                    return -2;
                  }
                  FlashDestination += 4;
                  RamSource += 4;
                }
                Send_Byte(ACK);
              }
              packets_received ++;
              session_begin = 1;
            }
          }
          break;
          case 1:
            Send_Byte(CA);
            Send_Byte(CA);
            return -3;
          default:
          if (session_begin > 0)
          {
            errors ++;
          }
          if (errors > MAX_ERRORS)
          {
            Send_Byte(CA);
            Send_Byte(CA);
            return 0;
          }
          Send_Byte(CRC16);
          break;
      }
      if (file_done != 0)
      {
        break;
      }
    }
    if (session_done != 0)
    {
      break;
    }
  }
  return (s32)size;
}

/*******************(C)COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久网这里都是精品| 亚洲图片欧美综合| 不卡一卡二卡三乱码免费网站| 精品视频一区三区九区| 亚洲成人免费av| 亚洲一区二区视频在线观看| 国产蜜臀97一区二区三区| 亚洲国产aⅴ天堂久久| 在线观看91精品国产入口| 国产最新精品免费| 99国产精品久久久久| 国产精品乱人伦| 国产精品成人免费在线| 一区在线中文字幕| 亚洲欧洲中文日韩久久av乱码| 国产精品久久久久久久岛一牛影视| 欧美高清在线精品一区| 亚洲女同ⅹxx女同tv| 亚洲成人在线免费| 久久精品国产**网站演员| 国产一区二区三区精品视频| 色av一区二区| 欧美日韩国产美女| 精品999在线播放| 国产精品婷婷午夜在线观看| 一区二区三区免费在线观看| 日韩国产欧美三级| 国产成人一区在线| 在线亚洲+欧美+日本专区| 欧美一区二区精品久久911| 久久夜色精品国产噜噜av| 日韩毛片视频在线看| 日韩电影免费在线观看网站| 国产另类ts人妖一区二区| 日本高清不卡视频| 26uuu久久天堂性欧美| 亚洲欧美日韩系列| 国产一区视频导航| 精品视频免费在线| 欧美国产成人在线| 日韩中文字幕一区二区三区| 成人午夜视频网站| 日韩丝袜美女视频| 一区二区三区小说| 国产精品白丝jk黑袜喷水| 欧美日韩精品久久久| 国产农村妇女精品| 日本欧美肥老太交大片| 91尤物视频在线观看| 久久丝袜美腿综合| 全国精品久久少妇| 欧美在线视频日韩| 国产精品久久久一区麻豆最新章节| 日韩高清在线不卡| 91视频精品在这里| 久久精品欧美日韩精品| 麻豆国产一区二区| 欧美日韩中字一区| 亚洲三级在线免费观看| 成人晚上爱看视频| 欧美成人aa大片| 亚洲bt欧美bt精品| 欧美色综合影院| 综合久久久久综合| 成人黄色免费短视频| 亚洲精品一区二区三区蜜桃下载 | 在线观看日韩电影| 欧美v亚洲v综合ⅴ国产v| 亚洲丶国产丶欧美一区二区三区| 粉嫩一区二区三区性色av| 欧美精品一区二区三区一线天视频| 亚洲最大色网站| 91豆麻精品91久久久久久| 亚洲婷婷在线视频| 成人激情图片网| 一区二区三区中文在线观看| 国产精品一级片在线观看| 久久久噜噜噜久噜久久综合| 精品一二三四在线| 国产亚洲成年网址在线观看| 国产电影一区在线| 国产亚洲精品aa| 岛国精品一区二区| 亚洲欧美日韩国产中文在线| 欧美日韩一级黄| 蜜桃视频免费观看一区| 久久综合国产精品| 成人激情开心网| 亚洲一二三四在线观看| 欧美一激情一区二区三区| 国内外成人在线| 国产精品久久久久久久岛一牛影视 | 欧美大片拔萝卜| 韩国视频一区二区| 中文字幕精品一区二区三区精品| 不卡电影一区二区三区| 亚洲精品视频一区| 日韩亚洲欧美中文三级| 国产成人免费视频网站高清观看视频 | 狠狠v欧美v日韩v亚洲ⅴ| 国产欧美在线观看一区| 99久久er热在这里只有精品66| 一区二区三区欧美激情| 日韩免费看的电影| 99精品视频一区二区三区| 亚洲国产aⅴ天堂久久| 欧美精品一区二区精品网| av激情成人网| 日日摸夜夜添夜夜添亚洲女人| 久久一夜天堂av一区二区三区| 成人黄色电影在线| 日本亚洲最大的色成网站www| 国产喂奶挤奶一区二区三区| 91免费版在线看| 久久国产尿小便嘘嘘| 亚洲人123区| 精品少妇一区二区三区免费观看 | 色哟哟日韩精品| 日本伊人精品一区二区三区观看方式| 久久久www免费人成精品| 日本高清视频一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 色先锋aa成人| 国产精品香蕉一区二区三区| 天天综合色天天综合| 中文文精品字幕一区二区| 91精品在线麻豆| 日本道免费精品一区二区三区| 国产一区 二区 三区一级| 日本少妇一区二区| 亚洲一区二区欧美| 国产精品美女一区二区在线观看| 日韩视频免费直播| 欧美日韩一区高清| 91久久香蕉国产日韩欧美9色| 国产黄色精品网站| 韩国v欧美v日本v亚洲v| 蜜臀国产一区二区三区在线播放| 亚洲一区av在线| 亚洲精品欧美二区三区中文字幕| 日本一区二区免费在线观看视频| 日韩精品一区二区在线观看| 欧美视频在线不卡| 在线免费观看日韩欧美| 色综合天天天天做夜夜夜夜做| 99视频精品免费视频| 韩国三级中文字幕hd久久精品| 日本不卡1234视频| 青青草原综合久久大伊人精品| 天天色天天操综合| 午夜久久久影院| 亚洲成人中文在线| 亚洲成av人片| 日韩精品久久理论片| 日韩国产精品大片| 毛片一区二区三区| 日韩高清不卡在线| 麻豆国产精品官网| 国产在线精品一区在线观看麻豆| 国产自产v一区二区三区c| 国产一二精品视频| 国产.欧美.日韩| 色婷婷久久久综合中文字幕| 在线观看免费亚洲| 欧美男同性恋视频网站| 日韩片之四级片| 久久久国产精华| 日韩毛片视频在线看| 亚洲精品高清视频在线观看| 亚洲成精国产精品女| 五月婷婷另类国产| 久国产精品韩国三级视频| 国产精品一区在线观看乱码| 97精品国产97久久久久久久久久久久 | 日韩美女视频一区二区| 一区二区在线观看免费| 日韩黄色免费电影| 国产98色在线|日韩| 色诱亚洲精品久久久久久| 在线不卡a资源高清| 久久婷婷久久一区二区三区| 国产精品网站导航| 视频一区二区国产| 成人v精品蜜桃久久一区| 欧美无砖砖区免费| 亚洲精品一区二区三区99| 成人小视频在线| www.亚洲激情.com| 欧美三区在线观看| 久久综合九色欧美综合狠狠| 国产精品乱码人人做人人爱 | 日韩午夜激情视频| 日本一区二区三区在线观看| 亚洲一区中文在线| 国产福利电影一区二区三区| 欧美在线一二三| 国产精品久久夜| 麻豆国产欧美日韩综合精品二区| 91欧美激情一区二区三区成人| 欧美一区二区免费视频|