anh em trong diễn đàn cho em hỏi code lập trình như thế này sao lại bị sai trong ccs

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • gacon29
    Thành viên mới
    • Feb 2009
    • 6

    #1

    anh em trong diễn đàn cho em hỏi code lập trình như thế này sao lại bị sai trong ccs

    void send_data()
    {
    int8 tam;
    for(tam=3;tam>=0;tam--)// lỗi :condition always true
    send1_i2c(dich[tam]);
    latch=1;
    delay_cycles(10);
    latch=0;
    }
  • bqviet
    Linux zealot
    • Jun 2007
    • 6170

    #2
    Bạn thử đổi lại khai báo dòng 3 thành
    Code:
    unsigned char tam;
    Phần mềm tự do hoặc không dùng máy tính nữa !.

    Comment

    • gacon29
      Thành viên mới
      • Feb 2009
      • 6

      #3
      vẫn bị lỗi anh ah
      cái này trong keil c thì chạy đúng. nhưng ccs thì báo lỗi

      Comment

      • gacon29
        Thành viên mới
        • Feb 2009
        • 6

        #4
        em thay for(tam=3;tam>0;tam--) thì nó ko báo lỗi nữa. nhưng ko đúng yêu cầu của em.

        Comment

        • itanium7000
          Thành viên chính thức
          • Jun 2009
          • 44

          #5
          Nguyên văn bởi gacon29 Xem bài viết
          void send_data()
          {
          int8 tam;
          for(tam=3;tam>=0;tam--)// lỗi :condition always true
          send1_i2c(dich[tam]);
          latch=1;
          delay_cycles(10);
          latch=0;
          }
          Cái đó không phải lỗi mà là warning thôi. Bạn dùng kiểu dữ liệu int8 cho biến tam trong khi bạn lại so sánh điều kiện lớn hơn hoặc bằng 0. Dữ liệu int8 có giá trị từ 0 đến 255 nên biến tam của bạn không bao giờ có cơ hội nhỏ hơn 0. Vì thế cảnh báo condition always true xuất hiện. Tức là nó cảnh báo cái biểu thức tam >= 0 là luôn đúng trong mọi trường hợp.

          Bạn có thể khai báo lại như sau:

          Code:
          signed int8 tam;
          Lúc này biến tam là số nguyên có dấu, phạm vi giá trị từ -128 đến 127 là sẽ đáp ứng đoạn code của bạn.

          Comment

          • gacon29
            Thành viên mới
            • Feb 2009
            • 6

            #6
            không có ai giúp em ah?

            Comment

            • gacon29
              Thành viên mới
              • Feb 2009
              • 6

              #7
              thank. do mình đọc help nhầm. hii.

              Comment

              • OpenDoor
                Thành viên tích cực
                • Apr 2011
                • 251

                #8
                Nguyên văn bởi gacon29 Xem bài viết
                void send_data()
                {
                int8 tam;
                for(tam=3;tam>=0;tam--)// lỗi :condition always true
                send1_i2c(dich[tam]);
                latch=1;
                delay_cycles(10);
                latch=0;
                }
                Trong trường hợp này bạn dùng hàm while sẽ thích hợp hơn. Chưa thấy ai dùng hàm for như thế.

                Comment

                • OpenDoor
                  Thành viên tích cực
                  • Apr 2011
                  • 251

                  #9
                  Trong trường hợp này bạn dùng hàm while sẽ thích hợp hơn. Bạn thay int8 tam thành char tam xem được ko. Vì biến tam phải là giá trị âm thì mới thoát khỏi vòng for được.

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...