Ve viec viet code cho EBoard

34 views
Skip to first unread message

Hieu Bui-Van

unread,
Aug 23, 2013, 12:25:09 PM8/23/13
to ss...@googlegroups.com
Gửi các em,

Khi viết code điều khiển các EBoard của mình, các em dùng ngôn ngữ C++
với class để viết. Không sử dụng ngôn ngữ C nhe. Code không dùng cấp
phát bộ nhớ động (new, delete, malloc ...)

Thân,
Hiếu

DangNhat PhamHuu

unread,
Aug 24, 2013, 11:38:59 PM8/24/13
to ss...@googlegroups.com
@Thầy : mình dùng IDE hay compiler nào để viết đây thầy ? CoIDE thì dựa trên GCC ARM (có hỗ trợ c++) nhưng CoIDE lại ko hỗ trợ trực tiếp c++ mà mình phải tự config bằng tay.


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


2013/8/23 Hieu Bui-Van <vanh...@gmail.com>


--

--- 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+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

DangNhat PhamHuu

unread,
Aug 25, 2013, 12:20:02 AM8/25/13
to ss...@googlegroups.com
@Thầy : E chưa hiểu mục đích khi mình dùng c++ thay cho c. Nếu dùng c mình vẫn có thể viết theo cách tiếp cận của OOP như cách mà em thấy ST làm khi viết thư viện ngoại vi, hay thư viện GUI cho LCD... 
Với lại nếu mình dùng hệ điều hành thời gian thực như freeRTOS, coOS, hay chibiOS,.. thì em thấy đều được viết trên C cả => mình phải mix code của C với C++ => em ko biết có IDE mã nguồn mở nào người ta config sẵn để làm việc đó hay mình dùng IDE mã nguồn đóng, hay mình tự config một IDE mã nguồn mở như Eclipse để dùng.


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


2013/8/25 DangNhat PhamHuu <phamhuu...@gmail.com>

Hieu Bui-Van

unread,
Aug 25, 2013, 12:40:50 PM8/25/13
to ss...@googlegroups.com
@All: kế họach dự định ban đầu như sau
   - Giai đoạn 1:  dùng Code Sourcery làm trình biên dịch, CoIDE làm IDE
   - Giai đoạn 2: dùng Code Sourcery làm trình biên dịch, sử dụng IDE riêng dựa trên Eclipse (bỏ các chức năng k sử dụng, tối giản hệ thống menu, thêm các plugin tự động download ...)
   - Giai đọan 3: dùng Gcc làm trình biên dịch, tích hợp vào IDE riêng

Lý do dùng Code Sourcery trước: ổn định, tin cậy, đã có nhiều nhóm sử dụng, kiểm nghiệm việc dịch chương trình C++ với nó. Trong khi Gcc cho Arm thì vẫn hướng về C nhiều hơn.
Vậy sao GĐ3 chuyển qua Gcc: vì Mentor Graphic đã mua Code Sourcery, hiện tại vẫn cho dùng miễn phí bản Lite nhưng tương lại k chắc chắn trong khi Gcc luôn là OpenSource

Hiện tại: hôm bữa thử CoIDE với Code Sourcery chưa dịch được, nên tạm thời là GĐ 0, dùng Keil dịch.

Tgi tới tôi k thử với cái này được. Mấy em giúp thử kết hợp xem sao. Bạn nào xung phong hè ?
2013/8/23 Hieu Bui-Van <vanh...@gmail.com>
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.
--
 
---
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.

Hieu Bui-Van

unread,
Aug 25, 2013, 1:13:56 PM8/25/13
to ss...@googlegroups.com
@All: có nhiều lý do

LD1: C++ có một số điểm tốt hơn rất cần thiết. Có thể Google để thấy nhiều người bàn về vấn đề này. Dựa trên link sau https://www.classle.net/content-page/top-10-advantages-c-over-c# thì những ưu điểm sau là quan trọng cho chúng ta
    - 1: Stronger Type Checking ---> rất rõ ràng, giúp code ít bị sai kiểu logic vì sai kêu dữ liệu, rất khó phát hiện
   -
