PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 26-03-2010, 10:29 PM   #1
lybao_huy
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 97
:
Các Vấn Đề Về MPLAB C18

Có một số thắc mắc trong việc khai báo trong C18 như sau:
1-
có gì khác nhau giữa khai báo
#pragma idata table
char array[10] = {0, 1, 2, 3, 4, 5};
#pragma idata
và khai báo
ram char array[10]={0,1,2,3,4,5};


2-
có 2 chế độ:Extended Mode and non-Extended Mode.
trong trường hợp nào ta dùng Extended Mode.
và trong trường hợp nào dùng non-Extended Mode.

3-
#pragma interrupt isr1 isr_tmp save=section("isr_tmp") nosave=section(".tmpdata")
vậy khi nào ta dùng save=section(""), nếu không dùng thì có sao không.

xin giải thích dùm hộ tôi với(tôi gặp nhiều trục trặc là do sử dụng quen CCS rùi, nên khi dùng MPLAC C có nhiều bỡ ngỡ quá) cảm ơn bạn trước.
lybao_huy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2010, 08:32 AM   #2
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
:
1 - 3 bạn có thể đọc C18 User guide

2 - Khi hoạt động trong extended mode, PIC có thêm 1 số lệnh về truy xuất bộ nhớ.
they allow users working in high-level
languages to perform certain operations on data
structures more efficiently


Chỉ 1 số loại PIC mới có extended instructions, và để enable extended mode thì trình dịch C18 phải có bản quyền, hoặc bản student chưa hết hạn dùng thử.

- Trong thread cũ của bạn http://www.picvietnam.com/forum/showthread.php?t=5994
const_nos spam câu hỏi nên bị edit bài, ko phải là bạn
__________________
- 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
Old 27-03-2010, 09:48 AM   #3
lybao_huy
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 97
:
Tôi cũng đã xem nhiều lần rùi nhưng không hiểu lắm. Bạn có thể nói rõ hơn về Extended Mode,tôi thấy trong datasheet 18f4550 có viết:
Note:
Enabling the PIC18 instruction set extension may cause legacy applications to behave erratically or fail entirely.



When porting an application to the PIC18F2455/2550/
4455/4550, it is very important to consider the type of
code. A large, re-entrant application that is written in ‘C’
and would benefit from efficient compilation will do well
when using the instruction set extensions. Legacy
applications that heavily use the Access Bank will most
likely not benefit from using the extended instruction
set.

xin bạn giải thích dùm hộ.
lybao_huy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2010, 10:55 AM   #4
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
:
Enabling the PIC18 instruction set extension may cause legacy applications to behave erratically or fail entirely

Một số bản rất cũ của USB stack ko hoạt động khi cho phép extended mode, còn lý do thì mình cũng ko rõ tại sao????


Các lệnh mở rộng là các lệnh liên quan đến truy xuất bộ nhớ. Các lệnh này tăng hiệu năng cho các thao tác đánh địa chỉ gián tiếp (trong C là de-reference con trỏ, vd *ptr++) và chỉ số (trong C là truy xuất mảng, vd a[i])

Trình dịch C18 tận dụng các lệnh này cho software stack. Sử dụng các lệnh mới này, các thao tác dynamic allocate biến cục bộ sẽ nhanh hơn.

Dynamic allocate biến cục bộ có tác dụng gì??

Khi 1 hàm có khả năng re-entrant tức là nhiều instance của 1 hàm có thể chạy đồng thời. Trường hợp này xảy ra khi xử lý đa luồng, với PIC là 1 hàm vừa được gọi trong ngắt vừa được gọi trong chương trình chính, hoặc được gọi trong nhiều hàm phục vụ ngắt.

Khi đó mỗi instance của hàm này phải có 1 không gian nhớ riêng cho các biến cục bộ của nó. Trình dịch C thực hiện bằng cách allocate các biến này trong software stack. Vì các biến này được tạo ra khi chương trình chạy, chứ ko phải khi biên dịch, nên thao tác này được gọi là dynamic allocate.

C30, C32 luôn luôn dùng software stack để dynamic allocate các biến cục bộ. C18 thì mình chưa rõ, vì rất ít khi dùng.

Trường hợp trình dịch C ko hỗ trợ, ví dụ HTPIC cho PIC16 hoặc CCS C, nó sẽ allocate các biến cục bộ trong vùng overlay và disable ngắt khi gọi hàm này.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]

thay đổi nội dung bởi: bien_van_khat, 27-03-2010 lúc 11:03 AM.
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2010, 06:06 PM   #5
lybao_huy
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 97
:
Theo như trong C18 guide's user thì nó cũng dùng software stack để lưu trữ các biến cục bộ cho các hàm và ngắt. vậy thì tôi có thể dùng các lệnh mở rộng này được chứ.

