Thông báo

Collapse
No announcement yet.

Rất cần sự giúp đỡ của mọi người

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Rất cần sự giúp đỡ của mọi người

    Bác nào rành C xin giai thích dùm đoạn code sau: (rất cám ơn)
    Code:
    { int i;
     unsigned int crc_value=0xffff;
     while(data_length--)
       {crc_value^=*data_value++;
        for(i=0;i<8;++)
         {if(crc_value&0x0001) crc_value=(crc_value>>1)^0xa001;
           else crc_value=crc_value>>1;
          }
        }
     return(crc_value);
     }
    Last edited by ngohaibac; 14-11-2008, 09:06. Lý do: Thêm tag code

  • #2
    Nguyên văn bởi phienbinh Xem bài viết
    Bác nào rành C xin giai thích dùm đoạn code sau: (rất cám ơn)
    { int i;
    unsigned int crc_value=0xffff;
    while(data_length--)
    {crc_value^=*data_value++;
    for(i=0;i<8;++)
    {if(crc_value&0x0001) crc_value=(crc_value>>1)^0xa001;
    else crc_value=crc_value>>1;
    }
    }
    return(crc_value);
    }
    có chi đâu hè , u lấy tờ giấy ra đọc biểu thức tới đâu , tính ra kết quả ngay chỗ đó , chỉ rắc rối chỗ crc_value^=*data_value++;
    - B1 : tính data_value ++
    - B2 : lấy data_value sau đó nhân với nhau
    - B3 : crc_value = crc_value XOR với (tích 2 data_value vừa nhân ấy )
    phân tích từ từ như thế sẽ ra thui

    Comment


    • #3
      crc_value^=*data_value++;
      - B1 : tính data_value ++
      - B2 : lấy data_value sau đó nhân với nhau
      - B3 : crc_value = crc_value XOR với (tích 2 data_value vừa nhân ấy )
      Thứ tự ưu tiên của phép toán thôi (cao nhất đến thấp nhất)
      1.(),++,--.
      2.*,/,%
      3.+.-
      4.^
      Last edited by love_ac; 13-11-2008, 08:16. Lý do: thêm

      Comment


      • #4
        cám ơn các bác đã tận tình chỉ bảo, nhưng thú thật là tui không biệt C, nên nhờ các bác giải thích dùm ý nghĩa các lệnh trên để tui có thể việt lại đoạn code trên bằng VB.Cám ơn nhiều

        Comment


        • #5
          Nguyên văn bởi Zz_Bi_zZ Xem bài viết
          có chi đâu hè , u lấy tờ giấy ra đọc biểu thức tới đâu , tính ra kết quả ngay chỗ đó , chỉ rắc rối chỗ crc_value^=*data_value++;
          - B1 : tính data_value ++
          - B2 : lấy data_value sau đó nhân với nhau
          - B3 : crc_value = crc_value XOR với (tích 2 data_value vừa nhân ấy )
          phân tích từ từ như thế sẽ ra thui
          Nguyên văn bởi love_ac Xem bài viết
          crc_value^=*data_value++;
          - B1 : tính data_value ++
          - B2 : lấy data_value sau đó nhân với nhau
          - B3 : crc_value = crc_value XOR với (tích 2 data_value vừa nhân ấy )
          Thứ tự ưu tiên của phép toán thôi (cao nhất đến thấp nhất)
          1.(),++,--.
          2.*,/,%
          3.+.-
          4.^
          Cho mình hỏi tại sao lại lấy data_value nhân với nhau nhỉ ?? Các bạn có biết kiểu dữ liệu của data_value không ??

          Theo mình nghĩ thì data_value là con trỏ kiểu dữ liệu trùng với crc_value đó.

          Chúc các bạn thành công.
          Technical sale at WT Microelectronics S'pore
          Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
          Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

          Comment


          • #6
            Nguyên văn bởi phienbinh Xem bài viết
            Bác nào rành C xin giai thích dùm đoạn code sau: (rất cám ơn)
            Code:
            { int i;
             unsigned int crc_value=0xffff;
             while(data_length--)
               {crc_value^=*data_value++;
                for(i=0;i<8;++)
                 {if(crc_value&0x0001) crc_value=(crc_value>>1)^0xa001;
                   else crc_value=crc_value>>1;
                  }
                }
             return(crc_value);
             }
            dòng lệnh này viết sai nên ko chạy được:
            crc_value^=*data_value++;
            dấu * làm cho câu lệnh chẳng có nghĩa gì cả. Mà nói chung là ko nên viết rờm ra như thế, chỉ làm khó đọc. Những người viết code đã mỉa mai lối viết quá rờm ra như sau:
            Code:
            http://www.gnu.org/fun/jokes/helloworld.html

            Comment


            • #7
              Nguyên văn bởi thavali Xem bài viết
              dòng lệnh này viết sai nên ko chạy được:
              crc_value^=*data_value++;
              dấu * làm cho câu lệnh chẳng có nghĩa gì cả. Mà nói chung là ko nên viết rờm ra như thế, chỉ làm khó đọc. Những người viết code đã mỉa mai lối viết quá rờm ra như sau:
              Code:
              http://www.gnu.org/fun/jokes/helloworld.html
              Ai bảo dấu * ko có ý nghĩa. Đây là cách viết ngắn gọn của C. Toàn văn câu lệnh của nó là:

              Tăng con trỏ lên 1, lấy giá trị của nó xor với CRC rồi lưu vào CRC.

              Dấu sao ở đây là toán tử giá trị của con trỏ chứ ko phải nhân đâu nhé.

              Dù sao cũng cảm ơn bạn vì câu chuyện cười.
              AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
              Xem thêm tại Online Store ---> Click here
              Mob: 0982.083.106

              Comment


              • #8
                đồng ý, nhưng khi đó phải khai báo data_value là con trỏ.
                type * data_value
                Đọan code trên ko thể hiện điều này, nên dấu * ko có nghĩa gì cả.

                Comment


                • #9
                  Cám ơn mọi người đã chỉ bảo. Tui đã hiểu ý nghĩa của đoạn code trên và đã viết lại được trên VB. Nếu bạn nào có làm điều khiển biến tần(inverter) bằng PLC hay pc thông qua cổng truyền thông Rs232-485 thì đoạn code trên giúp cho ta rất nhiều.

                  Comment

                  Về tác giả

                  Collapse

                  phienbinh Tìm hiểu thêm về phienbinh

                  Bài viết mới nhất

                  Collapse

                  • bqviet
                    Trả lời cho Đấu tắt điện cho máy tính bảng
                    bởi bqviet
                    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                    06-12-2025, 17:17
                  • nguyendinhvan
                    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                    bởi nguyendinhvan
                    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                    05-12-2025, 19:59
                  • afrendly
                    Trả lời cho Đấu tắt điện cho máy tính bảng
                    bởi afrendly
                    Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                    04-12-2025, 01:27
                  • nick22
                    Trả lời cho Máy điện châm ?
                    bởi nick22
                    Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                    01-12-2025, 13:23
                  Đang tải...
                  X