PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   dsPIC - Bộ điều khiển tín hiệu số 16-bit (http://www.picvietnam.com/forum/forumdisplay.php?f=29)
-   -   Các vấn đề với C30 (http://www.picvietnam.com/forum/showthread.php?t=854)

namqn 29-10-2009 11:26 PM

Trích:

Nguyên văn bởi hungnk87 (Post 30705)
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

Bạn thử lại với #include "tenthuvien.h" xem.

Thân,

npbaoduy 06-11-2009 09:57 PM

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).
Copyright (c) 2008 Microchip Technology Inc. All rights reserved.
The MPLAB C30 license has expired.
Options have been disabled due to expired license
Visit http://www.microchip.com/ to purchase a new key.

và không biên dịch được.
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?

namqn 06-11-2009 10:12 PM

Trích:

Nguyên văn bởi npbaoduy (Post 30927)
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).
Copyright (c) 2008 Microchip Technology Inc. All rights reserved.
The MPLAB C30 license has expired.
Options have been disabled due to expired license
Visit http://www.microchip.com/ to purchase a new key.

và không biên dịch được.
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?

Không có chuyện đó đâu bạn. Tôi dùng phiên bản 3.12 từ khi vừa phát hành đến giờ vẫn biên dịch bình thường:
Trích:

Microchip MPLAB C30 License Manager Version v3.12 (Build Date Jan 30 2009).
Copyright (c) 2008 Microchip Technology Inc. All rights reserved.
The MPLAB C30 license has expired.
pic30-coff-cc1.exe: warning: Options have been disabled due to expired license
Visit http://www.microchip.com/ to purchase a new key.
Executing: "F:\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=30F4012 "Vidu4-5.o" -o"Vidu4C30.cof" -Wl,-L"F:\Microchip\MPLAB C30\lib",--script="p30f4012.gld",--defsym=__MPLAB_BUILD=1,--heap=0,-Map="Vidu4C30.map",--report-mem


Program Memory [Origin = 0x100, Length = 0x7f00]

section address length (PC units) length (bytes) (dec)
------- ------- ----------------- --------------------
.text 0x100 0x52a 0x7bf (1983)
.const 0x62a 0xc 0x12 (18)
.init 0x636 0x88 0xcc (204)
.dinit 0x6be 0x88 0xcc (204)
.isr 0x746 0x2 0x3 (3)

Total program memory used (bytes): 0x96c (2412) 4%


Data Memory [Origin = 0x800, Length = 0x800]

section address alignment gaps total length (dec)
------- ------- -------------- -------------------
.nbss 0x800 0 0x2 (2)
.ndata 0x802 0 0x2 (2)
.nbss 0x804 0 0x2 (2)
.data 0x806 0 0x8e (142)
.bss 0x894 0 0x2 (2)

Total data memory used (bytes): 0x96 (150) 7%


Dynamic Memory Usage

region address maximum length (dec)
------ ------- ---------------------
heap 0 0 (0)
stack 0x896 0x76a (1898)

Maximum dynamic memory (bytes): 0x76a (1898)

