![]() |
Các vấn đề với C30
1 Attachment(s)
Khi làm việc với dsPIC, một điều gần như chắc chắn là chúng ta sẽ sử dụng C30. Vì vậy, F mở ra luồng này để các bạn tập trung thảo luận về các vấn đề liên quan đến C30.
Hiện nay, C30 được phát triển ở dạng free, và gần như không còn có một trình dịch nào có thể so sánh được với C30, ở bình diện chung. HTdsPIC chỉ có thể được phát triển bởi một nhóm kỹ thuật viên của HiTech, nhưng C30 sẽ được sự phát triển của cả một cộng đồng và các chuyên gia. Đồng thời, HTdsPIC là một phần mềm có giá khá cao, trong khi đó C30 thì miễn phí (một phần). Chính vì vậy, picvietnam sẽ hỗ trợ phát triển C30. Luồng này được mở ra để các bạn thảo luận tất cả các vấn đề liên quan đến C30. Dưới đây là một file mẫu chuẩn picvietnam đang định đề nghị khi làm việc với C30. F sẽ làm việc cụ thể hơn với anh Nam về form chuẩn này và rất mong các bạn thảo luận về việc xây dựng form mẫu chuẩn cho C30 của picvietnam. Chúc vui Tài liệu tham khảo: [1] C30 Compiler User's Guide [2] Brian W. Kernighan and Dennis M. Ritchie, "The C Programming Language 2nd edition", Prentice Hall |
Xin cảm ơn bác Falleaf. Em mới học về Pic và mong tìm hiểu một trình dịch C hoàn chỉnh cho Pic. Qua thông tin mà bác cho biết ở trên thì C30 quả thật là rất bổ ích. Tuy nhiên, em vẫn chưa hiểu là hiện có cả C18 và C30, Sự khác biệt của nó là gì. Em thường làm với chíp AVR tuy nhiên với các dự án đòi hỏi phải có chíp mạnh với yêu cầu về xử lý 16 bít hay 32 bít cũng như việc đảm bảo chất lượng thì dùng Pic vẫn đảm bảo hơn. Vì thế mong bác chỉ bảo thêm.
Em rất cảm ơn. |
Trích:
Cũng thông tin thêm cho bạn là Microchip hiện đã có dòng vi điều khiển/xử lý số 32-bit là PIC32, với trình dịch C32 (cũng được họ cung cấp miễn phí phiên bản Student Edition). Thân, |
Chân thành cảm ơn bac Namqn. Em vừa vào trang microchip.com và có tìm hiểu được một số vấn đề về PIC với các trình dịch. Về bản Studen mới nhất của C18 là v3.15 hay V3.10 và C30 là bản 3.02. Tuy nhiên em tìm crack trên google chỉ kiếm được đến C18 V3.0 mà thôi. Trong khi em thì lại không có bản C18 3.0. Bác có bản crack hay bản full của C18 và c30 với version gần đây không? Làm ơn gửi cho em được chứ ah. Version khoảng từ 2.0 trở lại đây chẳng hạn.
Em xin cảm ơn bác! |
Trích:
Trang web của Microchip trước đây có phần lưu trữ đầy đủ các phiên bản trước của các trình biên dịch, hiện nay thì nó chỉ còn lưu trữ một vài phiên bản được Microchip đánh giá là đáng được lưu trữ. Bạn xem link dưới đây: http://www.microchip.com/stellent/id...cName=en023073 Tôi có lưu trữ khá nhiều phiên bản của các trình dịch C18 và C30, tuy nhiên không có sẵn ở trong máy. Tôi sẽ tìm thử và upload lên một host free nào đó, và thông báo cho bạn sau. Thân, |
em muốn lập trình thử về Dispic nhưng chưa load được c30. bác nào có link thì cho em xin với. em đang cần gấp
|
Trích:
http://www.microchip.com/stellent/id...cName=en010065 Thân, |
Em muốn sử dụng thư viện xlcd của C30 để giao tiếp với LCD. Đối với các thư viện khác, chẳng hạn thư viện như thư viện Timer, em thấy rằng chỉ cần include vào project của mình 2 file là file (timer.h) và file (libp30f4011-coff.a)( em dùng 30f4011) là có thể gọi được các hàm khởi tạo và điều khiển Timer rồi. Nhưng khi em làm tương tự với thư viện xlcd thì sau khi đã include file xlcd.h( #include <xlcd.h>) và add vào project thư viện (libp30f4011-coff.s) thì vẫn không thể sử dụng được các hàm trong thư viện xlcd( ví dụ: BusyXLCD()). Mong được mọi người giải thích cho cách sử dụng thư viện xlcd. Em cảm ơn.
|
Trích:
Bạn dùng dsPIC30F4011, còn thư viện XLCD thì mặc định sử dụng đến 11 bit của port D, vậy bạn đã chỉnh sửa lại xlcd.h cho phù hợp với phần cứng của bạn chưa? Thân, |
Em không biên dịch được.
Em đã cop file xlcd.h vào thư mục chứa project của mình và chỉnh sửa nội dụng file này như sau: -Bỏ cặp chỉ lệnh: #if defined(_RD10) ..#endif. Vì 30f4011 không có chân RD10 -Bỏ cặp chỉ lệnh: #if defined(_RD8) && defined(_RD9) && defined(_RD10)... #endif -Thiết lập lại các chân RS,RW,EN, DB0,..DB7 cho phù hợp với mạch của em. Sau đó trong chương trình em đã include file xlcd.h đã chỉnh sửa: Code:
#include "xlcd.h" Nhưng dù em gọi bất kỳ một hàm nào trong thư viện xlcd.h thì đều bị lỗi là undefined reference to `BusyXLCD' (Đây là em lấy ví dụ với việc gọi hàm BusyXLCD()). Mong được mọi người giúp đỡ. Em xin cảm ơn. |
Ngoài ra em thấy rằng phần đầu của file xlcd.h có chú thích về loại lcd được hỗ trợ là P-tec:
Code:
/********************************************************************/ |
Trích:
http://forum.microchip.com/tm.aspx?m...ibrary񎎨 Tôi đã thử dùng thư viện này, nhưng gặp rắc rối ở phần linking (tôi đã giải quyết được lỗi undefined reference to ...). Tuy nhiên, sau khi đọc hai post trên của Calum, tôi cho rằng không cần phải tìm hiểu thêm. Bạn tham khảo tutorial 3 về dsPIC của tôi, tôi đã viết phần lớn các hàm để điều khiển LCD ký tự (đã có code cho C30). Thân, |
Em đã sử dụng được thư viện xlcd để giao tiếp với lcd SD-DM1602A. Thư viện xlcd được viết ra chỉ hỗ trợ cho một số loại chip sau đây( theo tài liệu dsPIC language tools library):
Code:
• dsPIC30F5011 - Copy file xlcd.h( trong thư mục "Microchip\MPLAB C30\src\peripheral_30F_24H_33F\include") vào thư mục của project. Chỉnh sửa lại file xlcd.h như sau: +Bỏ cặp chỉ lệnh: #if defined(_RD10) ..#endif. (Vì 30f4011 không có chân RD10) +Bỏ cặp chỉ lệnh: #if defined(_RD8) && defined(_RD9) && defined(_RD10)... #endif +Sửa lại phần mã định nghĩa các chân RS,RW,EN, DB0,..DB7 cho phù hợp với mạch của ta. Trong thử nghiệm của em, em chọn RS-RD0, RW-RD1, EN-RD2, DB0..DB7-RB0..RB7. - Include file xlcd.h vào trong file nguồn: Code:
#include "xlcd.h" - Mở các file .c đã nói ở trên và bỏ đi các chỉ lệnh biên dịch có điều kiện như sau: Code:
#ifdef _RD10 -> bỏ Code:
#include <p30f4011.h> |
Cho mình hỏi
Code:
/* defines for segment data transfer direction */ Mình sửa file xlcd.h để giao tiếp 4 bit với LCD như này Code:
/********************************************************************/ Code:
#include <p30f4011.h> Code:
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\lcd.o" is out of date. |
Pic24
các bác ơi!
sao em không thấy ai bàn về chủ đề PIC24???? em muốn nghiên cứu về PIC24 nhưng không biết dòng PIC24 nào phổ biến???? tìm trên diễn đàn thì không thấy bàn về PIC24??? các bác giúp em với???? thanks! |
hihi. em cũng muốn tham gia diễn đàn này.
em vừa mới bắt đầu tìm hiểu dsPic, mong anh Namqn chỉ dạy. em làm với dsPIC30f4011, em lập trình như ví dụ 2-1 của anh mà sao khi mô phỏng bằng MPLAB SIM thì chạy không đúng anh Namqn ạ. em đã tính toán là chu kỳ timer1 là 0.5s, thế mà nó ra đến và giây thì TMR1 mới lên 1 đơn vị. hôm nay em tính ra HOANG HOA THAM mua con pic về mô phỏng mạch thật mà hết hàng, chán thật. a Namqn nói giùm em cái mplab sim cái, em cấu hình mục setting là thạch anh 8 MHZ, a cũng nói luôn cho em cách cấu hình cho dspic dùng bộ dao động nội và bộ dao động ngoài với thạch anh 8 Mhz nhé. thanhk a!! |
Trích:
Thân, |
dạ, em đã thiết lập rùi mà nó không có được anh nam ạ.
đây là chuơng trình của em nè: #include "p30f4011.h" //khai bao 4 bo thong so cho dsPic _FOSC(CSW_FSCM_OFF & FRC_PLL4); //tat FSCM va dung tan so noi FRC voi PLL4, CSW CLock Switch:co kha nang tu dong chuyen doi giau cac nguon xung clock //FSCM: giam sat su lam viec cua clock ngoai, neu bi loi se tu dong chuyen vao dung clock internal, o day OFF ca 2 _FWDT(WDT_OFF); //tat Cho giu nha _FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI);//cho pep reset MCLR, nobrownout _FGS(CODE_PROT_OFF); //ko bao ve code #define LED _LATD0 void kt_port(void); void kt_timer1(void); //ct chinh void main(void) { kt_port(); kt_timer1(); while(1){};///cho ngat } //ct con khoi tao cac cong vao ra noi voi led void kt_port() { LATD=0; //_TRISD0=0;//D0 la ngo ra TRISD=0xFFFE; } void kt_timer1() { TMR1=0;//xoa thanh ghi dem timre1 ve 0 PR1=0xF424; _T1IF=0;//xoa co ngat T1CON=0x8020;//1:64(10), T1ON=1 _T1IE=1;//cho phep ngat } //ct xu ly ngat void _ISR_T1Interrupt(void) { _T1IF=0;//xoa ngat _LATD0^=1;//xor bit } |
chào các bác.cho em hỏi một chút về c30.các bác có thể diễn giải giúp em dòng code sau được không : " extern volatile T2CONBITS T2CONbits __attribute__((__sfr__));"
em không hiểu __attribute__((__sfr__)) là gì. rồi một loạt các khai báo tương tự thế trong các thư viện của c30. __attribute__((__sfr__,__deprecated__,__unsafe__)) vvv em đã đọc qua help của c30 mà không hiểu mấy, mong các bác chỉ giúp.em mới tìm hiểu c30. |
Trích:
Mấy cái _sfr_ , _unsafe_ được khai báo địa chỉ trong support/dspic33f/gld (nếu dùng dspic33) Mấy cái này em cũng chưa hiểu rõ lắm. Ví dụ chỗ này nhé: Code:
__extension__ typedef struct tagCLKDIVBITS { unsigned PLLPRE:5; // PLLPRE chia 5 hay PLLPRE gồm 5 bít ?, lôi nó ra như thế nào Muốn dùng từng bít của thanh ghi CLKDIV thì làm thế nào ? Hoặc muốn cấu hình PLLDIV, PLLPOST hoặc PLLPRE thì làm thế nào ? Giả sử em muốn cấu hình dùng thạch anh ngoài sao cho FCY= 40MIPS, em tính ra các hệ số M=32, N1=N2=2, thì thiết lập các thông số này ở đâu ? Mấy cái configuration bit nữa , nếu cấu hình trong đó thì ko phải code nữa có phải ko ạ ? Ngoài các biến của C chuẩn, C30 còn có các loại biến nào khác không ? |
Em muốn lập trình dsPIC bằng C30 Cho dsPIC thay vì sử dụng CCS ,nhưng mà trong MPLAP IDEv8.33 em không biết phải sử dụng như thế nào ,nên khi biên dịch một bài đơn giản nhất cũng báo lỗi .
các Anh có thể chỉ cho em các sử dụng C30 trong MPLAB được không ?và nếu có thể cho em một bài mẫu . |
Trích:
Thân, |
cảm ơn anh Namqn đã gúp đỡ em
Em mới cài MPLABCdsPICStdEvalv3_20_B.exe thêm vào MPLAB
Anh có thể hướng đẫn giúp em làm một bài mâu đơn giản nhất cho nó chạy được không? |
Em có một vấn đề không hiểu khi thực hiện biến đổi FFT trong C30, đó là các hệ số twiddle trong lý thuyết là các số phức, vậy khi sử dụng hàm
FFTComplexIP ( int log2N, fractcomplex* srcCV, fractcomplex* twidFactors, int factPage ); thì các hệ số này khai báo làm sao để được số phức? Em xem một số ví dụ thì thấy người ta chỉ khai báo như là các số nguyên 16bit thông thường (các hệ số này thường là số thực chứ ko nguyên?)? Em xin cám ơn. |
Cuối cùng mình cũng đã hiểu, xin trình bày luôn để giúp những ai có thắc mắc giống mình.
Thật ra đó là những số phức, word thứ nhất là phần thực, word kế tiếp là phần ảo của nó. |
Cho em hỏi thêm một câu, trong C30 có hàm đổi từ chuỗi ra số nguyên và ngược lại hay không?
Cám ơn rất nhiều. |
Trích:
char *str1 = "Testing UARTx..."; Khi dùng thì viết putsUART1((unsigned int *)str1); Các bác cho em hỏi với, em dùng icd2 để nạp và debug nhé. Nhưng em ko biết cách cấu hình ID memory trong phần configure, với 1 con bất kỳ thì xem ID memory ở đâu (em tìm cả buổi trên google mà vẫn chưa thông...Hơi kém chút). Nên nó báo lỗi loạn nên. Khi chọn debug thì thấy debug rất chậm. Không biết nạp xong có phải reset hay ko mà có mỗi nháy led mà lúc được lúc không. Khoảng thời gian từ khi nạp xong đển khi bộ PLL được lock là bao nhiêu. Còn phần cấu hình secure segment thì chọn như thế nào Em dùng dsPIC33FJ128MC804. |
Tự trả lời bài viết của mình vậy. Khi dùng debug bằng IDC2 (mà bằng cái gì cũng thế thôi)thì trong phần project/build configuration phải để là mode debug (khônng phải là release).
Nếu nạp bằng phân programmer, nhớ import file .hex vào, khi nạp xong thì vào programmer chọn phần release from reset để chạy. Còn khi nạp lại chỉ vào phần hold in reset. Còn vấn đề nữa là. Dùng các thư viện ngoại vi sẵn có của C30 bằng cách include thêm file.h. Nhưng khi debug thì không thể nhảy vào hàm được. Nếu include cả file .c thì nhảy vào hàm được nhưng trong thư viện của C30, nó tách mỗi hàm thành 1 file .c như vậy mỗi khi dịch lại link 1 đống các file. Vậy có cách nào dồn đống hàm đó vào 1 file không? + Cách 1: Chịu khó gom thủ công thành 1 file .c (cái này em làm rồi, ok ngon) + Cách 2: Tạo ra 1 file .lib (không biết làm thế nào ) Vấn đề là em muốn tạo ra 1 cái file thư viện để khi debug có thể nhảy vào hàm (có thể dịch sang object-file .o rồi include vào project cũng được) |
Edit thư viện Xlcd
Code:
OpenXLCD(EIGHT_BIT & TWO_LINE & SEG1_50_SEG51_100 Code:
LCD162.c: In function 'main': |
loi trong c30
Tại sao trong MPLAB(c30) khi khai báo #include<tenthuvien.h> thì nó báo lỗi là:"No such file or directory" mặc dù 2 file .h và .c đã copy vào trong thư mục project đó rồi. Thư viện này là tự viết, không phải của MicroChip.Nhưng hễ include thư viện của Microchip thi được
|
Trích:
Thân, |
C30 Student Edition có cần license không?
Sau khi em xài dược một thời gian (1-2 tháng gì đó ko nhớ rõ) thì hôm nay biên dịch chương trình trong C30 nó luôn báo lỗi sau:
Code:
Microchip MPLAB C30 License Manager Version v3_20 (Build Date Aug 24 2009). Em đã tải và cài phiên bản Student mà? Không biết phải làm sao? Có ai biết chỉ em giúp? Không lẽ phải tải về cài lại? |
Trích:
Trích:
|
Cám ơn anh, em hiểu rồi, mặc dù báo vậy nhưng vẫn biên dịch được, do em bị lỗi chỗ nào đó (em cũng ko rõ) nên mới bị như vậy, em thử làm một project khác thì đã biên dịch được.
|
Thư viện MDD (microchip solution) thấy hỗ trợ dòng dsPIC33F, nhưng em tìm mãi mà chẳng thấy chỗ cấu hình giao tiếp phần cứng SPI cho dsPIC33F. Không biết có ai viết giao tiếp thẻ nhớ với dsPIC33F cho em hỏi với.?
Với phần SPI, khi đọc dữ liệu về qua SPI, thì thằng clock của SPI có tự động phát không, hay phải write dummy data vào. Có nghĩa là em muốn đợi response của thằng thẻ nhớ thì chỉ đợi hay phải write dữ liệu giả vào để có clk |
lỗi "makes pointer from integer without a cast" là lỗi gì?
Em viết hàm như sau:
Code:
float Euclidean_distance(fractional x[13], fractional y[13]) d= Euclidean_distance(a[13],b[13]) chẳng hạn thì báo 2 warning là: "passing argument 1 of 'Euclidean_distance' makes pointer from integer without a cast" và "passing argument 2 of 'Euclidean_distance' makes pointer from integer without a cast". Chương trình vẫn biên dịch được, nhưng khi đến đoạn gọi hàm đó thì bị reset. Ai có kinh nghiệm xin chỉ giúp em được ko? |
Trích:
Code:
float Euclidean_distance(fractional x[13], fractional y[13]) Code:
d= Euclidean_distance(a[13],b[13]) Bạn phải gọi đúng như sau: Code:
d= Euclidean_distance(a, b) |
Cám ơn anh, nhưng khi em sửa lại là
d = Euclidean_distance(a, b) thì nó warning như sau: "passing argument 2 of 'Euclidean_distance' discards qualifiers from pointer target type". Em xin nói rõ hơn, mảng a[13] của em là một mảng giá trị thay đổi, lưu giá trị tính toán được trong chương trình, còn mảng b[13] là một mảng hằng số em khai báo trong ROM. Anh có ý kiến gì ko? |
Trích:
1 - Với chỉ 13 phần tử bạn hoàn toàn có thể chuyển b[13] về RAM thay vì ROM. 2 - sửa lại khai báo Code:
float Euclidean_distance(fractional x[13], const fractional y[13]) |
Cho em hỏi thêm cách tính độ dài của dữ liệu là hằng số ghi trong ROM của dspic
ví dụ em khai báo như sau: Code:
const unsigned char __attribute__ ((space(psv), address (0x0200))) |
Múi giờ GMT. Hiện tại là 03:41 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam