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

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

?? rs.c

?? Reed-Solomoon 糾錯算法C語言的實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
//****************************************************************************
//
//  Copyright (C) SEIKO EPSON CORP. 2007
//
//  File name: rs.c
//    This is RS eror corrctor calls
//
//  Revision history
//      2008.05.06        1st version
//
//****************************************************************************
#include "rs.h"

extern void sys_Printf(char *fmt, ...);

//-------------------------------------------------------
// variable declaration
unsigned int gexp[1024];
unsigned int glog[1024];

//-------------------------------------------------------
// static function declaration
static void One_Error_Correction(unsigned int ulCnt, unsigned int *Syndrome, 
                                 unsigned int *location, unsigned char *codeword);
static void Two_Error_Correction(unsigned int ulCnt, unsigned int *Syndrome, 
                                 unsigned int *location, unsigned char *codeword);
static void Three_Error_Correction(unsigned int ulCnt, unsigned int *Syndrome, 
                                 unsigned int *location, unsigned char *codeword);
static void Four_Error_Correction(unsigned int ulCnt, unsigned int *Syndrome, 
                                 unsigned int *location, unsigned char *codeword);
static unsigned int Find_Location (unsigned int ulCnt, unsigned int *Sigma, unsigned int *Location);

//---------------------------------------------------------------------------------
//      Function name  :   rs_ErrCorrect
//      Description    :   rs error corrector
//      Parameter      :   unsigned int ulCnt
//                     :   unsigned char *pucSrc
//                     :   unsigned char *pucSyndrome
//      Return value   :   int
//--------------------------------------------------------------------------------- 
int rs_ErrCorrect(unsigned int ulCnt, unsigned char *pucSrc, unsigned char *pucSyndrome)
{
  unsigned int  i;

  unsigned int  Syndrome[10];
  unsigned int  number;
  unsigned int  location[4];

  unsigned int  det0[4];
  unsigned int  det1[4];
  unsigned int  ma0;
  unsigned int  ma1;
  unsigned int  ma[6];
  unsigned int  mb[4];
  unsigned int  dets[16];
  unsigned int  mul[6];
  unsigned int  sigma[4];

  init_gtbl();

  Syndrome[9] = ((pucSyndrome[9] << 2) & 0x3ff) | (pucSyndrome[8] >> 6);
  Syndrome[8] = ((pucSyndrome[8] << 4) & 0x3ff) | (pucSyndrome[7] >> 4);
  Syndrome[7] = ((pucSyndrome[7] << 6) & 0x3ff) | (pucSyndrome[6] >> 2);
  Syndrome[6] = ((pucSyndrome[6] << 8) & 0x3ff) | pucSyndrome[5];
  Syndrome[5] = ((pucSyndrome[4] << 2) & 0x3ff) | (pucSyndrome[3] >> 6);
  Syndrome[4] = ((pucSyndrome[3] << 4) & 0x3ff) | (pucSyndrome[2] >> 4);
  Syndrome[3] = ((pucSyndrome[2] << 6) & 0x3ff) | (pucSyndrome[1] >> 2);
  Syndrome[2] = ((pucSyndrome[1] << 8) & 0x3ff) | pucSyndrome[0];

  for (i=0; i<8; i++) Syndrome[i] = Syndrome[i+2];

  i = Syndrome[0] | Syndrome[1] | Syndrome[2] | Syndrome[3] |
      Syndrome[4] | Syndrome[5] | Syndrome[6] | Syndrome[7];
  
  if (i==0)
    return 0;

  // Starting Error Correction
  number   = 1;
  ma[0] = DetMA4(Syndrome);
  if (ma[0] != 0) {
    mb[0] = DetMB40(Syndrome);
    mb[1] = DetMB41(Syndrome);
    mb[2] = DetMB42(Syndrome);
    mb[3] = DetMB43(Syndrome);
 
    sigma[3] = gdiv(ma[0], mb[0]);
    sigma[2] = gdiv(ma[0], mb[1]);
    sigma[1] = gdiv(ma[0], mb[2]);
    sigma[0] = gdiv(ma[0], mb[3]);
    
    number = Find_Location(ulCnt, sigma, location);
//    if (number != 4) printf("Error\n");
  }else {
    ma[0] = DetMA30(Syndrome);
    ma[1] = DetMA31(Syndrome);
    ma[2] = DetMA32(Syndrome);
    ma[3] = DetMA33(Syndrome);
     
    if ((ma[0] != 0) | (ma[1] != 0) |
        (ma[2] != 0) | (ma[3] != 0)) {
      sigma[3] = 0;
      if (ma[0] != 0) {
        mb[0] = DetMB300(Syndrome);
        mb[1] = DetMB301(Syndrome);
        mb[2] = DetMB302(Syndrome);
       
        sigma[2] = gdiv(ma[0], mb[0]);
        sigma[1] = gdiv(ma[0], mb[1]);
        sigma[0] = gdiv(ma[0], mb[2]);
      } else if (ma[1] != 0) {
        mb[0] = DetMB310(Syndrome);
        mb[1] = DetMB311(Syndrome);
        mb[2] = DetMB312(Syndrome);
       
        sigma[2] = gdiv(ma[1], mb[0]);
        sigma[1] = gdiv(ma[1], mb[1]);
        sigma[0] = gdiv(ma[1], mb[2]);
      } else if (ma[2] != 0) {
        mb[0] = DetMB320(Syndrome);
        mb[1] = DetMB321(Syndrome);
        mb[2] = DetMB322(Syndrome);
       
        sigma[2] = gdiv(ma[2], mb[0]);
        sigma[1] = gdiv(ma[2], mb[1]);
        sigma[0] = gdiv(ma[2], mb[2]);
      } else if (ma[3] != 0) {
        mb[0] = DetMB330(Syndrome);
        mb[1] = DetMB331(Syndrome);
        mb[2] = DetMB332(Syndrome);
       
        sigma[2] = gdiv(ma[3], mb[0]);
        sigma[1] = gdiv(ma[3], mb[1]);
        sigma[0] = gdiv(ma[3], mb[2]);
      }
      
      number = Find_Location(ulCnt, sigma, location);
//      if (number != 3) printf("Error\n");
    } else {
      ma[0] = DetMA20(Syndrome);
      ma[1] = DetMA21(Syndrome);
      ma[2] = DetMA22(Syndrome);
      ma[3] = DetMA23(Syndrome);
      ma[4] = DetMA24(Syndrome);
      ma[5] = DetMA25(Syndrome);
 
      if ((ma[0] != 0) || (ma[1] != 0) || (ma[2] != 0) ||
          (ma[3] != 0) || (ma[4] != 0) || (ma[5] != 0)) {
        sigma[3] = 0;
        sigma[2] = 0;
        if (ma[0] != 0) {
          mb[0] = DetMB200(Syndrome);
          mb[1] = DetMB201(Syndrome);
          sigma[1] = gdiv(ma[0], mb[0]);
          sigma[0] = gdiv(ma[0], mb[1]);
        }else if (ma[1] != 0) {
          mb[0] = DetMB210(Syndrome);
          mb[1] = DetMB211(Syndrome);
          sigma[1] = gdiv(ma[1], mb[0]);
          sigma[0] = gdiv(ma[1], mb[1]);
        }else if (ma[2] != 0) {
          mb[0] = DetMB220(Syndrome);
          mb[1] = DetMB221(Syndrome);
          sigma[1] = gdiv(ma[2], mb[0]);
          sigma[0] = gdiv(ma[2], mb[1]);
        }else if (ma[3] != 0) {
          mb[0] = DetMB230(Syndrome);
          mb[1] = DetMB231(Syndrome);
          sigma[1] = gdiv(ma[3], mb[0]);
          sigma[0] = gdiv(ma[3], mb[1]);
        }else if (ma[4] != 0) {
 
          mb[0] = DetMB240(Syndrome);
          mb[1] = DetMB241(Syndrome);
          sigma[1] = gdiv(ma[4], mb[0]);
          sigma[0] = gdiv(ma[4], mb[1]);
        }else if (ma[5] != 0) {
          mb[0] = DetMB250(Syndrome);
          mb[1] = DetMB251(Syndrome);
          sigma[1] = gdiv(ma[5], mb[0]);
          sigma[0] = gdiv(ma[5], mb[1]);
        }
        number = Find_Location(ulCnt, sigma, location);
//        if (number != 2) printf("Error\n");
      } else{
        number = 1;
        location[0] = ulCnt+8-glog[gdiv(Syndrome[3], Syndrome[4])];
      }
    }
  }

  switch (number) {
    case 1:{
      sys_Printf("\nError Data[0] = 0x%2x, Location = %d", pucSrc[location[0]],location[0]); 

      One_Error_Correction(ulCnt, Syndrome, location, pucSrc);

      sys_Printf("\nCorrect Data      = 0x%x", pucSrc[location[0]]); 
      break;
    }
 
    case 2:{
      sys_Printf("\nError Data[0] = 0x%2x, Location = %d", pucSrc[location[0]],location[0]); 
      sys_Printf("\nError Data[1] = 0x%2x, Location = %d", pucSrc[location[1]],location[1]); 

      Two_Error_Correction(ulCnt, Syndrome, location, pucSrc);
      if (location[0] < ulCnt) 
        sys_Printf("\nCorrect Data[0]   = 0x%x", pucSrc[location[0]]); 
      if (location[1] < ulCnt) 
        sys_Printf("\nCorrect Data[1]   = 0x%x", pucSrc[location[1]]); 
     break;
    }
 
    case 3:{
      sys_Printf("\nError Data[0] = 0x%2x, Location = %d", pucSrc[location[0]],location[0]); 
      sys_Printf("\nError Data[1] = 0x%2x, Location = %d", pucSrc[location[1]],location[1]); 
      sys_Printf("\nError Data[2] = 0x%2x, Location = %d", pucSrc[location[2]],location[2]); 
        
      Three_Error_Correction(ulCnt, Syndrome, location, pucSrc);
      
      if (location[0] < ulCnt) 
        sys_Printf("\nCorrect Data[0]   = 0x%x", pucSrc[location[0]]); 
      if (location[1] < ulCnt) 
        sys_Printf("\nCorrect Data[1]   = 0x%x", pucSrc[location[1]]); 
      if (location[2] < ulCnt) 
        sys_Printf("\nCorrect Data[2]   = 0x%x", pucSrc[location[2]]); 
      break;
    }
 
    case 4:{
      sys_Printf("\nError Data[0] = 0x%2x, Location = %d", pucSrc[location[0]],location[0]); 
      sys_Printf("\nError Data[1] = 0x%2x, Location = %d", pucSrc[location[1]],location[1]); 
      sys_Printf("\nError Data[2] = 0x%2x, Location = %d", pucSrc[location[2]],location[2]); 
      sys_Printf("\nError Data[3] = 0x%2x, Location = %d", pucSrc[location[3]],location[3]); 
 
      Four_Error_Correction(ulCnt, Syndrome, location, pucSrc);

      if (location[0] < ulCnt) 
        sys_Printf("\nCorrect Data[0]   = 0x%x", pucSrc[location[0]]); 
      if (location[1] < ulCnt) 
        sys_Printf("\nCorrect Data[1]   = 0x%x", pucSrc[location[1]]); 
      if (location[2] < ulCnt) 
        sys_Printf("\nCorrect Data[2]   = 0x%x", pucSrc[location[2]]); 
      if (location[3] < ulCnt) 
        sys_Printf("\nCorrect Data[3]   = 0x%x", pucSrc[location[3]]); 
      break;
    }
  }
}


//---------------------------------------------------------------------------------
//      Function name  :   init_gtbl
//      Description    :   initialize table
//      Parameter      :   NULL
//      Return value   :   NULL
//--------------------------------------------------------------------------------- 
void init_gtbl(void)
{
  unsigned int i;
  unsigned int p0, p1, p2, p3, p4, p5, p6, p7, p8, p9;
  unsigned int p9_tmp;

  gexp[0] = 0;
  gexp[1] = 1;

  /* x^10 + x^3 + 1 */
  p0 = 1;
  p1 = p2 = p3 = p4 = p5 = p6 = p7 = p8 = p9 = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美激情四射| 欧美精品123区| 亚洲素人一区二区| 日韩一卡二卡三卡国产欧美| 91久久香蕉国产日韩欧美9色| 另类小说色综合网站| 夜夜夜精品看看| 国产精品妹子av| 久久久久国产精品麻豆| 91麻豆精品国产91久久久使用方法| 日本韩国欧美三级| 久久新电视剧免费观看| 久久蜜桃一区二区| 午夜私人影院久久久久| 亚洲综合视频在线| 亚洲国产精品精华液网站| 亚洲第一电影网| 男男成人高潮片免费网站| 亚洲第一福利视频在线| 91美女在线观看| 色综合天天视频在线观看| 色婷婷av一区二区三区之一色屋| 久久日一线二线三线suv| 日韩和欧美的一区| 国产麻豆精品theporn| 国产精品1024久久| caoporen国产精品视频| 91在线一区二区三区| 欧美日韩精品欧美日韩精品一综合| 日韩一卡二卡三卡四卡| 日本在线观看不卡视频| 懂色一区二区三区免费观看| 92国产精品观看| 最新日韩av在线| 国产一区二区三区最好精华液| 欧美在线制服丝袜| 日韩亚洲欧美一区| 人妖欧美一区二区| 91精品国产一区二区三区蜜臀| 国产欧美一区二区三区沐欲| 亚洲综合区在线| 在线精品视频免费播放| 一区二区在线观看视频 | 奇米四色…亚洲| 欧美精品日韩综合在线| 日韩va欧美va亚洲va久久| 欧美一级欧美三级在线观看| 久久精品国产精品亚洲红杏| 精品国产制服丝袜高跟| 18成人在线观看| 欧亚一区二区三区| 日韩电影在线观看网站| 精品电影一区二区| 成人小视频在线观看| 日韩欧美的一区二区| 精品在线免费观看| 5月丁香婷婷综合| 国内精品免费**视频| 精品视频在线免费观看| 中文字幕不卡在线| 蜜桃视频在线观看一区| 欧美视频在线观看一区| 18成人在线观看| 欧美丰满高潮xxxx喷水动漫| 国产精品综合在线视频| 日韩欧美一卡二卡| 国产大陆精品国产| 亚洲一区二区视频| 久久久久久久精| 在线观看日韩高清av| 久久91精品国产91久久小草| 中日韩免费视频中文字幕| 欧美三日本三级三级在线播放| 轻轻草成人在线| 亚洲色图一区二区三区| 欧美一区二区三区日韩视频| 成人av在线资源网| 18欧美乱大交hd1984| 欧美一级一级性生活免费录像| 国产91精品精华液一区二区三区| 亚洲在线观看免费| 国产亚洲欧洲997久久综合| 国产 欧美在线| 日韩成人伦理电影在线观看| 国产精品免费久久久久| 日韩欧美国产1| 91成人在线观看喷潮| 国产精品亚洲一区二区三区在线| 亚洲午夜视频在线观看| 成人欧美一区二区三区1314| 精品国产成人在线影院| 欧美少妇xxx| 91啪亚洲精品| 成人免费三级在线| 狠狠色狠狠色综合| 免费观看一级特黄欧美大片| 亚洲第一二三四区| 亚洲午夜在线视频| 亚洲美女一区二区三区| 91精品国产麻豆国产自产在线| 波多野结衣视频一区| 国产精品综合一区二区| 免播放器亚洲一区| 午夜精品国产更新| 亚洲乱码国产乱码精品精98午夜| 中文字幕久久午夜不卡| 欧美精品一区二区三区一线天视频 | 日韩精品综合一本久道在线视频| 91视频免费播放| 不卡的av电影在线观看| 成人aa视频在线观看| 成人综合婷婷国产精品久久蜜臀| 精一区二区三区| 精品在线一区二区| 国产传媒一区在线| 国产成人精品三级| jlzzjlzz欧美大全| 色婷婷综合久色| 欧美亚洲动漫制服丝袜| 欧美中文字幕一区二区三区亚洲| 色天天综合色天天久久| 日本丰满少妇一区二区三区| 色婷婷综合久色| 制服丝袜亚洲精品中文字幕| 91精品国产91热久久久做人人 | 奇米亚洲午夜久久精品| 蜜桃在线一区二区三区| 国产一区二区视频在线播放| 国产成a人亚洲精| 91香蕉视频mp4| 欧美羞羞免费网站| 91精品国产91久久久久久最新毛片| 制服丝袜中文字幕一区| 精品国精品自拍自在线| 欧美韩国日本一区| 一区二区视频在线看| 亚洲成a人片在线不卡一二三区| 日本不卡免费在线视频| 国产美女一区二区| 色综合久久综合网97色综合| 欧美日韩一级片在线观看| 欧美一区二区三区色| 国产片一区二区| 一区二区三区蜜桃网| 裸体歌舞表演一区二区| av一区二区不卡| 欧美电影一区二区| 亚洲国产精品二十页| 亚洲无人区一区| 国产精品99久久久久久久vr| 91亚洲精品一区二区乱码| 欧美一区二区免费观在线| 国产精品麻豆久久久| 视频一区欧美日韩| 成人三级伦理片| 91精品国产综合久久久久久漫画| 欧美极品少妇xxxxⅹ高跟鞋 | 欧美日韩不卡在线| 国产日韩av一区| 日韩精品免费视频人成| 不卡电影一区二区三区| 日韩欧美亚洲一区二区| 亚洲人妖av一区二区| 韩国女主播一区| 欧美熟乱第一页| 国产精品久久久久久久久久免费看| www国产精品av| 亚洲五月六月丁香激情| 成人蜜臀av电影| 日韩欧美亚洲一区二区| 亚洲成av人综合在线观看| www.一区二区| 久久综合国产精品| 丝袜诱惑亚洲看片| 日本乱码高清不卡字幕| 国产精品私人自拍| 国产资源精品在线观看| 91精品中文字幕一区二区三区| 中文字幕欧美一| 丰满白嫩尤物一区二区| 欧美精品一区二区三区蜜桃视频| 天天综合天天做天天综合| 色综合中文综合网| 国产99一区视频免费| 91精品国产91久久久久久一区二区| 中文字幕一区视频| 国产福利一区二区三区视频在线| 3atv一区二区三区| 视频一区视频二区中文| 欧美日韩视频在线观看一区二区三区 | 日韩精品一区二区三区在线 | 一区二区在线观看不卡| 丁香激情综合国产| 国产亚洲人成网站| 国产黑丝在线一区二区三区| 日韩一区国产二区欧美三区| 日日摸夜夜添夜夜添亚洲女人| 色婷婷国产精品久久包臀| 亚洲男人电影天堂| 在线免费观看日本欧美|