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

          Đang tải...
          X