4: User-defined operators and function overloading are supported  ---> thiết kế thư viện gọn gàng, thân thiện người dùng hơn nhiều. VD: khởi tạo ngọai viết với C++ chỉ cần 1 tên hàm với các đối số khác nhau trong khi C cần rất nhiều hàm, nhớ rất mệt
  
- 7: Provides inline functions which combine the efficiency of using macros ---> macro trong C luôn là thứ nhức đầu, dễ sai, và khó phát hiện nhất
   -
8: C++ Compiles most ANSI C code directly and can call compiled C code directly  --->  vẫn tương thích với code C
   -
10: Classes provide extensible types, promoting code reuse  --->  khi viết nhiều thư viện, sẽ thấy việc sử dụng lại code với C++ đơn giản hơn C nhiều

LD2: hiện tại C vẫn là ngôn ngữ chính trong mảng Embedded System. Tuy nhiên, khi sức mạnh của các dòng MCU, MPU lên nhanh, thì việc tối ưu hêu suất với C k còn được đánh giá cao bằng việc dễ dàng phát triển, phần mềm có tính tin cậy, dễ sử dụng lại của C++ (quan điểm cá nhân). Bằng chứng là hiện tại đã có những nhóm dùng .Net, Java cho dòng STM32.

LD3: muốn HLib đi trước, đón đầu xu hướng (tất nhiên vẫn có thđón hụt :D)

LD4: C++ cho dân không chuyên lại dễ hình dung hơn C

LD5: embedded system dần dần hợp nhất với mobile, network, PC mà những mảng này hầu như k dùng C. Có thể dùng Java, .Net ... khác nhau, song điểm chung là tiếp cận theo hướng đối tượng. Clập trình cấp thấp và cấp cao đều có thể là OOP thì tốt hơn phải tư duy theo OOP và lập trình cấu trúc.
....

LD n: quan điểm cá nhân :D

Cách viết C giOOP vẫn là giả, khi mở rộng sẽ gặp vấn đề.

HĐH mã nguồn mở phổ biến như RTOS đều được viết để có thể biên dịch như C++, nên việc sử dụng k có vấn đề. Tất nhiên có một số hđh k tương thích, nhưng chỉ cần những thằng phổ biến là okie rồi.HĐkhi mở rộng sẽ gặp vấn đềở fádfà ádf àrrrrầ à à fsdádfádf ádfạllksạlf kádljkraủoilkf jầdsfsgsdfj ửeơdamơếếp

< /font>

Đó là ý kiến của riêng tôi, mấy em thấy thế nào thì trao đổi thêm. Nhiều người, nhiều ý kiến sẽ tốt hơn.



2013/8/25 DangNhat PhamHuu <phamhuu...@gmail.com>


2013/8/23 Hieu Bui-Van <vanh...@gmail.com>
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.
--
 
---
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.

DangNhat PhamHuu

unread,
Aug 26, 2013, 9:01:51 AM8/26/13
to ss...@googlegroups.com
@Thầy : e đã compile được c và c++ (project mẫu của thầy trên keil) trên IDE Em::Block (open-source) với ARM GCC, em sẽ viết một template mẫu trên Em::block như project mẫu của thầy để thầy với các bạn xem thử. :D
http://www.emblocks.org/web/ 

Vấn đề mình viết bằng c++, mình đã compile được trên gcc rồi thì mình cứ thế mà quất thôi. :D. Em thấy trên các forum ngoài những mặt tốt của c++ so với c, thì người lập trình cần phải hiểu rõ c++, những hạn chế của c++ khi viết những ứng dụng cho hệ thống nhúng, ... để mình có thể tránh lỗi tiềm ẩn khi viết. Em nghĩ mình có nên có một bạn nào đó làm 1 bài tìm hiểu về c++ trong hệ thúng nhúng ko thầy để sau này mình viết cho suôn sẻ và hiểu rõ ràng về nó? :D

