Trong Lập trình C cho các MCU, biến kiểu Volatile được giải thích như là một biến có giá trị không bị thay đổi bởi phần mềm (tức code mình viết) nhưng có thể bị thay đổi bởi phần cứng, Biến này liên quan tới hiệu ứng lề (effect side) trong C. Tui cũng đã thử dùng biến này cho bộ biến đổi ADC ( chỉ để test) nhưng không nhận ra sự khác nhau giữa việc dùng hay không dùng tính chất volatile cho biến. Không biết có bác nào đã dùng chức năng này chưa, nếu có thể xin cho luôn một đoạn code ví dụ .
Thông báo
Collapse
No announcement yet.
Biến Volatile trong C (CodeVision AVR)
Collapse
X
-
Nguyên văn bởi thavali Xem bài viếtTrong Lập trình C cho các MCU, biến kiểu Volatile được giải thích như là một biến có giá trị không bị thay đổi bởi phần mềm (tức code mình viết) nhưng có thể bị thay đổi bởi phần cứng, Biến này liên quan tới hiệu ứng lề (effect side) trong C. Tui cũng đã thử dùng biến này cho bộ biến đổi ADC ( chỉ để test) nhưng không nhận ra sự khác nhau giữa việc dùng hay không dùng tính chất volatile cho biến. Không biết có bác nào đã dùng chức năng này chưa, nếu có thể xin cho luôn một đoạn code ví dụ .
Cai khai báo này tôi đã dùng với Keil nhưng tôi chưa dùng với Codevision. Ứng dụng của nó đặc biệt tốt khi mở rộng cổng I/O. Khi đó cổng chỉ như một biến bình thường có địa chỉ cố định.AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
Xem thêm tại Online Store ---> Click here
Mob: 0982.083.106
-
Nguyên văn bởi VNarmy Xem bài viếtBạn xem lại cái tôi đánh dấu ở trên nhé. Theo tôi thì địa chỉ mới là cái không bị thay đổi.
Cai khai báo này tôi đã dùng với Keil nhưng tôi chưa dùng với Codevision. Ứng dụng của nó đặc biệt tốt khi mở rộng cổng I/O. Khi đó cổng chỉ như một biến bình thường có địa chỉ cố định.
Vote hộ tớ với. Thanks!
Comment
-
Nguyên văn bởi VNarmy Xem bài viếtBạn xem lại cái tôi đánh dấu ở trên nhé. Theo tôi thì địa chỉ mới là cái không bị thay đổi.
Cai khai báo này tôi đã dùng với Keil nhưng tôi chưa dùng với Codevision. Ứng dụng của nó đặc biệt tốt khi mở rộng cổng I/O. Khi đó cổng chỉ như một biến bình thường có địa chỉ cố định.
Trong codevision thì thông thường khi ta khai báo một biến, thì biến đó sẽ được ưu tiên cấp phát trong 32 thanh ghi đa chức năng trước (thực ra thì không xài hết 32 thanh ghi này vì có vài hanh ghi phải dùng cho mục đích khác), Khi cấp hết các thanh ghi này rồi thì biến (nếu còn) sẽ được cấp phát trong ô nhớ (SRAM). Giả sử vì lí do nào đó, ta muốn ngăn không cho một biên được cấp phát vào các thanh ghi này (mặc dù các thanh ghi vẫn còn trống) thì ta dùng từ khóa Volatile. Khi đó biến sẽ được cấp vào SRAM luôn (trích từ CodeVision manual). Tôi đã thử điều này và đúng là như vậy.
Tuy nhiên điều này lại không sát với bản chất của một biến Volatile, trong các tài liệu về lập trình C cho hệ thống nhúng thì người ta trình bày khác hẳn theo cách diễn tả của CodeVision AVR, rất tiếc là họ đề cập không nhiều và ít ví dụ nên tôi chưa hiểu lắm. Phần giải thích của tôi ở bài đầu là trích từ cuốn : C Programming for Embedded Systems.
Trong phần trình bày của mình tác giả diễn tả việc dùng chức năng volatile liên quan tới hiệu ứng lề (effect side). Các bạn có thể thử đọc qua để biết về hiệu ứng lề. Các tài liệu về lập trình C cho PC thì tôi chưa thấy nói về Volatile.
Comment
-
Với CodeVision, đa số các biến, kể cả biến toàn cục đều được cấp phát vào SRAM, còn 32 thanh ghi thì chỉ được cấp phát nếu người lập trình yêu cầu.[manual nói thế, hình như bạn hỉu nhầm thì phải, không tin thì xem file list nó dịch ra thì thấy]. Khi dịch bạn cũng có thể thấy rỏ là đã có bao nhiêu byte của SRAM được dùng cho biến(toàn cục)[khi nhấn F9 để dịch thì nó hiện lên bản kết quả ].
Trong CV thì biến kiểu volatile thường ít được dùng, có thể thay bằng một biến toàn cục cũng tốt. Volatile nên chú ý khi dùng AVR-GCC.
NVT2Tín đồ AVR giáo.
Comment
-
Tôi nghĩ là mình không nhầm bác ạ, vì tôi đang viết cho một cái project khá dài hơi. Tôi dùng AVR Studio 4.13 để simulate. Các biến global lúc nào cũng được cấp phát vào các thanh ghi Rn trước bác ạ. (tôi dùng CV 1.25.7)
Tôi có nhầm lẫn gì chăng ?
Comment
-
Nguyên văn bởi thavali Xem bài viếtTôi nghĩ là mình không nhầm bác ạ, vì tôi đang viết cho một cái project khá dài hơi. Tôi dùng AVR Studio 4.13 để simulate. Các biến global lúc nào cũng được cấp phát vào các thanh ghi Rn trước bác ạ. (tôi dùng CV 1.25.7)
Tôi có nhầm lẫn gì chăng ?
Đó cũng là nguyên nhân vì sao Tiny15 không có trong danh sách hỗ trợ vì không có SRAM nội.
NVT2Tín đồ AVR giáo.
Comment
-
Minh khong co xai CodeVision AVR nhung minh co lan gap van de voi cai volatile nay nen chia se kinh nghiem sau day.
Gia su ban co code nhu sau:
(char") const PORT_0_ADDRESS = (char*)(0xFFFF002);
*PORT_0_ADDRESS = 0x00; // line 1
*PORT_0_ADDRESS = 0x01; // line 2
Khi ban enable optimization ma khong dung volatile, compiler se bo di line 1, chi con lai line 2 boi vi no nghi rang ban viet code du thua. Dieu nay dan toi viec code viet dung nhung mach khong chay duoc. Minh bi truong hop nay doi voi timer.
Do do khi ban khai bao su dung volatile, vi du:
(char") volatile const PORT_0_ADDRESS = (char*)(0xFFFF002);
thi sau khi compile, 2 dong code se con day du trong object file . Tuc la khi su dung volatile, ban muon noi voi compiler la "ong noi may viet code dung day, khong co du thua dau".
Neu ban disable optimization trong tuy chon cua compiler, thi volatile khong co y nghia gi ca.
Thong thuong khi lap trinh C, minh dung kieu #define PORT_0_ADDRESS ...Nhung khi lam chung project voi nguoi khac, gap thang nao lam graphic, database ma chanh choe thi thinh thoang minh lai xai volatile. Boi vi volatile chi co dan lap trinh dieu khien phan cung moi dung thoi (do hardware datasheet yeu cau phai viet code tuong tu o tren, dacbiet khi Initialize hay Read Status of device).
Ve mat nguyen tac, khi dieu khien truc tiep phan cung (read/write register, I/O port), ban phai doc ky specification cua phan cung roi viet code chinh xac va khong enable bat ky cai optimization nao ca.
Neu muon xai volatile thi ban dung cach khai bao tuong tu o tren, chu y la chi doi voi address cua thanh ghi, I/O Port thoi, con dia chi thuoc vung RAM (tuc la bien con tro binh thuong) thi khong can thiet.
Luu y:
Khai bao "const" o tren chi de bao cho compiler biet va kiem tra la ban khong he thay doi gia tri cua no o cho nao khac thoi. No khong ngan can duoc ban access den no va thay doi neu nhu ban muon. Cai nay tuong tu nhu ROM vay. ROM chi la read-only doi voi nguoi thuong thoi, con doi voi dan dien tu thi khong co y nghia gi (write tum lum luon).
Xin loi khong go duoc tieng Viet vi ban phim bi hu.
Comment
-
vâng, tui đồng ý với bạn về cách dùng volatile ở trên, tức nó thông báo cho compiler không được optimizate các đoạn code mà nó cho là dư thừa. cách dùng const ở trên khá thú vị.
Khi bạn thao tác với biến toàn cục, bạn có thấy là luôn có lệnh "ldd 0x...,Rn" trước không nè ! Và sau khi thao tác xong thì lại có "std Rn,0x..." đó
Đó cũng là nguyên nhân vì sao Tiny15 không có trong danh sách hỗ trợ vì không có SRAM nội.
NVT2
Comment
-
mình mới đọc được 1 bài viết "When to use the volatile keyword in C", link lấy từ avrfreaks.net, rất chi tiết. Chia sẻ cùng mọi người: http://www.embedded.com/story/OEG20010615S0107|
Comment
-
Nguyên văn bởi thavali Xem bài viếtvâng, tui đồng ý với bạn về cách dùng volatile ở trên, tức nó thông báo cho compiler không được optimizate các đoạn code mà nó cho là dư thừa. cách dùng const ở trên khá thú vị.
Bạn có đồng ý với ý kiến của bạn NVT2 ở trên ko ? Tôi vẫn còn khúc mắc về cái này, vì trong khi tôi viết code thì thấy nó khác với diễn tả trên.
CodeVision cho phép lưu biến toàn cục trên một số thanh ghi trong điều kiện có ít biến còn GCC thì không.
NVT2Last edited by nvt2; 20-11-2007, 16:18.Tín đồ AVR giáo.
Comment
-
Comment
-
Nguyên văn bởi thavali Xem bài viếtĐây là chương trình tôi viết, tất cả các biến toàn cục điều ở trong Rn. Không biết bạn dùng CV phiên bản mấy nhỉ. Hay là tôi dùng ít biến global nên như thế ? Dù sao thì vấn đề này cũng không quá quan trọng, nhưng cũng muốn thảo luận cho ngã ngũ luôn thôi
ảnh:
NVT2Tín đồ AVR giáo.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Hỏi về nơi mua tda7294bởi bqvietChính hãng hay không vẫn khó nói nhưng hình như ở diễn đàn này chưa thấy ai kêu ca gì
http://www.linhkienchatluong.vn/ic-a...577_ct763.aspx-
Channel: Điện thanh
17-05-2024, 13:14 -
-
bởi sonlazioHi các bác,
em có nhu cầu mua ic này để thay thế
trên shopee thì trôi nổi nhiều quá sợ mua về cháy nổ, các bác có nơi nào mua chính hãng ko ạ-
Channel: Điện thanh
17-05-2024, 07:03 -
-
bởi nhathung1101Lâu nay, thấy nick chinhnguyen9 viết rất nhiều bài "phổ biến kiến thức" một cách vô tư.
Xem lại mới thấy bạn "dịch" hay "Google dịch" hay "AI" tôi đang xem xét.
Nhưng những gì đang xem tôi đánh giá là...-
Channel: Góp ý cho diễn đàn
17-05-2024, 00:24 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi nhathung1101Cảm ơn lão nói hộ lòng tôi. Nhưng cái gì "ngang" quá đều có thể giải quyết = beer
Dạo này lão có thời gian không? Em gửi vé lão bay ra HN. Đúng địa chỉ "Khu Văn Công Mai Dịch" nhé. Ta tha hồ đàm hay đàn, kể cả...-
Channel: Tâm tình dân kỹ thuật
16-05-2024, 16:57 -
-
Trả lời cho Dùng MC34063 để làm driver lái led 1W, 3Wbởi Nexus 6P
Chỗ AC 12V-18V là sao bác, rồi còn con D là giá trị bao nhiêu bác...-
Channel: Điện tử dành cho người mới bắt đầu
16-05-2024, 14:19 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi vi van phamCháu xem cái này: https://www.beemusic.vn/2020/10/chu-...-ban-nhac.html
Đầu tiên cháu viết bản nhạc phải chọn ton. Thăng hay giáng quyết đinh Ton bản nhạc, nốt nhạc cuối cùng phải đúng theo khoá nhạc....-
Channel: Tâm tình dân kỹ thuật
16-05-2024, 14:02 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Dạ, cảm ơn bác chỉ cặn kẽ. Vậy thêm một dấu giáng như dưới là ổn phải không bác nhỉ, nó có là fa thứ Fm được không? Hay phải thêm 4 dấu giáng ạ?...
-
Channel: Tâm tình dân kỹ thuật
16-05-2024, 11:24 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi vi van phamTôi đoán bác nhathung1011 nói sai chỗ này:
- Đầu tiên cháu viết nhạc , bản nhạc khóa sol không thăng, không giáng, nốt kết thúc là nốt do thì bản nhac đó thuộc ton Đo trưởng. Đúng lý thuyết nhạc lý.
- Cháu sửa lại nốt nhạc...-
Channel: Tâm tình dân kỹ thuật
16-05-2024, 10:32 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Vâng, xin được nói lời cảm ơn vì bác đã bỏ chút thời gian rảnh rỗi quí báu vào đây xem thử và nhiệt tình cho ý kiến.
Đã trót vào và thấy sai rồi thì bác mạnh dạn, ngại gì không chỉ ra giúp cái nốt sai ấy để tác giả sửa...-
Channel: Tâm tình dân kỹ thuật
15-05-2024, 16:46 -
-
bởi nhathung1101Wrong translate! I don't care!
-
Channel: Điện tử dành cho người mới bắt đầu
14-05-2024, 17:52 -
Comment