Tổ Chức Bộ Nhớ SRAM

Một phần của tài liệu đồ án tốt nghiệp vi điều khiển avr – atmega 128 (Trang 102 - 104)

- Giá trị trả về của hàm được lưu trong các thanh ghi R30, R31, R22, R23.

h. Tổ Chức Bộ Nhớ SRAM

Trình biên dịch phân chia và quản lí bộ nhớ SRAM của AVR như sau (xem ảnh dưới). Để truy xuất trực tiếp tới một địa chỉ nào đĩ trong các vùng nhớ của AVR ta dùng cách sau, cách này thích hợp khi ta muốn quản lí một khối nhớ cho một chức năng nào đĩ:

Truy xuất bộ nhớ RAM

unsigned char *Pointer;

Pointer=(unsigned char *) 0x90h ; // truy xuất vào địa chỉ 0x90h của SRAM

Truy xuất bộ nhớ Flash:

flash unsigned char *Pointer;

Pointer=(flash unsigned char *)0x90h ; // truy xuất vào địa chỉ

// 0x90h của flash

Truy xuất bộ nhớ Eeprom:

eeprom unsigned char *Pointer;

Pointer=(eeprom unsigned char *)0x90h; // truy xuất vào địa chỉ

Tùy theo số lượng biến (cục bộ và tồn cục) mà trình biên dịch sẽ phân chia kích thước các vùng nhớ một cách thích hợp. Vùng nhớ heap cĩ thể khơng cĩ nếu trong chương trình khơng sử dụng đến. Vùng Stack cứng dùng để lưu địa chỉ quay về của hàm, tức các giá trị của con trỏ SP (stack pointer).

Như vậy, khác với hợp ngữ chỉ cĩ một vùng stack, là nơi lưu các giá trị quay về của chương trình khi chương trình cần nhảy tới và thực thi một đoạn chương trình con nào đĩ. Trong C, vùng data stack chỉ lưu các biến cục bộ, các tham số truyền vào của hàm,.. Cịn vùng stack cứng mới lưu địa chỉ quay về của hàm. Vùng nhớ heap dùng để cấp phát biến động (dynamic variable).

Kích thước của các vùng nhớ trên cĩ thể dễ dàng lựa chọn trong Codevision AVR. (chọn

Project -> Configure -> C complier ). Riêng phần stack cứng thì trình biên dịch sẽ khởi

PHỤ LỤC:

Một phần của tài liệu đồ án tốt nghiệp vi điều khiển avr – atmega 128 (Trang 102 - 104)

Tải bản đầy đủ (DOCX)

(104 trang)
w