Còn về mạch debugger : thì em thấy có 1 dự án http://sourceforge.net/apps/trac/libswd/ để hỗ trợ SW trên openOCD dùng FT2232 nhưng hình như phải thiết kế lại mạch FT2232 lại để có thể hỗ trợ SW (giống như cái KT-Link http://shop.kristech.pl/p/24/257/kt-link-.html), dần dần dự án này sẽ được tích hợp vào OpenOCD luôn (như e thấy trên trang web). 
Ngoài ra thì người ta cũng có một số cách khác để hỗ trợ SW giống như http://snowcap.fi/blog/2011/11/21/openocd-with-swd/, hay http://www.versaloon.com/.
Em định về mạch FT2232 em sẽ tìm hiểu theo cách dùng SW trên OpenOCD và config openOCD vào IDE để chạy được.
Còn mạch Jlink thì bữa họp tới chắc thầy cho em 1, 2 con STM32F103C8, mạch JLink thì download vào Flash bằng JFlash được rồi, nhưng em chưa kịp test debug thì hình như IC nguồn bị cháy (đầu ra = 5V) => có lẽ con 103 của em cũng die lun rồi.

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


2013/8/26 Hieu Bui-Van <vanh...@gmail.com>

Hieu Bui-Van

unread,
Aug 28, 2013, 12:29:53 AM8/28/13
to ss...@googlegroups.com
@Nhật: em liệt kê lại những bước cần phải config Gcc, EmBlock, project... để có thể dịch được C++ như thế nào để mọi người tham khảo.

@All: ý kiến cần tìm hiểu về lập trình C, C++ của Nhật khá hay. Vậy các thành viên tìm hiểu, rồi làm một report hoặc slide ngắn gọn tuần sau trình bày cùng trao đổi nhe. Nội dung 3 topics
    1. Nên viết code C như thế nào để portable, reliable (tham khảo Code Style, Code Rule, MISRA C)
    2. Ưu và nhược điểm của C, C++, Java khi lập trình cho hệ thống nhúng nói chung và hệ thống nhúng có resource (ram, rom, khả năng tính tóan) hạn chế
    3. Các lưu ý khi dùng C++ cho hệ thống nhúng có resource hạn chế
Các thành viên hiện tại tải nhẹ là Mạnh, Hiển, Thái, Trung, Tiến, chia ra (1) 2 người, (2) 2 người, (3) 1 người tìm hiểu nhe.

Okie không?
2013/8/26 Hieu Bui-Van <vanh...@gmail.com>
10: Classes provide extensible types, promoting code reuse  --->  khi viết nhiều thư viện, sẽ thấy việc sử dụng lại code với C++ đơn giản hơn C nhiều

LD2: hiện tại C vẫn là ngôn ngữ chính trong mảng Embedded System. Tuy nhiên, khi sức mạnh của các dòng MCU, MPU lên nhanh, thì việc tối ưu hêu suất với C k còn được đánh giá cao bằng việc dễ dàng phát triển, phần mềm có tính tin cậy, dễ sử dụng lại của C++ (quan điểm cá nhân). Bằng chứng là hiện tại đã có những nhóm dùng .Net, Java cho dòng STM32.
& lt; /font>

DangNhat PhamHuu

unread,
Oct 12, 2013, 11:11:47 PM10/12/13
to ss...@googlegroups.com
@Thầy : ngày trước khi các nhóm biên dịch c++ thì lấy ở đâu file startup và linker script vậy thầy. Có vẻ là c++ có thêm một vài chỗ ở 2 file đó để dịch được ổn định. Còn việc gọi hàm c trong file cpp hay ngược lại thì như thế nào thầy ? Em thấy người ta sử dụng khai báo extern "C" ?.?

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


