Thông báo

Collapse
No announcement yet.

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

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

  • 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


    • 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


      • 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


        • 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, 14:46.

          Comment


          • 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


            • 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


              • 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


                • 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


                  • 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


                    • 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


                      • 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


                        • 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


                          • 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


                            • 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


                              • 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...
                                X