Còn vấn đề này nữa là trong C18 không có các hàm như malloc(), free(),... để cấp phát bộ nhớ, vậy thì làm cách nào để cấp phát hay giải phóng bộ nhớ.

Mình cảm ơn về sự nhiệt tình của bạn rất nhiều.

thay đổi nội dung bởi: lybao_huy, 27-03-2010 lúc 06:25 PM.
lybao_huy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2010, 06:51 PM   #6
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
Theo như trong C18 guide's user thì nó cũng dùng software stack để lưu trữ các biến cục bộ cho các hàm và ngắt. vậy thì tôi có thể dùng các lệnh mở rộng này được chứ.

Còn vấn đề này nữa là trong C18 không có các hàm như malloc(), free(),... để cấp phát bộ nhớ, vậy thì làm cách nào để cấp phát hay giải phóng bộ nhớ.

Mình cảm ơn về sự nhiệt tình của bạn rất nhiều.
Dĩ nhiên là bạn có thể dùng, và theo như Microchip thì hiệu năng sẽ tăng tùy thuộc vào ứng dụng của bạn

malloc và free là các hàm cấp phát bộ nhớ động sử dụng heap, muốn sử dụng bạn phải khai báo kích thước heap trong mục linker
__________________
- 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
Old 27-03-2010, 08:24 PM   #7
lybao_huy
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 97
:
À tôi thấy trong configuration bits dùng để config có bit XINST để bật/tắt Extended Instruction Set.

Extended Instruction Set Enable bit:
XINST = OFF
Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
XINST = ON
Instruction set extension and Indexed Addressing mode enabled

Vậy thì chỉ cần XINST = ON là có dùng nó rùi, đâu cần phải đánh dấu check mục Extended mode trong MPLAB c18 đâu. À mà tôi thấy trong bản MPLAB c18 Lite cũng có mục Extended mode trong Tab MPASM/C17/C18 Suite đó.

thay đổi nội dung bởi: lybao_huy, 27-03-2010 lúc 08:37 PM.
lybao_huy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2010, 09:07 PM   #8
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
À tôi thấy trong configuration bits dùng để config có bit XINST để bật/tắt Extended Instruction Set.

Extended Instruction Set Enable bit:
XINST = OFF
Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
XINST = ON
Instruction set extension and Indexed Addressing mode enabled

Vậy thì chỉ cần XINST = ON là có dùng nó rùi, đâu cần phải đánh dấu check mục Extended mode trong MPLAB c18 đâu. À mà tôi thấy trong bản MPLAB c18 Lite cũng có mục Extended mode trong Tab MPASM/C17/C18 Suite đó.
Ko en trong C18 thì con pic nó chạy bằng niềm tin hả bạn,

Khi xài hết 60 ngày dùng thử của bản student thì nó vẫn có dấu check, nhưng khi build thì nó bảo ko cho xài,
__________________
- 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
Old 28-03-2010, 01:08 AM   #9
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
À bạn làm ơn giải thích dùm Reentrant code là gì vậy(trong từ điển có nghĩa là: lõm vào)
->
Trích:
Nguyên văn bởi bien_van_khat View Post
Khi 1 hàm có khả năng re-entrant tức là nhiều instance của 1 hàm có thể chạy đồng thời. Trường hợp này xảy ra khi xử lý đa luồng, với PIC là 1 hàm vừa được gọi trong ngắt vừa được gọi trong chương trình chính, hoặc được gọi trong nhiều hàm phục vụ ngắt.

Khi đó mỗi instance của hàm này phải có 1 không gian nhớ riêng cho các biến cục bộ của nó.
Trích:
Nguyên văn bởi lybao_huy View Post
Xin lỗi vì đã làm phiền, nhưng mục đích của mình là làm trên con Dspic nên trước tiên phải học trên PIC18 trước đã vì đã từng nghiên cứu PIC 18 trên CCS lâu rồi, có cơ sở rồi sẽ chuyển qua dspic với MPLAB C30. Cảm ơn bạn rất nhiều.
just kidding, nếu thấy phiền đơn giản mình đã ko trả lời
__________________
- 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
Old 28-03-2010, 04:03 AM   #10
annx
Đệ tử 1 túi
 
Tham gia ngày: Jul 2009
Bài gửi: 15
:
AT91sam7s256

pro ơi !!
cho mình hỏi tại sao MPlab không có hổ trợ kit at91sam7s256 này thế?. pro có bít trình dịch nào mà lập trình ngôn ngữ C cho kit at91sam7s256 này ko?
annx vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-03-2010, 09:54 AM   #11
lybao_huy
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 97
:
Hình như con này Họ AVR thì phải mình không sử dụng con này bao giờ nên không biết.
lybao_huy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lờ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à 02:51 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