2013/8/28 Hieu Bui-Van <vanh...@gmail.com>

Hieu Van

unread,
Oct 14, 2013, 4:46:08 PM10/14/13
to ss...@googlegroups.com
Nếu biên dịch với Keil thì đã có sẵn khi cài chương trình. Code hiện tại thì overide startup bằng thư viện của ST còn linker thì để nguyên.

Việc gọi hàm trong C từ C++ thì như code C++ gọi hàm global, không có vấn đề gì. C gọi C++ thì các hàm trong C++ ở dạng global, không được bỏ bên trong class.

Riêng các file .h, khi khai báo các hàm và được include trong nhiều file khác nhau thì phải bổ xung extern "C" để không bị trình biên dịch C++ xử lý sửa lại tên hàm. Và để tương thích với trình biên dịch C thì có kiểm tra tiền xử lý #ifdef là vì vậy

DangNhat PhamHuu

unread,
Oct 14, 2013, 9:32:04 PM10/14/13
to ss...@googlegroups.com
À, trong keil thì đơn giản rồi thầy, ý em là những nhóm dịch c++ bằng gcc/g++, lần trước khi config emblock và coIDE em thấy cách của em cũng chạy được nên bỏ qua startup và linker, mặc định là 2 file đó của IDE là chạy ổn.
E tìm được trong GNU arm có example c++, và có sẵn file startup + linker script, người ta nói mình chỉ cần sửa mem layout trong file linker là có thể port được. E ko chắc là 2 file này lắm nên post lên thầy xem thử :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/15 Hieu Van <vanh...@gmail.com>
samples.zip

Hieu Van

unread,
Oct 16, 2013, 2:03:10 PM10/16/13
to ss...@googlegroups.com
Hi Nhật,

Trước h ở trường chưa có nhóm nào dịch C++ cho STM32 cả :D

Các nhóm trên thế giới thì tòan thấy dùng CodeSourcery (vd mapble leaflab là hòan chỉnh)

Về startup, trong file của em chỉ mới hỗ trợ cho CPU CortexM3, chưa export interrupt. Em có thể dùng startup trong thư viện standard của ST (trong phần CMSIS) thay vào thì đảm bảo và nhanh. Chú ý ST viết những file startup khác nhau cho từng dòng.

Phần linker thì chưa xem nữa :D

DangNhat PhamHuu

unread,
Oct 17, 2013, 7:19:58 AM10/17/13
to ss...@googlegroups.com
@Thầy : Dạ, file startup đó generic nên chỉ có core CM3 thôi, nếu mình thích thì mình có thể thêm vào các khai báo IRQ vào vetor table của nó ( :P ). Lúc trước em có tìm thấy 1 bài người ta viết về các tạo 1 toolchain cho C/C++, trong đó có đề cập đến thêm vào 1 vài dòng lệnh trong file startup và linker để hỗ trợ C++, (hình như để hỗ trợ cho các static constructors và destructor). Lúc đó e chưa hiểu nên bỏ qua phần startup và linker script, giờ vẫn chưa hiểu rõ (:D) nên e so sánh các file startup, linker và đoạn code để hỗ trợ c++ trong tài liệu :
- Linker :
Linker script của example c++ trong GNU ARM (lần trước e đưa thầy), linker script trong emblock phần lớn đều giống nhau và đều có đoạn code mà trong tài liệu đề cập. Chỉ khác : linker example C++ của GNU có thêm 1 số hàm 
 *   __copy_table_start__
 *   __copy_table_end__
 *   __zero_table_start__
 *   __zero_table_end__
em ko hiểu nó để làm gì nên ko chắc thiếu có sao ko @.@

Startup của example GNU và startup của emblock khá giống nhau (ngoại trừ phần vector table cho các external int), startup của ST thì hơi khác, e nghĩ chắc do style viết của nó.