Executing: "F:\Microchip\MPLAB C30\bin\pic30-bin2hex.exe" "E:\PICProjects\Vidu4C30\Vidu4C30.cof"
Loaded E:\PICProjects\Vidu4C30\Vidu4C30.cof.
----------------------------------------------------------------------
Release build of project `E:\PICProjects\Vidu4C30\Vidu4C30.mcp' succeeded.
Fri Nov 06 22:07:38 2009
----------------------------------------------------------------------
BUILD SUCCEEDED
Thân,

npbaoduy 07-11-2009 09:58 AM

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.

tahi 08-11-2009 11:51 PM

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

npbaoduy 16-12-2009 10:39 PM

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])
{
        float d;
        unsigned int l;
        d=0;
        for (l=0;l<13;l++)
        {
                d+=(x[l]-y[l])*(x[l]-y[l]);
        }
        d=sqrt(d);
        return d;
}

khi gọi hàm để sử dụng, ví dụ
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?

bien_van_khat 17-12-2009 08:35 AM

Trích:

Nguyên văn bởi npbaoduy (Post 32304)
Em viết hàm như sau:
Code:

float Euclidean_distance(fractional x[13], fractional y[13])
{
        float d;
        unsigned int l;
        d=0;
        for (l=0;l<13;l++)
        {
                d+=(x[l]-y[l])*(x[l]-y[l]);
        }
        d=sqrt(d);
        return d;
}

khi gọi hàm để sử dụng, ví dụ
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?

Code:

float Euclidean_distance(fractional x[13], fractional y[13])
Mẫu hàm này có nghĩa là bạn phải truyền 2 đối số cho hàm là 2 con trỏ kiểu fractional, 2 con trỏ này trỏ tới mảng kiểu fractional kích thước 13 phần tử.
Code:

d= Euclidean_distance(a[13],b[13])
Khi gọi như trên là bạn đang truyền 2 đối số kiểu fractional.
Bạn phải gọi đúng như sau:
Code:

d= Euclidean_distance(a, b)

npbaoduy 17-12-2009 09:49 AM

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?

bien_van_khat 17-12-2009 10:44 AM

Trích:

Nguyên văn bởi npbaoduy (Post 32314)
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?

Có 2 cá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])

npbaoduy 23-12-2009 12:46 AM

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)))
        chuoi1[]="Bao Duy 40500441\0";
const fractional __attribute__ ((space(psv), address (0x0400)))
        toi1[13]={4890, 2102, 569, 947, 618, 733, 546, 634, 455, 552, 386, 471, 302};

Lúc biên dịch nó tính độ dài là của chuoi1 là 27byte, của mảng toi1 là 39byte? Sao nó lại tính được như vậy?

namqn 23-12-2009 08:02 AM

Trích:

Nguyên văn bởi npbaoduy (Post 32463)
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)))
        chuoi1[]="Bao Duy 40500441\0";
const fractional __attribute__ ((space(psv), address (0x0400)))
        toi1[13]={4890, 2102, 569, 947, 618, 733, 546, 634, 455, 552, 386, 471, 302};

Lúc biên dịch nó tính độ dài là của chuoi1 là 27byte, của mảng toi1 là 39byte? Sao nó lại tính được như vậy?

Mời bạn đọc mục 4.3 trong "dsPIC30F Family Reference Manual".

Thân,

pic.starter 24-11-2010 05:54 PM

Các bác Pro làm ơn cho em hỏi, việc add các file *.h, *inc, *gld trong trình biên dịch có tác dụng gì không? có bắt buộc không?.

Vì em thấy không add thì vẫn biên dịch bình thường. Cụ thể là em dùng MPLAB 8.56 tích hợp C30 3.24, em chỉ lấy file ví dụ.c trong turial của bác NamNQ. Biên dịch bình thường. Mong các bác chỉ giúp. Em cảm ơn.

Delfy_Coltech 26-11-2010 03:01 PM

Hi all,
Trong MPLAB C30 để sử dụng khai báo BYTE thì có cần add thêm thư viện nào không nhỉ?
Sao mình khai báo BYTE i, j;
mà toàn báo lỗi. :(

namqn 26-11-2010 04:20 PM

Trích:

Nguyên văn bởi Delfy_Coltech (Post 40379)
Hi all,
Trong MPLAB C30 để sử dụng khai báo BYTE thì có cần add thêm thư viện nào không nhỉ?
Sao mình khai báo BYTE i, j;
mà toàn báo lỗi. :(

Bạn hãy dùng kiểu unsigned char. Ví dụ: unsigned char i, j;

Thân,

Delfy_Coltech 26-11-2010 05:21 PM

Cảm ơn A Nam.
Có thể dùng cách của A, hoặc dùng typedef unsigned char BYTE


Múi giờ GMT. Hiện tại là 04:12 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam