Học lập trình MCU, bắt đầu từ đâu ?

Chào các bạn, sắp kết thúc khóa học, mình có 1 số lời chia sẽ về cách tiếp cận lập trình nhúng 1 cách nhanh nhất!
Bắt đầu học MCU thì phải học qua môn VXL (MPU), môn này giúp chúng ta hiểu được cách làm việc cơ bản của 1 CPU ( các MCU đều hoạt động ná ná nhau). Nắm vững lập trình ASM. Nếu có 1 bạn nào viện cớ "sau này tao lập trình C, C lếch lếch thì học ASM làm gì chứ", bạn đó hãy coi chừng vì ASM là nền tảng cho bạn hiểu rõ mọi thứ trong C.
Sau khi đã nắm được ASM thì hãy bắt tay vào lập trình ASM trên 1 board 8051 vì nó dễ dàng hơn cả. Vì sao không phải là PIC chẳng hạn ?

Thứ nhất 8051 trực tiếp phục vụ cho 1 số môn học ( VXL, TNVXL mấy môn này dễ rớt).
Thứ hai, ASM cho 8051 là dễ nhất rồi, không phải mất thời gian học thêm ASM của PIC hoặc AVR.
2 lí do trên là quá thuyết phục rồi!

Khi đã vững vàng thì hãy ôn lại kiến thức C đã phần nào bị mai một mà phần trọng tâm là pointer ( cách sử dụng, các loại cú pháp..). Cú pháp của pointer rất quan trọng, nó giúp bạn hiểu được nguời ta viết cái gì.

Và bắt tay vào lập trình C.Chọn MCU gì? Bắt đầu từ đâu?
Chọn MCU:
- giá
- ổn định
- phổ biến (nhiều người xài)
Kết luận nên chọn MSP430, AVR, ARM và hãy tránh xa PIC. Lí do:
-AVR giá cả như PIC mà chạy nhanh hơn nhiều, mức độ phổ biến thì tùy những người xung quanh của mấy bạn.
-MSP430 TI cho sample miễn phí. Kho application đồ sộ kinh dị, nhìn mà phê luôn, thứ gì cũng có. Bị cái là mạch nạp giá rẻ có 1 anh còn đang nghiên cứu, nhưng chắc là sẽ được thôi.
-ARM cortex m0 của NXP giá rất rẻ 60k mà chạy vèo vèo, ăn đứt hết cả đám trên. Và clb mới có 1 mớ cho các bạn xin hay mượn (không biết được không ?)
-PIC tuy phổ biến nhưng mắc, chạy chậm nhất trong đám AVR, MSP430, ARM, RENESAS. Tuy hơn được 8051 chút nhưng không thể nói là bước tiến về tốc độ. Giải thích thêm: PIC chạy thạch anh 4Mhz (phổ biến mà) thì cycle là 1Mhz = 8051 chạy thạch anh 12Mhz, về hiệu năng thì xem xem, không khác biệt, các dòng 8051 mới của NXP đều hơn mấy con PIC 16f, 18f về tốc độ cũng như giá thành ( ra Thien Minh có bán hết) và có luôn IDE+C compiler của Keil.
-ARM hiện nay là phổ biến nhất. Các dòng CM3 của NXP, LM có code sample rất dễ hiểu và được viết để phục vụ mục đích học tập nên dễ vô đầu ( cái này mình xài rồi nên biết). Ngoài ra, ARM dòng LM của TI cho sample miễn phí (nhưng hơi khó xài vì mạch phải có JTAG kẻo bootloader mà ngủm thì không có gì để mà nạp lại, NXP thì BL nằm luôn trong bootrom nên không lo, không thiết kế JTAG cũng không sao). Thêm nữa là Keil simulate mấy peripheral hơi bị hay nên bạn nào túng quá thì có thể học chay trong thời gian để giành tiền đặt hoặc mua mạch. Khi bạn có phần cứng trong tay thì dễ dàng nạp và debug mà chẳng cần JTAG (ngoại trừ LM của TI). Chỉ cần 1 board USB->UART là đủ để làm mọi thứ.

Nói thì cũng biết mình khuyên các bạn nên tìm hiểu ARM. Tuy đã xài PIC nhưng có nhiều lí do mà mình không muốn gặp lại nó ( có thể là do dùng PIC đầu tiên nên thiếu hiểu biết về lập trình dẫn đến gặp nhiều khó khăn nên có ác cảm__ nhất là do hồi xưa không biết debug qua UART mà cái PICkit để debug giá tới 450k nên phải debug qua LCD và phím bấm)

Sau khi đã nắm vững lập trình C cho MCU thì bạn chuyển qua nghiên cứu ASM của MCU và compiler-linker của MCU đó. Vì các công ty chuyên về phần mềm nhúng rất cần những người hiếu ASM, hiểu compiler, linker hoạt động như thế nào.

Đó là những gì mình muốn chia sẻ. Các bạn nên tùy vào "tình thế" mà chọn đường cho mình. Tất nhiên là chẳng có gì khó để nắm rõ hết các dòng MCU phổ biến hiện nay. Nhưng theo kiểu cái gì cũng biết chút chút thì không nên. Chút các bạn thành công!
 

tungbk

Cố Vấn CLB
Staff member
ARM phổ biến sau vụ RYA vừa rồi và nhiều bạn hiện đang dùng làm đồ án còn về TI tuy sample free nhưng dùng rất ít. Anh Đạt có thể giới thiệu chi tiết làm sao làm việc với MSP430 như: bắt đầu từ con nào, tài liệu , các dòng của nó tính năng ra sao, dùng trình dịch nào, mạch nạp loại gì...(lên trang TI là nhìn như ma trận luôn không biết đường nào mà lần)
Anh lỡ giới thiệu rồi viết thêm bài về dòng MSP430 nữa thì tốt quá.
 
Sorry em, MSP430 thì anh chưa đụng tới, nếu muốn quánh code con này thì chạy qua kiếm ông Thiên Hải hoặc đợi vài bữa nữa anh Trọng bên lớp tài năng là luận văn bằng con này giới thiệu cho các bạn.
Trình dịch thì có nhiều, nhưng IDE+trình dịch thì có IAR ngon, CCS của TI cũng ngon ( có điều hơi nặng).
Về MSP430 thì cách sử dụng nó gần giống với PIC. Và trong thư viện khai báo các struct cho các module rất good, dễ xài như bọn ARM NXP.
Còn ARM TI thì dòng LM3S thì phang con nào cũng được, chỉ cần nạp thêm cái Bootloader là xài y chang ARM của NXP luôn.
 
mình cũng góp ý thêm cho các bạn khi học ARM mà đặc biệt là ARM cortex thì trước tiên nên đọc về cấu trúc CORE của nó. tất cả mọi thứ gần giống như học 8051 vậy, và cách thức mà CORE đó thực thi chương trình. lúc đó khi bắt tay vào lập trình thì mình sẽ tận dụng được tất cả các tài nguyên của nó, làm thế nào để tối ưu hoá một chương trình để cho việc tăng tốc xử lý của CORE. nói chung học ASM là điều kiện tốt nhất để học một dòng vi điều khiển đến khi nắm được cấu trúc của nó rồi thì nọi thử sẽ trở nên đơn giản hơn rất nhiều khi chuyển sang viết bằng C và để thấy rõ đặc điểm giống nhau của các dòng ARM cortex của các nhà sản suất ARRM thì chắc chắn phải học ASM thì mới thấy rõ được. còn không biết như anh đạt nói có đúng không chứ em thấy thằng TI chỉ cho sample chỉ có con LM3s8962 còn các dòng LM3s9x thì không thấy nó cho sample.
 
Do là core giống nhau nên tập lệnh asm giống nhau bạn à, ví dụ như core của CM3 là ARMv7-M thì hầu như mọi thứ đều như nhau, chỗ khác nhau là peripheral và vector table cách nhà sản xuất viết startup code cho MCU của họ.
Còn các core khác nhau thì đúng là khác nhau một ít về cách fetch code, các tập lệnh hỗ trợ ví dụ ARM9TDMI và ARM9E. ARM9E hỗ trợ DSP nên khi chạy ứng dụng DSP đã port sang tập lệnh DSP của nó thì chạy tốt hơn bình thường nhiều.
ASM quan trọng ở đây là khi mình sử dụng OS, custom bootloader và một số thứ mà mình muốn chương trình chạy theo cách riêng của mình chẳng hạn như bạn muốn tối ưu phép nhân ma trận chẳng hạn.
 
Top