PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Trục trặc khi Return giá trị (http://www.picvietnam.com/forum/showthread.php?t=6383)

lybao_huy 18-05-2010 08:53 PM

Trục trặc khi Return giá trị
 
Tôi dùng MPLAB IDE ver 8.46. tôi có 3 file h.c, g.h, main.c:
1-h.c chứa hàm unsigned long cal1():
unsigned long cal1(){
return 125100;
}
2-g.h chứa hàm unsigned long cal2().
unsigned long cal2(){
return 125100;
}
3-có 2 trường hợp:
3a- main.c chứa lệnh cal2() và in giá trị 125100 lên màn hình.
3b-main.c chứa lệnh cal1() và in giá trị không chính xác lên màn hình nếu giá trị này lớn hơn 32767.

xin các bạn giải thích dùm

namqn 18-05-2010 11:50 PM

Trích:

Nguyên văn bởi lybao_huy (Post 36121)
Tôi dùng MPLAB IDE ver 8.46. tôi có 3 file h.c, g.h, main.c:
1-h.c chứa hàm unsigned long cal1():
unsigned long cal1(){
return 125100;
}
2-g.h chứa hàm unsigned long cal2().
unsigned long cal2(){
return 125100;
}
3-có 2 trường hợp:
3a- main.c chứa lệnh cal2() và in giá trị 125100 lên màn hình.
3b-main.c chứa lệnh cal1() và in giá trị không chính xác lên màn hình nếu giá trị này lớn hơn 32767.

xin các bạn giải thích dùm

Bạn dùng trình dịch C nào? MPLAB IDE chỉ là ... IDE. Ngoài ra, bạn đang viết code cho chip nào?

Thân,

lybao_huy 19-05-2010 01:11 AM

dùng trình dịch MPLABC30ComboLite_v3_23 cho chip dsp33fj64gp804.
Mong nhận câu trả lời sớm.

bien_van_khat 19-05-2010 01:19 AM

bạn upload project bị lỗi của bạn lên thử.

lybao_huy 19-05-2010 02:06 AM

Đây là Project của tôi đã làm đơn giản để dễ kiểm tra.
http://www.mediafire.com/?zh3zdqy2gdn

bien_van_khat 19-05-2010 09:33 AM

Có vẻ như bạn mới làm với C.

Tất cả các hàm đều phải có khai báo mẫu hàm trước khi sử dụng, nếu ko khai báo mẫu hàm, Compiler sẽ ko biết hình dáng của hàm đó ra sao và sẽ coi hàm đó có kiểu trả về là int, ko có tham số.

lybao_huy 19-05-2010 09:55 AM

mình sửa lại rồi, bạn coi hộ mình, nó cũng bị lỗi.
http://www.mediafire.com/?cootc11hkem

ngocthanh07 19-05-2010 12:07 PM

#include <p33FJ64GP804.h>
#include <libpic30.h>
#include<uart.h>
#include <stdio.h>
#include <math.h>
#include "g.h"

Sao bạn không thử include luôn h.h vào đoạn trên thử xem, chỉ include có g.h thôi vậy

lybao_huy 19-05-2010 12:21 PM

không đựoc bạn à, vì trong file h.c đã include h.h giả sử nếu trong file h.h có định nghĩa các biến (vd: char i; hay là int j;...), nếu bây giờ ta lại include h.h vào trong file EX_0.c hay include nó vào bất cứ file.c nào cũng báo lỗi là multiple definition of ten_bien, có nghĩa là có đa định nghĩa biến,tức cùng một biến là có đa định nghĩa

bien_van_khat 19-05-2010 12:58 PM

file .h vốn ko phải là file dùng để khai báo biến.

ngocthanh07 19-05-2010 02:30 PM

Trích:

Nguyên văn bởi lybao_huy (Post 36135)
không đựoc bạn à, vì trong file h.c đã include h.h giả sử nếu trong file h.h có định nghĩa các biến (vd: char i; hay là int j;...), nếu bây giờ ta lại include h.h vào trong file EX_0.c hay include nó vào bất cứ file.c nào cũng báo lỗi là multiple definition of ten_bien, có nghĩa là có đa định nghĩa biến,tức cùng một biến là có đa định nghĩa

Bạn include file chấm h, trong phần source của project bạn bỏ file h.c ra, không import nó vào thì sẽ không bị cái vụ multiple definition nữa.
Anyway, xin vui lòng hiểu dùm mình là cái này mình chỉ nhớ là như vậy, ko đảm bảo 100%.

lybao_huy 19-05-2010 02:32 PM

Trích:

Nguyên văn bởi bien_van_khat (Post 36138)
file .h vốn ko phải là file dùng để khai báo biến.

Ủa sao vậy tôi có thấy các file mẫu .h của microchip cũng dùng file .h để khai báo các biến mà .

ngocthanh07 19-05-2010 02:34 PM

Àh, mà bạn thử ép cho nó ra long int luôn xem, ép bằng cáh

return (long int)125100


Múi giờ GMT. Hiện tại là 05:01 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