PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 23-06-2010, 09:58 AM   #5
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi lybao_huy View Post
Hiện tại mình cũng không hiểu có gì khác nhau giữa các cách khai báo biến sau:

a/ int x __attribute__ ((aligned (8))) ; và int x;

b/ int x __attribute__ ((aligned )) ; và int x;

c/ int x __attribute__ ((packed)); và int x;

mong bạn giải thích dùm
1 - aligned để sắp xếp biến được khai báo tại vị trí có địa chỉ là bội của 1 giá trị nhất định. Còn tại sao giá trị đó phải là lũy thừa của 2 thì mình ko rõ.
VD: Bạn khai báo
Code:
char a;
char str[128];
Biến a có địa chỉ = 0, str trỏ tới địa chỉ = 1. str là byte-aligned. Kiến trúc của dsPIC ko cho phép truy xuất WORD theo byte-aligned. Tức là nếu bạn thực hiện biểu thức:
Code:
int *wptr = (int*)str;
(*wptr)++;
sẽ xảy ra trap address error.
Trong trường hợp này bạn phải khai báo
Code:
char a;
char str[128] __attribute__ ((aligned(2))) ;
Bây giờ con trỏ str sẽ trỏ tới địa chỉ là 2 thay vì 1. Các aligned cao hơn chỉ dành cho các hàm DSP.

2 - packed ngược lại với aligned để giảm align tới mức thấp nhất có thể. Thường dùng với struct
VD:
Code:
struct{
	char a;
	int i;
}s;
địa chỉ của field a = 0, và địa chỉ của field i = 2 vì biến i cần word-aligned. Và sizeof(s) = 4. Tuy nhiên nếu bạn khai báo
Code:
struct __attribute__ ((packed)){
	char a;
	int i;
}s;
Khi đó địa chỉ của field i = 1. và sizeof(s) = 3. Nhưng bây giờ ko thể truy xuất biến i theo word vì nó misaligned.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:16 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam