- 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: