![]() |
|
Tài trợ cho PIC Vietnam |
Bootloaders - Programmers - Debuggers - Emulators Những công cụ cần thiết để lập trình cho PIC/dsPIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Jan 2008
Bài gửi: 10
: |
![]() Mình viết 1 trình bootloader (cho 18F67J10) và sẽ đặt nó ở vùng gần giữa của memory (bắt đầu từ 0x9000). Trong file linker mình sửa lại thành
CODEPAGE NAME=vectors START=0x0 END=0x29 CODEPAGE NAME=page START=0x9000 END=0x1FD3F // dòng này đc sửa CODEPAGE NAME=config START=0x1FFF8 END=0x1FFFD CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF Còn trong c18i.c vẫn giữ _entry_scn=0x000000. Sau khi nạp xong chương trình sẽ load application code thông qua hyperterminal. Application code sẽ được lưu ở địa chỉ 0x800. Trong linker file của application code mình sửa lại như sau: CODEPAGE NAME=boot START=0x9000 END=0x1FD3F protected CODEPAGE NAME=vectors START=0x0 END=0x29 protected CODEPAGE NAME=rvectors START=0x800 END=0x829 protected CODEPAGE NAME=page START=0x82A END=0x8000 còn trong file c18i.c , sửa lại _entry_scn=0x000800. File hexa cũng đc export với start address = 0x800 Sau khi download xong application code, bootloader sẽ nhảy đến vùng nhớ có chứa application code (0x800) để bắt đầu thực thi chương trình. Mình viết là: _asm clrf STKPTR, 0 goto 0x800 _endasm Đến đây thì chươgn trình ko chạy được nữa. Toàn bộ quá trình từ đầu đến sau khi download xong application code đều chạy tốt. (mình đã kiểm tra bằng cách đọc trên vùng nhớ của program memory thì thấy bootloader code và application code đều được đặt đúng chỗ) Ko phải là dân về vi điều khiển nhưng vì có project nên mình phải nhảy ngay vào PIC18 này. Mình vẫn chưa hiểu rõ được: - cơ chế hoạt động của reset vector và redirect nó như thế nào. - cách thiết lập chúng ra sao (rvector trong linker file có phải là redirect vector ko? Cách mình nêu ở trên có chỗ nào sai ko? Mong mọi người hướng dẫn giúp. Cám ơn nhiều |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|