Thảo luận về ARM LPC 2138/2148

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • qkhanh
    Thành viên tích cực
    • Jan 2008
    • 778

    #286
    em cũng nghĩ là A =const thì chương trình biên dịch sẽ tự tính.bác cho em hỏi luôn là khai báo void function(unsigned int *A) void function(unsigned int A) khác nhau như thế nào .và khi nào thì dùng void function(unsigned int *A)

    Comment

    • Connection
      Thành viên tích cực
      • May 2006
      • 205

      #287
      Nguyên văn bởi qkhanh Xem bài viết
      em cũng nghĩ là A =const thì chương trình biên dịch sẽ tự tính.bác cho em hỏi luôn là khai báo void function(unsigned int *A) void function(unsigned int A) khác nhau như thế nào .và khi nào thì dùng void function(unsigned int *A)
      void function(unsigned int *A) là có kiểu tham số là con trỏ, con trở này trỏ tới địa chỉ của 1 biến dạng unsigned int... Còn kiểu void function(unsigned int A) thì đơn giản tham số là biến unsigned int thôi,
      - Dùng kiểu tham số con trỏ như trên ví dụ function(p->field) trong đó p là một kiếu struct nào đó, còn field là trường của struct đó mà có kiểu unsigned int.

      Thế nhá.

      Or call me 0903911109

      Comment

      • qkhanh
        Thành viên tích cực
        • Jan 2008
        • 778

        #288
        các bác cho em hỏi một câu nữa về timer . em đang học lập trình timer bước đầu tiên là tạo trễ dùng timer tuy nhiên đang vướng mắc ở chỗ, nếu không dùng ngắt thì khi giá trị TC bằng với các thanh ghi MR0-MR3 hoặc khi timer tràn thì làm thế nào biết được để thoát khỏi hàm trễ và reset timer em đọc tài liệu thì chó các bit trong thanh ghi TxIR ( x là tên timer) set lên 1 có đúng ko

        Comment

        • tranduythai
          Thành viên chính thức
          • Jun 2008
          • 32

          #289
          Minh moi tap tanh thu nghiem ve ARM, da mua mot kit thi nghiem ARM tu My ma chua biet phai thuc hien the nao?
          Cac ban cho minh hoi can nhung phan mem gi de viet Code + Chay thu+ Nap vao cho LPC 2148.
          Last edited by tranduythai; 01-04-2010, 13:46.

          Comment

          • Connection
            Thành viên tích cực
            • May 2006
            • 205

            #290
            Kit của bạn tên là gì vậy, phần mềm viết code và chạy code thường là Keil, rất phổ biến và dễ dùng, tuy nhiên cần phải *****... hoặc có tiền thì mua luôn cai license cảu Keil.. nhưng sẽ đắt lắm đó.

            Or call me 0903911109

            Comment

            • mgdaubo
              Thành viên tích cực
              • Mar 2006
              • 296

              #291
              Nguyên văn bởi qkhanh Xem bài viết
              các bác cho em hỏi một câu nữa về timer . em đang học lập trình timer bước đầu tiên là tạo trễ dùng timer tuy nhiên đang vướng mắc ở chỗ, nếu không dùng ngắt thì khi giá trị TC bằng với các thanh ghi MR0-MR3 hoặc khi timer tràn thì làm thế nào biết được để thoát khỏi hàm trễ và reset timer em đọc tài liệu thì chó các bit trong thanh ghi TxIR ( x là tên timer) set lên 1 có đúng ko
              Để tạo trễ bằng timer0, nếu ko dùng ngắt thì ko cần thiết dùng MR0-MR3 làm gì cả, MR0-MR3 có 3 chức năng: tạo ngắt, reset timer, và stop timer.

              Để tạo trễ bằng timer ko dùng ngắt
              void delay(unsigned int t) {
              while (T0TC |= t); // đợi đến khi TC = t
              T0TC = 0; // reset TC
              }
              Phạm Minh Tuấn

              (+84) 982006467

              Comment

              • tranduythai
                Thành viên chính thức
                • Jun 2008
                • 32

                #292
                Minh chay ARM LPC 2138 trong Protues nhung sau nhap file *.hex tu keil c 4 lai ko duoc ah.Co ban nao chay mo phong trong Proteus ko vay.

                Comment

                • kamejoko80
                  Banned
                  • Aug 2005
                  • 262

                  #293
                  Nguyên văn bởi qkhanh Xem bài viết
                  em cũng nghĩ là A =const thì chương trình biên dịch sẽ tự tính.bác cho em hỏi luôn là khai báo void function(unsigned int *A) void function(unsigned int A) khác nhau như thế nào .và khi nào thì dùng void function(unsigned int *A)

                  void function (unsigned int A) :

                  Hàm không có giá trị trả về, tham số truyền vào là biến kiểu interger không dấu, tham số này thuộc kiểu tham trị, tức là mọi sự biến đổi của A trong thân hàm có thể thực hiện, tuy nhiên khi thoát ra khỏi hàm thì giá trị biến truyền vào không thay đổi.

                  void function (unsigned int *A):

                  Hàm không có giá trị trả về, tham số truyền vào là con trỏ kiểu int không dấu, tham số truyền vào thuộc kiểu tham biến, mọi sự biến đổi của biến này trong thân hàm làm ảnh hưởng đến giá trị của biến truyền vào.

                  Như vậy ta đã hiểu được cách sử dụng của hai dạng trên, đơn cử cho ví dụ trong hai trường hợp trên.

                  Code:
                  #include <stdio.h>
                  
                  void function (unsigned int A) {
                       A = A +1;
                  }
                  
                  int main (int argc, char [] *argv) {
                  
                     unsigned int B = 0;
                     function (B);   /* Goi ham tai day */
                     printf ("B=%d\r\n", B);       
                     return 0;
                  }
                  Kết quả ta được B = 0

                  Trường hợp thứ 2:

                  Code:
                  #include <stdio.h>
                  
                  void function (unsigned int *A) {
                       *A = *A +1;
                  }
                  
                  int main (int argc, char [] *argv) {
                  
                     unsigned int B = 0;
                     function (&B);   /* Goi ham tai day */
                     printf ("B=%d\r\n", B);       
                     return 0;
                  }
                  Kết quả B = 1

                  Xong rồi đấy

                  Comment

                  • qkhanh
                    Thành viên tích cực
                    • Jan 2008
                    • 778

                    #294
                    cảm ơn các bác rất nhiều em đã hiểu rồi . nhưng theo em thì vấn đề tạo trễ timer như bác mgdaubo nói thì cần chú ý là để thanh ghi PR(chia tẫn số timer) phải lớn hơn thời gian thực hiện lệnh nếu không thì có thể sẽ sai. lệnh rất đơn giản như vậy mà em không nghĩ ra
                    còn vấn đề này nữa không biết các bác có đồng ý với các câu trả lời trước đó không.đây là vấn đề em rất quan tâm vì đôi khi không hiểu rõ nó sẽ làm ảnh hưởng đến tốc độ thực hiện lệnh của VDK hoặc là làm giảm đi tính linh hoạt trong vấn đề tạo các hàm trong chương trình
                    Nguyên văn bởi qkhanh Xem bài viết
                    các bác cho em hỏi trong dòng lệnh ví dụ như sau :
                    void OUTPORT0(unsigned int A)
                    {
                    unsigned long temp;
                    temp |= 1<<(A+1) ;
                    ................


                    }

                    thì việc tính 1<<(A+1) được thực hiện trong chương trình biên dịch hay trong VDK
                    tức là nó có làm mất thời gian của VDK ko

                    Comment

                    • kamejoko80
                      Banned
                      • Aug 2005
                      • 262

                      #295
                      Nguyên văn bởi qkhanh Xem bài viết
                      cảm ơn các bác rất nhiều em đã hiểu rồi . nhưng theo em thì vấn đề tạo trễ timer như bác mgdaubo nói thì cần chú ý là để thanh ghi PR(chia tẫn số timer) phải lớn hơn thời gian thực hiện lệnh nếu không thì có thể sẽ sai. lệnh rất đơn giản như vậy mà em không nghĩ ra
                      còn vấn đề này nữa không biết các bác có đồng ý với các câu trả lời trước đó không.đây là vấn đề em rất quan tâm vì đôi khi không hiểu rõ nó sẽ làm ảnh hưởng đến tốc độ thực hiện lệnh của VDK hoặc là làm giảm đi tính linh hoạt trong vấn đề tạo các hàm trong chương trình
                      Nếu A là hằng số thì trình biên dịch sẽ tính 1 lần và gán luôn cho biết temp.
                      Trong trường hợp này tham số gán vào là biến, vì thế VĐK sẽ mất thời gian để thực hiện câu lệnh này.

                      Comment

                      • qkhanh
                        Thành viên tích cực
                        • Jan 2008
                        • 778

                        #296
                        vậy có cách nào viết hàm gửi một giá trị bất kỳ ra một cổng được không?

                        Comment

                        • kamejoko80
                          Banned
                          • Aug 2005
                          • 262

                          #297
                          Nguyên văn bởi qkhanh Xem bài viết
                          vậy có cách nào viết hàm gửi một giá trị bất kỳ ra một cổng được không?
                          Cái này không đáng phải hỏi, thử tìm hiểu và làm thử xem.

                          Comment

                          • qkhanh
                            Thành viên tích cực
                            • Jan 2008
                            • 778

                            #298
                            viết bình thường thì em viết nhiều rồi.bác nói câu đâu lòng quá.vấn đề là viết tổng quát mà không ảnh hưởng nhiều đến tốc độ tính toán của VDK.VỚI AVR hay PIC thì không khó khăn lắm nhưng với ARM thì em thấy hơi khó

                            Comment

                            • kamejoko80
                              Banned
                              • Aug 2005
                              • 262

                              #299
                              Nguyên văn bởi qkhanh Xem bài viết
                              viết bình thường thì em viết nhiều rồi.bác nói câu đâu lòng quá.vấn đề là viết tổng quát mà không ảnh hưởng nhiều đến tốc độ tính toán của VDK.VỚI AVR hay PIC thì không khó khăn lắm nhưng với ARM thì em thấy hơi khó
                              Vấn đề quan trọng là thủ thuật viết cho ngôn ngữ C, muốn tốn ít thời gian thì dùng macro, nhưng bù lại nó tốn code, và ngược nếu muốn thu gọn code thì dùng hàm và không dùng macro.

                              Riêng cho ARM của NXP thì, đây là 1 cách xuất giá trị ra 1 port (32 bit).

                              Code:
                              GPIO_IOCLR  = 0xFFFFFFFF;
                              GPIO_IOSET  =  value;
                              Mỗi lần xuất giá trị ra port mà phải ghi hai dòng trên thì mệt quá, vì thế người ta mới nghĩ đến macro, trình biên dịch sẽ lấy macro này chèn vào chỗ mình gọi macro.

                              Code:
                              #define OUT_PORT(value) \
                              GPIO_IOCLR  = 0xFFFFFFFF; \
                              GPIO_IOSET  =  (value)
                              Vậy đó.

                              Comment

                              • qkhanh
                                Thành viên tích cực
                                • Jan 2008
                                • 778

                                #300
                                em hiểu rồi chỗ này thì em hơi kém.cám ơn bác lần nữa em đang trong quá trình nghiên cứu nên còn hơi kém

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...