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) và void function(unsigned int A) khác nhau như thế nào .và khi nào thì dùng void function(unsigned int *A)
Thông báo
Collapse
No announcement yet.
Thảo luận về ARM LPC 2138/2148
Collapse
X
-
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,Nguyên văn bởi qkhanh Xem bài viếtem 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) và void function(unsigned int A) khác nhau như thế nào .và khi nào thì dùng void function(unsigned int *A)
- 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
-
Để 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.Nguyên văn bởi qkhanh Xem bài viếtcá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 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
-
Nguyên văn bởi qkhanh Xem bài viếtem 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) và 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.
Kết quả ta được B = 0Code:#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; }
Trường hợp thứ 2:
Kết quả B = 1Code:#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; }
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ếtcá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
-
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.Nguyên văn bởi qkhanh Xem bài viếtcả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
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
-
Cái này không đáng phải hỏi, thử tìm hiểu và làm thử xem.Nguyên văn bởi qkhanh Xem bài viếtvậ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
-
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.Nguyên văn bởi qkhanh Xem bài viếtviế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ó
Riêng cho ARM của NXP thì, đây là 1 cách xuất giá trị ra 1 port (32 bit).
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:GPIO_IOCLR = 0xFFFFFFFF; GPIO_IOSET = value;
Vậy đó.Code:#define OUT_PORT(value) \ GPIO_IOCLR = 0xFFFFFFFF; \ GPIO_IOSET = (value)
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi bqvietBqv 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.
-
Channel: Thiết bị điện tử cá nhân
06-12-2025, 17:17 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
05-12-2025, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -

Comment