C++ bugs @.@

23 views
Skip to first unread message

phamhuudangnhat

unread,
Oct 19, 2013, 12:24:12 PM10/19/13
to ss...@googlegroups.com
Hiện tại có 1 bug và em đang bí :( :
Trong file MB1_Misc.cpp, em gọi hàm SysTick_Config (msec); compile thì ok, đến khi link nó báo lỗi "first defined here" ở hàm static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) trong file core_cm3.h. (trong hàm SysTick_Config có gọi đến hàm NVIC_SetPriority). 
Thầy với mấy bạn xem thử :(

Van Hieu

unread,
Oct 20, 2013, 2:32:21 AM10/20/13
to ss...@googlegroups.com
Nhật share project xem thử, lỗi lạ :D


2013/10/19 phamhuudangnhat <phamhuu...@gmail.com>
Hiện tại có 1 bug và em đang bí :( :
Trong file MB1_Misc.cpp, em gọi hàm SysTick_Config (msec); compile thì ok, đến khi link nó báo lỗi "first defined here" ở hàm static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) trong file core_cm3.h. (trong hàm SysTick_Config có gọi đến hàm NVIC_SetPriority). 
Thầy với mấy bạn xem thử :(

--
 
---
You received this message because you are subscribed to the Google Groups "Smart Sensing And Intelligent Controlling" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ssaic+un...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted

DangNhat PhamHuu

unread,
Oct 20, 2013, 4:17:07 AM10/20/13
to ss...@googlegroups.com
Em có đính kèm project ở dưới :)
Có cái lạ là các hàm của CMSIS được hiện thực thẳng trong file header luôn chứ ko phải trong file source code. E thử tạo 1 file test.h khai báo và hiện 1 hàm foo() kiểu như :
//test.h
#ifndef __TEST_H_
#define __TEST_H_

#ifdef __cplusplus
extern "C" {
#endif

void foo (void){
    return ;
}

#ifdef __cplusplus
 }
#endif

#endif

Rồi thử include file test.h ở 2 file khác nhau, và thử gọi hàm foo () thì gặp lỗi tương tự. Thử tạo thêm 1 file test.c và đặt phần hiện thực của foo vào đó, trong file .h chỉ để prototype như thông thường thì ko báo lỗi nữa. Lạ là sao file CMSIS của ARM lại viết như vậy nhỉ, e thử search google e cũng chưa thấy ai bị lỗi đó @@..



-----------------------------------------------------------
Student: Phạm Hữu Đăng Nhật            
StudentID: 51002279
Class: MT10KTTN
Ho Chi Minh University of Technology
Mobile: 0164.968.2716
-----------------------------------------------------------
MBoard-1-EmBlock.zip

Hieu Van

unread,
Oct 20, 2013, 2:12:02 PM10/20/13
to ss...@googlegroups.com
Hi Nhật,

Nguyên nhân là do em chưa sử dụng hàm INLINE. Hàm dạng inline tương tự như macro, trình biên dịch sẽ thay thế lời gọi hàm bằng các lệnh viết trong hàm (khác với gọi hàm thông thường là lệnh nhảy đến chương trình con). Dùng inline khi không muốn tốn thời gian cho chuyển ngữ cảnh, code sẽ lớn hơn. Viết inline nói chung tốt hơn MACRO vì có hỗ trợ phát hiện lỗi biến, truyền thông số tường minh.

Do tương tự macro, nên hàm inline có thể viết luôn trong file .h. Có 3 cách để khai báo: http://gcc.gnu.org/onlinedocs/gcc/Inline.html

Xem qua code thì đang dùng dạng "static". Nguyên nhân lỗi có thể là khi dịch đã chọn kiểu không đúng, hoặc khi dịch cho C++ thì quá trình xử lý hàm inline khác gì đó với C. Em tìm giải quyết theo hướng này thử.

DangNhat PhamHuu

unread,
Oct 20, 2013, 8:28:14 PM10/20/13
to ss...@googlegroups.com
@Thầy : Hình như đã phát hiện được lỗi, do e đặt biến ở trong file .h nên bị vậy :D ko hiểu sao nó lại nhảy vào file core_cm3.h lun, e đọc lại cái build log của nó thì phát hiện ra. :D

-----------------------------------------------------------
Student: Phạm Hữu Đăng Nhật            
StudentID: 51002279
Class: MT10KTTN
Ho Chi Minh University of Technology
Mobile: 0164.968.2716
-----------------------------------------------------------


2013/10/21 Hieu Van <vanh...@gmail.com>
Reply all
Reply to author
Forward
0 new messages