Em mới chỉ xem trên emblock, coIDE thì sửa lại startup và build.xml (linker script của nó) cũng hơi lằng nhằng nên e chưa đụng. :)
http://www.brc-electronics.nl/c (cách sửa lại trong coIDE)


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


2013/10/17 Hieu Van <vanh...@gmail.com>
Building_bare-metal_ARM_with_GNU.pdf
emblockLinker.ld
startup_stm32f10x_hd_Emblock.s
gcc.ld
startup_ARMCM3.S
Message has been deleted

DangNhat PhamHuu

unread,
Oct 22, 2013, 7:41:59 AM10/22/13
to ss...@googlegroups.com
@Thầy : về chuyện hôm qua mình nói, thì bleeding edge (BET) toolchain là cái này http://www.freddiechopin.info/en/articles/35-arm/87-bleeding-edge-toolchain-o-co-chodzi
Trên trang đó cũng có đề cập một chút về lịch sử : GNU ARM embedded toolchain (GAE) mới chỉ bắt đầu xuất hiện từ cuối năm 2011 do nhóm Linaro hợp tác với ARM phát triển, sau khi Mentor mua CodeSourcey vào năm 2010 (vì bản Lite của CS ko hỗ trợ Hard Floating point), trước đó có 1 số GNU toolchain khác như YAGARTO,... BET của tác giả đó cũng chủ yếu dựa trên GAE với tối ưu để đạt được hiệu suất chư CS.
Vì em thấy GAE được phát triển và duy trì bởi nhân viên của ARM (theo trên trang web của GAE) và định kỳ mỗi năm sẽ có 1 phiên bản mới, trong tài liệu của nó cũng đề cập hỗ trợ C, C++, Obj-C, Obj-C++, cũng như có cung cấp example, linker script, startup mẫu cho C++. Linker script, startup mẫu mới nhất e thấy mình có thể lấy trên specification của CMSIS trực tiếp từ ARM.
Nên e chưa thể khẳng định được j nhiều nhưng e thấy cũng đáng để mình dùng thử. :D 
https://launchpad.net/gcc-arm-embedded (trang web của GCC ARM embedded)
http://www.linaro.org/ (trang web của nhóm Linaro)...

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


2013/10/22 DangNhat PhamHuu <phamhuu...@gmail.com>
@Thầy : về chuyện hôm qua mình nói, thì bleeding edge (BET) toolchain là cái này http://www.freddiechopin.info/en/articles/35-arm/87-bleeding-edge-toolchain-o-co-chodzi
Trên trang đó cũng có đề cập một chút về lịch sử : GNU ARM embedded toolchain (GAE) mới chỉ bắt đầu xuất hiện từ cuối năm 2011 do nhóm Linaro hợp tác với ARM phát triển, sau khi Mentor mua CodeSourcey vào năm 2010 (vì bản Lite của CS ko hỗ trợ Hard Floating point), trước đó có 1 số GNU toolchain khác như YAGARTO,... BET của tác giả đó cũng chủ yếu dựa trên GAE với tối ưu để đạt được hiệu suất chư CS.
Vì em thấy GAE được phát triển và duy trì bởi nhân viên của ARM (theo trên trang web của GAE) và định kỳ mỗi năm sẽ có 1 phiên bản mới, trong tài liệu của nó cũng đề cập hỗ trợ C, C++, Obj-C, Obj-C++, cũng như có cung cấp example, linker script, startup mẫu cho C++. Linker script, startup mẫu mới nhất e thấy mình có thể lấy trên specification của CMSIS trực tiếp từ ARM.
Nên ý kiến của bản thân e là nó cũng đáng để mình thử. :D 
https://launchpad.net/gcc-arm-embedded (trang web của GCC ARM embedded)
http://www.linaro.org/ (trang web của nhóm Linaro)



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


2013/10/17 DangNhat PhamHuu <phamhuu...@gmail.com>
Reply all
Reply to author
Forward
0 new messages