Thông báo

Collapse
No announcement yet.

giúp hàm c

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

  • giúp hàm c

    có đoạn chưong trình:
    void get_sens (int *res, int chs)
    {
    int ch, loop;

    /* Clear count accumlator */
    for (ch = 0; ch < chs; ch++) res[ch] = 0;

    /* Capture and accumlate integration time for 1/60 second */
    OCR0A = 8000000UL / 1024 / 60;
    TCNT0 = 0;
    TIFR = _BV(OCF0A);
    TCCR0B = 0b101;
    loop = 0;
    do {
    for (ch = 0; ch < chs; ch++) res[ch] += touch(ch);***********
    loop++;
    } while ((TIFR & _BV(OCF0A)) == 0);
    TCCR0B = 0;

    /* Mean calculation */
    for (ch = 0; ch < chs; ch++) res[ch] /= loop;
    }
    hàm : res[ch] += touch(ch);
    res[ch] nhận giá trị bao nhiêu gia sử khởi tạo res[ch]=0,ch=5;
    và hàm touch();được viết như sau
    #ifndef TOUCH
    #define TOUCH

    int touch (int);

    #endif /* TOUCH */
    mình không biết khi gọi hàm =touch(tham so) thì hàm trả về giá trị như thế nào
    mong được giúp đỡ

  • #2
    và hàm touch();được viết như sau
    #ifndef TOUCH
    #define TOUCH

    int touch (int);

    #endif /* TOUCH */
    Đây chỉ là khai báo, không phải mô tả hàm nên không thể biết sờ nó thế nào, bạn đọc kỹ thêm mã nguồn xem nó định nghĩa ở đâu
    Đã bỏ nghề về quê chăn gà...

    Comment


    • #3
      cảm ơn bạn rất nhiều
      đúng như bạn nói hàm này được định nghĩa trong file.s đi kèm như sau
      ;---------------------------------------------------------------------------;
      ; ;
      ; ;
      ;---------------------------------------------------------------------------;
      ; This module uses a 16 bit timer Timer1.

      .nolist
      #include <avr/io.h>
      .list

      #define TIMER_CTRL _SFR_IO_ADDR(TCCR1B)
      #define TIMER_CNTH _SFR_IO_ADDR(TCNT1H)
      #define TIMER_CNTL _SFR_IO_ADDR(TCNT1L)

      #define CH0_OUT _SFR_IO_ADDR(DDRD),0
      #define CH0_IN _SFR_IO_ADDR(PIND),0
      #define CH1_OUT _SFR_IO_ADDR(DDRD),1
      #define CH1_IN _SFR_IO_ADDR(PIND),1
      #define CH2_OUT _SFR_IO_ADDR(DDRA),1
      #define CH2_IN _SFR_IO_ADDR(PINA),1
      #define CH3_OUT _SFR_IO_ADDR(DDRA),0
      #define CH3_IN _SFR_IO_ADDR(PINA),0
      #define CH4_OUT _SFR_IO_ADDR(DDRD),2
      #define CH4_IN _SFR_IO_ADDR(PIND),2
      #define CH5_OUT _SFR_IO_ADDR(DDRD),3
      #define CH5_IN _SFR_IO_ADDR(PIND),3
      #define CH6_OUT _SFR_IO_ADDR(DDRD),4
      #define CH6_IN _SFR_IO_ADDR(PIND),4
      #define CH7_OUT _SFR_IO_ADDR(DDRD),5
      #define CH7_IN _SFR_IO_ADDR(PIND),5


      ;---------------------------------------------------------------------------;
      ;
      ;
      ;Prototype: void xmit (uint8_t data);

      .global touch
      .func touch
      touch:
      in r0, _SFR_IO_ADDR(SREG) ;Save flags
      ldi r25, 1
      out TIMER_CNTH, r1
      out TIMER_CNTL, r1
      cli

      00: cpi r24, 0
      brne 10f
      out TIMER_CTRL, r25
      cbi CH0_OUT
      01: sbis CH0_IN
      rjmp 01b
      sbi CH0_OUT
      rjmp 99f

      10: cpi r24, 1
      brne 20f
      out TIMER_CTRL, r25
      cbi CH1_OUT
      11: sbis CH1_IN
      rjmp 11b
      sbi CH1_OUT
      rjmp 99f

      20: cpi r24, 2
      brne 30f
      out TIMER_CTRL, r25
      cbi CH2_OUT
      21: sbis CH2_IN
      rjmp 21b
      sbi CH2_OUT
      rjmp 99f

      30: cpi r24, 3
      brne 40f
      out TIMER_CTRL, r25
      cbi CH3_OUT
      31: sbis CH3_IN
      rjmp 31b
      sbi CH3_OUT
      rjmp 99f

      40: cpi r24, 4
      brne 50f
      out TIMER_CTRL, r25
      cbi CH4_OUT
      41: sbis CH4_IN
      rjmp 41b
      sbi CH4_OUT
      rjmp 99f

      50: cpi r24, 5
      brne 60f
      out TIMER_CTRL, r25
      cbi CH5_OUT
      51: sbis CH5_IN
      rjmp 51b
      sbi CH5_OUT
      rjmp 99f

      60: cpi r24, 6
      brne 70f
      out TIMER_CTRL, r25
      cbi CH6_OUT
      61: sbis CH6_IN
      rjmp 61b
      sbi CH6_OUT
      rjmp 99f

      70: cpi r24, 7
      brne 99f
      out TIMER_CTRL, r25
      cbi CH7_OUT
      71: sbis CH7_IN
      rjmp 71b
      sbi CH7_OUT
      rjmp 99f

      99:
      out TIMER_CTRL, r1 ;Stop Timer
      in r24, TIMER_CNTL
      in r25, TIMER_CNTH

      out _SFR_IO_ADDR(SREG), r0
      ret
      .endfunc
      vậy khi gọi for (ch = 0; ch < 8; ch++) res[ch] += touch(ch);
      thì res[0...7] nhận giá trị thế nào
      giá trị timer0 trong hàm có trả về hay không
      mong chỉ giúp

      Comment


      • #4
        Cái này chắc dịch bằng ICC AVR, bạn kiếm 1 bộ về dịch thử xem.
        From MTA

        Comment


        • #5
          cái này hình như dịch bằng GCC

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          • nguyendinhvan
            Trả lời cho Vấn đề về tốc độ quay
            bởi nguyendinhvan
            Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
            Hôm qua, 19:50
          • Andrea14
            Vấn đề về tốc độ quay
            bởi Andrea14
            Chào mọi người,

            Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
            12-12-2025, 12:42
          • 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
          Đang tải...
          X