# Lập Trình Nhúng dành cho Sinh Viên > Private blog | Tạ Lục Gia Hoàng ## Posts - [BeagleBoneBlack Serial Debug Cách Nối Dây Để Đọc Log Của U-Boot Và Kernel](https://talucgiahoang.com/blog/beagleboneblack-serial-debug-cach-noi-day-de-doc-log-cua-u-boot-va-kernel/): Cách Nối Dây Serial Để Đọc Log U-Boot và Kernel. - [Thông Báo Hết Hàng BeagleBone Black năm 2025](https://talucgiahoang.com/blog/thong-bao-het-hang-beaglebone-black-nam-2025/): Board BeagleBone Black cuối của mình đã bán xong. Vậy là hết lô hàng giá rẻ đợt này. Mình không biết khi nào tìm được nguồn hàng rẻ để nhập về bán tiếp. Hiện tại giá bán BBB ở Việt Nam có tiệm bán giá hơn 2 triệu!!! - [Tìm Hiểu Embedded Linux Bootloader](https://talucgiahoang.com/blog/tim-hieu-embedded-linux-bootloader/): Bootloader làm việc gì? Trong một hệ thống Linux nhúng (embedded Linux system), bootloader có hai công việc chính: khởi tạo hệ thống (initialize the system) tới một cấp độ cơ bản và tải kernel lên (load the kernel). Thực tế, công việc thứ nhất là phụ trợ cho công việc thứ hai ở chỗ nó chỉ cần tạo được những thứ cần thiết đủ để hệ thống tải kernel lên Ngay sau khi bật nguồn hoặc reset, dòng code đầu tiên của bootloader được thực thi (execute), hệ thống ở trong một trạng thái tối thiểu. Bộ điều khiển […] - [Tại sao người Trung Quốc đang thoái Đảng Cộng sản?](https://talucgiahoang.com/blog/tai-sao-nguoi-trung-quoc-dang-thoai-dang-cong-san/): Tại sao người Trung Quốc đang thoái Đảng Cộng sản? Từ khi cuốn sách “Cửu Bình” được công bố, nhiều người dân đã nhận rõ bản chất tà ác của ĐCSTQ. Từ đó một làn sóng thoái đảng với hàng chục nghìn người thoái đảng mỗi ngày đang lan rộng vì mọi người hiểu rằng việc từ bỏ liên hệ với ác đảng tà linh là rất cấp bách. Các bạn có thể làm theo hướng dẫn dưới đây nếu cũng muốn công bố rút khỏi đảng, đoàn, đội hoặc các tổ chức của đảng cộng sản. Tại sao người Trung Quốc trước tiên […] - [Hypervisor Là Gì](https://talucgiahoang.com/blog/hypervisor-la-gi/): Hypervisor (hay còn gọi là Virtual Machine Monitor – VMM) là một phần mềm, firmware hoặc phần cứng cho phép tạo và quản lý các máy ảo (virtual machines). Nó đóng vai trò trung gian giữa phần cứng vật lý và các hệ điều hành chạy trên máy ảo. Có hai loại hypervisor chính là Native Hypervisor và Hosted Hypervisor. Native/Bare-metal Hypervisor chạy trực tiếp trên phần cứng vật lý, không cần hệ điều hành chủ và thường được dùng trong môi trường server hoặc datacenter. Ví dụ: VMware ESXi, Microsoft Hyper-V, Xen, KVM (trong một số cấu hình). Hosted Hypervisor chạy […] - [Cách đối xử với nhân viên lớn tuổi tại Nhật Bản](https://talucgiahoang.com/blog/cach-doi-xu-voi-nhan-vien-lon-tuoi-tai-nhat-ban/): Nhân viên lớn tuổi không bị đuổi mà vẫn được trả lương bình thường nhưng không cần phải làm quá nhiều việc. Ở Nhật Bản,Một số công ty sể gọi là “madogiwa-zoku”, hay “bộ tộc bên cửa sổ”, những nhân viên lớn tuổi đã cống hiến hàng thập kỷ cho công ty thường được giữ lại trong biên chế nhưng không giao bất kỳ công việc thực tế nào. Điều này không liên quan đến năng suất mà liên quan đến danh dự — một sự phản ánh truyền thống làm việc trọn đời của Nhật Bản, nơi lòng trung […] - [Giàu mà có đức](https://talucgiahoang.com/blog/giau-ma-co-duc/): Người xưa dạy: tiền là vật ngoại thân. Ai ai cũng biết, ai ai cũng truy cầu. Kẻ tráng niên vì thoả chữ dục; đàn bà đẹp vì vinh hoa; người già vì giải vấn đề cuối đời; kẻ trí vì danh tiếng; quan lại vì làm tốt chức trách, vân vân, vậy nên đều truy cầu nó. Có người thậm chí vì nó mà tranh đấu, kẻ mạnh dấn thân chỗ hiểm; kẻ nóng tính vì nó mà có thể hành hung; kẻ tật đố vì nó nên tức khí mà chết. Dân giàu là cái đạo của vua […] - [Sự Khác Biệt Giữa U-Boot và BIOS Là Gì?](https://talucgiahoang.com/blog/su-khac-biet-giua-u-boot-va-bios/): Khi sử dụng máy tính chúng ta đã nghe nói về BIOS và U-Boot liên quan đến việc khởi động hệ điều hành. Vậy thì giữa chúng khác nhau thế nào? Sau khi tìm hiểu mình nhận ra, có nhiều điểm khác nhau giữa U-Boot và BIOS. Bài viết này sẽ thảo luận về chúng. Lưu ý rằng cả hai đều là phần mềm, không phải thiết bị phần cứng. BIOS là một bootloader cộng với các chức năng sử dụng phần cứng có trên mainboard của máy tính (PC). U-Boot thì chỉ là một bootloader. BIOS là một phần […] - [Cross Compiler Là Gì?](https://talucgiahoang.com/blog/cross-compiler-la-gi/): Trình biên dịch là công cụ dùng để phiên dịch ngôn ngữ lập trình cấp cao sang ngôn ngữ lập trình cấp thấp. Compiler đơn giản chỉ làm việc trên một hệ thống. Nhưng điều gì xảy ra khi ta yêu cầu một compiler có thể biên dịch code sang một nền tảng khác, đây là khái niệm về trình biên dịch chéo (cross-compiler). - [Câu chuyện Hoàng Nam Tiến và FPT](https://talucgiahoang.com/blog/cau-chuyen-hoang-nam-tien-va-fpt/): Sự thăng tiến của Hoàng Nam Tiến không chỉ đến từ cá nhân, mà còn từ việc FPT là doanh nghiệp thân hữu, có quan hệ chính trị sâu với nhà cầm quyền. Đây là “lá chắn” giúp FPT được hưởng lợi thế độc quyền viễn thông và thuận lợi trong các dự án công nghệ với Nhà nước. Vì thế, hình ảnh “doanh nhân tự thân” hay “người làm công nghệ thuần túy” mà truyền thông tô vẽ là sai lệch. Thực chất ông không phải là đại diện của một nền kinh tế thị trường cạnh tranh lành […] - [Các Kỹ Thuật OTA Update](https://talucgiahoang.com/blog/ota-update-techniques/): OTA Update hay Over-the-Air Update là kỹ thuật cập nhật bao gồm các phương pháp phân phối phần mềm để cập nhật không dây (wirelessly) cho các thiết bị, thường thông qua mạng Wi-Fi hoặc mạng di động. Bao gồm những cập nhật firmware, các phần của hệ điều hành, và ứng dụng. Chúng cho phép cải tiến phần mềm từ xa, vá lỗi bảo mật và cải tiến tính năng mà không cần phải truy cập vật lý vào thiết bị. - [[Học BeagleBone Black Cơ Bản] Chương 8: Real-Time I/O](https://talucgiahoang.com/blog/hoc-beaglebone-black-co-ban-chuong-8-real-time-io/) - [[Học BeagleBone Black Cơ Bản] Chương 7: Kernel](https://talucgiahoang.com/blog/hoc-beaglebone-black-co-ban-chuong-7-kernel/): Kernel là trái tim của hệ điều hành Linux (Linux operating system). Nó là phần mềm nhận các yêu cầu cấp thấp (low-level request), như là đọc hoặc ghi file, hoặc đọc và ghi các chân GPIO (general-purpose input/output) và ánh xạ (map) chúng tới phần cứng. Khi bạn cài đặt một phiên bản mới của OS (Xác minh rằng bạn có phiên bản HĐH mới nhất trên Bone), nghĩa là bạn cài một phiên bản của kernel. - [[Học BeagleBone Black Cơ Bản] Chương 6: Internet of Things](https://talucgiahoang.com/blog/hoc-beaglebone-black-co-ban-chuong-6-internet-of-things/) - [[Học BeagleBone Black Cơ Bản] Chương 5: Kiến Thức Cơ Bản Mở Rộng](https://talucgiahoang.com/blog/hoc-beaglebone-black-co-ban-chuong-5-kien-thuc-co-ban-mo-rong/) - [[Học BeagleBone Black Cơ Bản] Chương 4: Động Cơ (Motor)](https://talucgiahoang.com/blog/hoc-lap-trinh-beaglebone-black-co-ban-chuong-4-dong-co/) - [[Học BeagleBone Black Cơ Bản] Chương 3: Hiển Thị (Display) và Các Loại Output](https://talucgiahoang.com/blog/hoc-beaglebone-black-co-ban-chuong-3-hien-thi-display-va-cac-loai-output/) - [[Học BeagleBone Black Cơ Bản] Chương 2: Cảm Biến (Sensor)](https://talucgiahoang.com/blog/hoc-beaglebone-black-co-ban-chuong-2-cam-bien/) - [[Học BeagleBone Black Cơ Bản] Chương 1: Kiến Thức Cơ Bản](https://talucgiahoang.com/blog/hoc-beaglebone-black-co-ban-chuong-1-kien-thuc-co-ban/) - [BealeBone Black – Build Kernel bằng Yocto Project (hướng dẫn nhanh)](https://talucgiahoang.com/blog/bealebone-black-build-kernel-bang-yocto-project-huong-dan-nhanh/): Hướng dẫn nhanh cách sử dụng Yocto Project để bạn tự build một Embedded Linux Kernel cho BeagleBone Black board. - [Cách Cấp Nguồn Cho BeagleBone Black Bằng Pin LiPo 3.7V](https://talucgiahoang.com/blog/cach-cap-nguon-cho-beaglebone-black-bang-pin-lipo-3-7v/): Làm sao để cấp nguồn cho BeagleBone Black bằng pin LiPo 3.7V? Giả sử chúng ta cần kết nối board với động cơ DC hoặc những thiết bị khác mà tiêu thụ nhiều điện. Làm sao để cung cấp đủ dòng cho hệ thống hoạt động. - [C – Callback Function](https://talucgiahoang.com/blog/c-callback-function/): Callback function hay hàm callback trong lập trình C là gì? Callback function là những hàm cực kỳ linh hoạt, đặc biệt là trong lập trình hướng sự kiện (event-driven programming). Khi một sự kiện cụ thể được kích hoạt (trigger), một hàm callback được ánh xạ tới sự kiện đó sẽ được thực thi để phản hồi các sự kiện này. Điều này thường được sử dụng trong các ứng dụng GUI, một hành động như click vào nút nhấn có thể khởi tạo một loạt các hành động được xác định trước. Định nghĩa Callback Function Callback function […] - [Thêm chức năng quyên góp mới – Buy Me a Coffee](https://talucgiahoang.com/blog/them-chuc-nang-quyen-gop-moi-buy-me-a-coffee/): Mình vừa cài thêm một plugin mới có tên là Buy Me a Coffee. Đây là một plugin khá thú vị và thân thiện. Nó giúp fan hâm mộ có thể dễ dàng đóng góp quỹ ủng hộ cho tác giả blog hoặc những nhà sáng tạo nội dung. Người hâm mộ có thể chọn đóng góp một lần hoặc hàng tháng, với số tiền đóng góp chỉ từ 1 USD (hiện tại, plugin này chưa hỗ trợ tiền VND). Để hộ trợ blog này bạn chỉ cần bấm vô biểu tượng ly cà phê ở góc dưới màn hình. […] - [Giới thiệu về U-Boot bootloader](https://talucgiahoang.com/blog/gioi-thieu-ve-u-boot-bootloader/): Bootloader là gì? Bộ vi xử lý (microprocessor) chỉ có thể thực thi mã có trong bộ nhớ (ROM hoặc RAM), trong khi hệ điều hành thường nằm trong các thiết bị có dung lượng lớn như ổ cứng, CD-ROM, ổ USB, máy chủ (network server) và các phương tiện lưu trữ khác (storage media). Khi bộ xử lý được bật nguồn, lúc này bộ nhớ (memory) chưa chứa hệ điều hành, do đó cần có một phần mềm đặc biệt để đưa hệ điều hành (operating system – OS) vào bộ nhớ từ phương tiện lưu trữ (media). Phần […] - [BeagleBone Black – Lập Trình Với Cloud9 IDE Trên Web Browser](https://talucgiahoang.com/blog/bbb-cloud9-ide/): Bài viết này giới thiệu cách điều khiển thông qua giao diện web, sử dụng Cloud9 IDE để viết code cho board. Kết nối board BeagleBone Black với máy tính của bạn bằng cáp USB bán kèm. Lưu ý cần cài driver USB to TTL để máy tính nhận biết board – Link tải phần mềm driver CP210x. Sử dụng trình duyệt web để điều khiển board Bạn có thể sử dụng trình duyệt web như Firefox, Google Chrome, IE, v.v. Kết nối đến địa chỉ beaglebone.local là địa chỉ mặc định của board. Bạn sẽ thấy một giao diện […] - [How To Install Ubuntu 20.04 Desktop on VirtualBox](https://talucgiahoang.com/blog/how-to-install-ubuntu-20-04-desktop-on-virtualbox/): Preparations: Download details: Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what most people will want to use. You will need at least 1024MiB of RAM to install from this image. https://releases.ubuntu.com/20.04/ubuntu-20.04.6-desktop-amd64.iso Step 1: Create a new Virtual Machine (VM) Fill in some information about your virtual machine (Name, Folder, ISO Image). Folder is the directory to store your VM. By default, it is a created folder by VirtualBox  in your user directory. Check the Skip Unattended Installation […] - [Các Phiên Bản Linux Dành Cho BealgeBone Black](https://talucgiahoang.com/blog/linux-tren-bealgebone-black/): Linux distribution là gì Bản phân phối Linux (Linux distribution) là phiên bản Linux đã public và được đóng gói cùng với một bộ chương trình phần mềm (software) và công cụ (tool). Có nhiều bản phân phối Linux khác nhau, thường tập trung vào các ứng dụng khác nhau. Ví dụ, người sử dụng high-end server thường cài đặt Red Hat Enterprise, Debian hoặc OpenSUSE; người dùng máy tính để bàn (desktop) thường cài đặt Ubuntu, Debian, Fedora hoặc Linux Mint. Nó là một danh sách dài vô tận, nhưng cốt lõi của tất cả các bản phân phối […] - [BeagleBone Black – Hướng dẫn cách tắt nguồn an toàn](https://talucgiahoang.com/blog/beaglebone-black-how-to-safely-power-off/): Khi cần tắt nguồn (shut down) của board, mặc dù có thể rút trực tiếp dây điện ra khỏi board để tắt nhưng đó là việc không nên làm vì có thể làm hư mạch điện hoặc hư dữ liệu do mất điện đột ngột dẫn đến hệ thống chưa được tắt đúng quy trình. - [BeagleBone Black – Sử dụng Putty để kết nối SSH](https://talucgiahoang.com/blog/bbb-su-dung-putty-de-ket-noi-ssh/): Hướng dẫn sử dụng BeagleBone Black dành cho người mới – Getting Started Tutorial for Beginners. Bài viết này hướng dẫn cách kết nối bằng SSH giữa máy tính với board. Kết nối SSH là một trong những bước đầu tiên để có thể điều khiển BeagleBone Black và lập trình board trong môi trường Linux. - [Người Đóng Góp Cá Nhân (Individual Contributor) là gì?](https://talucgiahoang.com/blog/nguoi-dong-gop-ca-nhan-individual-contributor-la-gi/): Những người đóng góp cá nhân là những nhân viên không đảm nhiệm vai trò quản lý trong một tổ chức mà thay vào đó, quản lý nhóm-một-người của họ về các dự án và nhiệm vụ. - [ATECC608A – Giới Thiệu Chip Bảo Mật Phần Cứng](https://talucgiahoang.com/blog/atecc608a-gioi-thieu-chip-bao-mat-phan-cung/): ATECC608A là thiết bị mã hóa bảo mật cao, kết hợp bộ lưu trữ khóa dựa trên phần cứng đẳng cấp thế giới với các bộ gia tốc mã hóa phần cứng để triển khai nhiều giao thức mã hóa và xác thực khác nhau. - [Con Trỏ và Chuỗi (Pointers and Strings)](https://talucgiahoang.com/blog/pointer-va-string/): Chuỗi là thành phần phổ biến của nhiều ứng dụng và là một chủ đề phức tạp. Trong chương này, chúng ta sẽ khám phá các cách khai báo và khởi tạo chuỗi khác nhau. Chúng ta sẽ xem xét việc sử dụng literal pool trong các ứng dụng C và tác động của chúng. Ngoài ra, chúng ta sẽ xem xét các thao tác chuỗi (string operation) phổ biến, chẳng hạn như so sánh (compare), sao chép (copy) và nối (concatenate) chuỗi. - [FreeRTOS Mutex, Recursive Mutex](https://talucgiahoang.com/blog/freertos-mutex/): Mutex là binary semaphore mà có cơ chế kế thừa ưu tiên. Trong khi binary semaphore là lựa chọn tốt hơn để thực hiện đồng bộ hóa (giữa các task hoặc giữa các task và một interrupt), thì mutex là lựa chọn tốt hơn để thực hiện loại trừ lẫn nhau đơn giản, do đó MUTual EXclusion. - [FreeRTOS Counting Semaphore](https://talucgiahoang.com/blog/freertos-counting-semaphore/): Counting semaphore thường được sử dụng cho hai mục đích là đếm sự kiện (counting events) và quản lý tài nguyên (resource management). - [FreeRTOS Binary Semaphore](https://talucgiahoang.com/blog/freertos-binary-semaphore/): Semaphore nhị phân (binary semaphore) được sử dụng cho cả hai mục đích loại trừ lẫn nhau và đồng bộ hóa. - [FreeRTOS Queue](https://talucgiahoang.com/blog/freertos-queue/): Hàng đợi (queue) là hình thức chính giao tiếp giữa các task. Chúng có thể được sử dụng để gởi message giữa các task với nhau và giữa các task với các interrupt. - [Các chế độ boot của BeagleBone Black](https://talucgiahoang.com/blog/cac-che-do-boot-cua-beaglebone-black/): BeageBone Black có 4 chế độ boot (boot mode) Phần mềm hỗ trợ các chế độ từ boot USB và từ serial port không được hỗ trợ sẵn bởi beaglebone.org. Bạn cần liên lạc hãng TI (https://www.ti.com/) để hỗ trợ tính năng này. Có một nút (switch) dùng để chuyển giữa các mode. Chú ý: nhấn nút RESET trên board sẽ KHÔNG thay đổi boot mode. Bạn PHẢI tháo và cấp nguồn lại để đổi boot mode. Các chân boot (boot pin) được lấy mẫu trong quá trình khởi động lại nguồn từ PMIC sang processor. Nút reset trên board […] - [Quản Lý Bộ Nhớ Động trong C (Dynamic Memory Management in C)](https://talucgiahoang.com/blog/dynamic-memory-management-in-c/): Phần lớn sức mạnh của con trỏ bắt nguồn từ khả năng theo dõi bộ nhớ được cấp phát động. Khả năng quản lý bộ nhớ thông qua con trỏ tạo ra cơ sở cho nhiều phép toán (operation), bao gồm những phép toán được sử dụng để thao tác với các cấu trúc dữ liệu phức tạp (complex data structure). Để khai thác triệt để những khả năng này, chúng ta cần hiểu quá trình quản lý bộ nhớ động diễn ra trong C. Một chương trình C chạy trong một hệ thống chạy (runtime system). Thông thường môi […] - [Bookworm – Những điểm mới của Hệ điều hành Raspberry Pi](https://talucgiahoang.com/blog/bookworm-nhung-diem-moi-cua-he-dieu-hanh-raspberry-pi/): Bookworm là một phiên bản Debian mới được phát hành dành cho hệ điều hành Raspberry Pi. Năm 2023 Debian phát hành một phiên bản tên là Bookworm. - [Ưu điểm và Nhược điểm của Biến Global](https://talucgiahoang.com/blog/uu-diem-va-nhuoc-diem-cua-bien-global/): Các biến toàn cục (global variable) hay biến global có một tiếng xấu, là chúng có mặt ở mọi chỗ trong mớ code lộn xộn. Chúng liên tục âm mưu với các thế lực bên ngoài không thể giải thích được để kiểm soát luồng code. Chúng không biết ý nghĩa của từ reentrant.* Thuận tiện và lười biếng không phải là lý do duy nhất để sử dụng các biến global. Chúng thực sự có một mặt tốt. Nhưng trước tiên hãy nói thêm một chút về mặt xấu của nó. Biến global không thể lưu trữ trong thanh […] - [GPS và GNSS là gì?](https://talucgiahoang.com/blog/gps-va-gnss-la-gi/): Chúng ta đang sống trong một thế giới mà sóng vệ tinh bao phủ mọi nơi. Thiết bị truyền hình vệ tinh như TV để giải trí hàng ngày, máy thu tín hiệu vệ tinh (như bộ thu tích hợp sẵn trên điện thoại) lại cho con người những thông số hữu ích về vị trí. Trong cuộc sống, bạn rất dễ bắt gặp những cụm từ nói về tín hiệu vệ tinh như GPS, GNSS, nhưng chúng là gì? - [BeagleBone Black – Cách tìm tài liệu hướng dẫn từ nhà sản xuất](https://talucgiahoang.com/blog/beaglebone-black-cach-tim-tai-lieu-huong-dan-tu-nha-san-xuat/): Bài viết dành cho sinh viên hoặc những bạn thích nghiên cứu BeagleBone Black board. Hướng dẫn bạn cách tìm tài liệu tự học dành cho board này do hãng BeagleBoard.org viết. - [BeagleBone Black vs Raspberry Pi 3 – Cái nào tốt hơn?](https://talucgiahoang.com/blog/beaglebone-black-vs-raspberry-pi-3-cai-nao-tot-hon/): Đối với những ai mới bắt đầu tìm hiểu hoặc dự tính mua một con BeagleBone Black, có lẽ câu hỏi đâu tiên mỗi người đều tự thắc mắc là so sánh giữa BeagleBone Black và Raspberry Pi cái nào tốt hơn. Bài viết này sẽ liệt kê những điểm khác nhau cơ bản giữa chúng từ đó đưa ra một vài lời khuyên để lựa chọn phù hợp theo nhu cầu dự án của bạn. - [C – Con Trỏ (Pointer)](https://talucgiahoang.com/blog/c-con-tro-pointer/): Trong lập trình C, con trỏ (pointer) là một chủ đề quan trọng và thú vị. Vài tác vụ chương trình C được thực hiện dễ dàng hơn bằng con trỏ, như là cấp phát bộ nhớ động (dynamic memory allocation). Cấp phát bộ nhớ động không thể thực hiện được nếu không sử dụng con trỏ. Do đó để trở thành một lập trình viên C giỏi, cần phải tìm hiểu về con trỏ. Hãy bắt đầu bằng những bước đơn giản trước. - [Con Trỏ và Hàm (Pointers and Functions)](https://talucgiahoang.com/blog/pointer-va-function/): Con trỏ (pointer) trang bị một khả năng quan trọng cho hàm (function). Nó cho phép dữ liệu (data) được truyền (pass) vào và sửa đổi (modify) bằng hàm. Dữ liệu phức tạp cũng có thể được truyền và trả về từ hàm dưới dạng một con trỏ tới cấu trúc (a pointer to a structure). Khả nẳng chứa địa của của hàm, con trỏ hàm, tạo ra tính linh động để điều khiển luồng thực thi của chương trình. Trong bài viết này, chúng ta sẽ khám phá sức mạnh của con trỏ khi sử dụng với hàm và […] - [Một chút suy nghĩ về Open Source (mã nguồn mở)](https://talucgiahoang.com/blog/mot-chut-suy-nghi-ve-open-source/): Open source (mã nguồn mở), thời sinh viên mình có suy nghĩ dựa vào nó để làm mọi thứ, có khi còn nghĩ có thể dùng để chế cái gì đó đem bán. Nhưng có đúng là dễ dàng như vậy không? Nếu ta cho mình quyền sử dụng miễn phí công sức trí tuệ của người khác để phát minh thứ của mình, vậy theo lý này những thứ ta làm ra dựa trên những phần mềm miễn phí này cũng đều PHẢI miễn phí. Đúng không ? Đúng vậy thật ra nó đã được quy định trong luật […] - [Con Trỏ và Cấu Trúc (Pointers and Structures)](https://talucgiahoang.com/blog/pointer-va-structure/): Kĩ thuật sử dụng con trỏ (pointer) và cấu trúc (structure) - [Sự trở lại của RISC-V HiFive1](https://talucgiahoang.com/blog/su-tro-lai-cua-riscv-hifive1/): Hệ thống trên chip (System on Chip – SoC) Freedom Everywhere 310 (FE310) được phát triển và ra mắt bởi công ty startup SiFive. FE310 là một SoC thương mại đầu tiên của ngành, dựa trên kiến trúc mã nguồn mở. Quay lại năm 2016, kiến trúc RISC-V đã trải qua những giai đoạn có thể gọi là thời kỳ phục hưng. Sau gần một thập kỷ bị lãng quên, hai năm 2018 và 2019 đã chứng kiến một bước tiến lớn trong việc áp dụng tiêu chuẩn RISC-V. Sau lần ra mắt HiFive1 là board phát triển tương-thích-với-Arduino đầu […] - [HiFive1 Kit Phát triển RISC-V Open-Source, Arduino-Compatible](https://talucgiahoang.com/blog/hifive1-kit-phat-trien-riscv/): FE310 là SoC (System-on-Chip) thương mại đầu tiên của ngành dựa trên kiến trúc RISC-V miễn phí, open-source, cùng với kit phát triển HiFive1 - [API and HAL Fundamentals (Phần 1)](https://talucgiahoang.com/blog/api-and-hal-fundamentals-phan-1/): 1. The Wonderful World of HALs Có nhiều công cụ mà các nhà phát triển phần mềm nhúng có thể sử dụng để phát triển phần mềm một cách nhất quán, nhưng công cụ tốt nhất hiện nay có thể cải thiện khả năng tái sử dụng (reuse) và tính di động (portability) của code là API và HAL. Thiết kế một HAL là bước đầu tiên tuyệt vời để phát triển firmware có thể tái sử dụng và độc lập với phần cứng (hardware). HAL hoặc Lớp Trừu Tượng Phần Cứng (Hardware Abstraction Layer), cung cấp cho nhà phát […] - [Device Driver Fundamentals in C (Phần 4)](https://talucgiahoang.com/blog/device-driver-fundamentals-in-c-phan-4/): (Phần 1, Phần 2, Phần 3, Phần 4) Nội dung Chương 3: Device Driver Fundamentals in C 1. Hiểu về Memory Map 2. Planning the Driver Interfaces 3. Design by Contract 4. Assertion Fundamentals 5. Device Driver Models 6. Polling Versus Interrupt-Driven Drivers 7. Driver Component Definition 8. Naming Convention Recommendations 9. Object-Oriented Programming in C 10. Abstractions and Abstract Data Types (ADTs) 11. Encapsulation and Data Hiding 12. Callback Functions 13. Error Handling 14. Leverage Design Patterns 15. Expected Results and Recommendations 16. Going Further 13. Error Handling Một trong những vấn đề lớn nhất đối với ngôn ngữ […] - [Cách hiển thị đoạn code trong Wordpress](https://talucgiahoang.com/blog/cach-hien-thi-code-trong-wordpress/): Sử dụng PrettyPrint Github URL: https://github.com/googlearchive/code-prettify VD1: // your code here VD2: // your code here VD3: VD4: // This is line 4. foo(); bar(); baz(); boo(); VD5: // This is line 4. foo(); bar(); baz(); boo(); VD6: Book title : C Programming Book author : Nuha Ali Book subject : C Programming Tutorial Book book_id : 6495407 - [Biến Static trong C](https://talucgiahoang.com/blog/bien-static-trong-c/): Biến static có khả năng gì. Biến static nằm ở phân vùng nào trong bộ nhớ. Giá trị khởi tạo mặc định của biến static là gì. Hàm static là gì. Biến tĩnh (static variable) trong C có thuộc tính là bảo toàn giá trị của nó ngay cả khi ở ngoài tầm vực (scope) của nó! Do đó, biến tĩnh bảo toàn giá trị trước đó của nó trong scope trước đó của nó và không bị khởi tạo lại trong scope mới. - [INTEGRITY RTOS là gì?](https://talucgiahoang.com/blog/integrity-rtos-la-gi/): INTEGRITY là một hệ điều hành thời gian thực (Real-time Operating System hay RTOS) do Green Hills Software sản xuất, dành cho các thiết bị nhúng. Các tính năng có thể mở rộng của nó khiến khả năng ứng dụng rất đa dạng. - [Lời Cảm Ơn (10/2/2022)](https://talucgiahoang.com/blog/loi-cam-on-2-2022/): Chưa đầy một năm, hôm nay ngày 10/2/2022, page đạt 2000 like. Chân thành cảm ơn sự quan tâm và ủng hộ từ các bạn - [TM4C123GH6PM — I2C](https://talucgiahoang.com/blog/tiva-c-i2c/): Hướng dẫn sử dụng ngoại vi I2C của vi điều khiển TM4C123GH6PM - Lập trình từ thanh ghi và cách đọc Data Sheet. Thử nghiệm giao tiếp I2C giữa Tiva-C Launchpad và Arduino UNO. - [Chia sẻ một số Sách học Lập Trình Nhúng](https://talucgiahoang.com/blog/chia-se-ve-mot-so-sach-hoc-lap-trinh-nhung/): Con đường học Lập Trình Nhúng của mình bắt đầu với 2 board Tiva-C và BeagleBone Black, dĩ nhiên mình phải học lập trình C cơ bản trước đó rồi 😁. MỞ RỘNG: Cuốn Understanding and Using C Pointers giúp bạn thành thạo con trỏ để dùng cho những kĩ thuật quản lý bộ nhớ (Memory Management) - [C – Chuỗi (String)](https://talucgiahoang.com/blog/c-strings/): Chuỗi (string) thực ra là mảng một chiều các ký tự được kết thúc bằng ký tự rỗng '\0'. - [C – Cấu Trúc (Structure)](https://talucgiahoang.com/blog/c-structures/): Tương tự cấu trúc (structure) là một kiểu dữ liệu khác do người dùng định nghĩa có sẵn trong C cho phép kết hợp các mục dữ liệu thuộc các loại khác nhau. - [C – Union](https://talucgiahoang.com/blog/c-union/): Một union là một kiểu dữ liệu đặc biệt của ngôn ngữ lập trình C, cho phép lưu trữ các kiểu dữ liệu khác nhau trong cùng khu vực bộ nhớ. Bạn có thể định nghĩa một union với nhiều member, nhưng chỉ một member là có thể lưu một giá trị tại một thời điểm. Union cung cấp cách sử dụng bộ nhớ hiệu quả cho nhiều mục đích khác nhau. Định nghĩa một Union Để định nghĩa một union, bạn phải sử dụng từ khóa union theo cách tương tự như cách định nghĩa một cấu trúc (structure). […] - [C – Trường Bit (Bit Fields)](https://talucgiahoang.com/blog/c-bit-fields/): Giả sử chương trình C của bạn có nhiều biến TRUE/FALSE được nhóm theo cấu trúc (structure) được gọi là status như ví dụ sau. - [C – Typedef](https://talucgiahoang.com/blog/c-typedef/): t từ khóa gọi là typedef, bạn có thể sử dụng từ khóa này để đặt tên kiểu (type) mới của riêng bạn, tùy theo nhu cầu. Sau đây là một ví dụ để định nghĩa một cụm từ BYTE để khai báo những số có một byte. - [C – Input & Output](https://talucgiahoang.com/blog/c-input-output/): Khi nói về Đầu Vào (Input), nó có nghĩa là cung cấp dữ liệu vào một chương trình. Input có thể được đưa vào dưới dạng tệp (file) hoặc từ dòng lệnh (command line). Lập trình C cung cấp sẵn một tập các hàm để đọc input và đưa cho chương trình theo yêu cầu. - [C – Xuất/Nhập File (File I/O)](https://talucgiahoang.com/blog/c-file-io/): Xuất Nhập File là một chủ đề không thể thiếu khi học lập trình C. Chương này trình bày cách để lập trình viên C tạo, mở, đóng file văn bản hoặc file nhị phân để lưu trữ dữ liệu của họ. - [C – Bộ Tiền Xử Lý (Preprocessors)](https://talucgiahoang.com/blog/c-preprocessors/): Bộ tiền xử lý C chỉ là một công cụ thay thế văn bản (text) và nó hướng dẫn compiler thực hiện xử lý cần thiết trước khi biên dịch thực sự. - [C – Tệp Tiêu Đề (Header Files)](https://talucgiahoang.com/blog/c-header-files/): Tệp tiêu đề (Header file) là file có phần mở rộng .h chứa khai báo hàm và định nghĩa macro của C được chia sẻ giữa một số tệp nguồn (source file). Có hai loại file header: một loại do người lập trình viết và một loại thuộc về trình biên dịch (compiler). - [C – Ép Kiểu (Type Casting)](https://talucgiahoang.com/blog/c-type-casting/): Việc chuyển đổi một kiểu dữ liệu (data type) này thành một kiểu dữ liệu khác được gọi là ép kiểu (type casting) hoặc chuyển đổi kiểu (type-conversion). Ví dụ trong lập trình C, nếu bạn muốn lưu trữ một giá trị kiểu 'long' vào một số nguyên (integer) đơn giản thì bạn có thể ép kiểu 'long' thành 'int'. - [C – Xử Lý Lỗi (Error Handling)](https://talucgiahoang.com/blog/c-error-handling/): Học lập trình C với các khái niệm cơ bản về xử lý lỗi (Error Handling) như errno, perror(), strerror(), exit() và kiểm tra điều kiện xảy ra lỗi - [C – Đệ Quy (Recursion)](https://talucgiahoang.com/blog/c-de-quy-recursion/): Trong ngôn ngữ lập trình, nếu một chương trình cho phép bạn gọi một hàm bên trong chính hàm đó, thì nó được gọi là lệnh gọi đệ quy (recursion call) của hàm. - [C – Đối Số Biến Thiên (Variable Arguments)](https://talucgiahoang.com/blog/c-variable-arguments/): Bài viết này sẽ hướng dẫn bạn cách định nghĩa một hàm có số lượng đối số biến thiên bằng ngôn ngữ C và thư viện stdarg.h - [C - Command Line Arguments](https://talucgiahoang.com/blog/c-command-line-arguments/): Người ta có thể truyền một số giá trị từ command line cho các chương trình C khi chúng được thực thi. Được gọi là các đối số dòng lệnh (command line arguments). - [C - Quản Lý Bộ Nhớ (Memory Management)](https://talucgiahoang.com/blog/c-memory-management/): Chương này giải thích về quản lý bộ nhớ động (dynamic memory management) trong C. Ngôn ngữ C cung cấp một số hàm để cấp phát và quản lý bộ nhớ trong ,stdlib.h - [Device Driver Fundamentals in C (Phần 3)](https://talucgiahoang.com/blog/device-driver-fundamentals-in-c-phan-3/): Nội dung bao gồm: 9. Lập Trình Hướng Đối Tượng trong C 10. Trừu tượng dữ liệu (Data Abstraction) 11. Đóng gói (Encapsulation) và ẩn dữ liệu (data hiding) 12. Callback Functions - [Lập trình ESP32 với MQTT – Giới thiệu](https://talucgiahoang.com/blog/esp32-with-mqtt-introduction/): Phần này giới thiệu về MQTT và cách sử dụng MQTT với ESP32. - [Device Driver Fundamentals in C (Phần 2)](https://talucgiahoang.com/blog/device-driver-fundamentals-in-c-phan-2/): Có nhiều cách để develop low-level driver cho microcontroller. Hai mô hình chung mà chúng ta sẽ xem xét là blocking driver và non-blocking driver. - [Typedef cho Con Trỏ Hàm](https://talucgiahoang.com/blog/typedef-for-function-pointer/): Chúng ta có thể sử dụng typedef để đơn giản hóa việc sử dụng con trỏ hàm (function pointer). Hãy tưởng tượng chúng ta có một số hàm, tất cả đều có cùng một chữ ký (signature), sử dụng đối số (argument) của chúng để in (print) ra một thứ gì đó theo những cách khác nhau: - [Device Driver Fundamentals in C (Phần 1)](https://talucgiahoang.com/blog/device-driver-fundamentals-in-c-phan-1/): Bộ nhớ (memory) trong mọi vi điều khiển (microcontroller) đều được chia thành các vùng (region) khác nhau liên quan đến các chức năng cụ thể của microcontroller. - [Writing Reusable Drivers (Phần 2)](https://talucgiahoang.com/blog/writing-reusable-drivers-phan-2/): Gần như mọi hệ thống nhúng đều sử dụng một timer tích hợp để tính thời gian. Một timer thường sẽ chạy ở một hoặc mười mili giây (ms) và phối hợp với một scheduler để chạy hệ thống. Mỗi vi điều khiển (microcontroller) sẽ có các khả năng hơi khác nhau một chút vì nó liên quan đến timer peripheral, nhưng có một số điểm chung giữa tất cả microcontroller. Để xác định các khả năng của timer và xây dựng cơ sở hạ tầng cần thiết để tạo một timer driver mà có thể được tái sử dụng và tuân theo phương pháp ánh xạ bộ nhớ mảng con trỏ (pointer array memory-mapping methodology), thì có một số bước mà developer cần phải theo: - [Lập trình ESP32 ADC – Đọc giá trị Analog với Arduino IDE](https://talucgiahoang.com/blog/lap-trinh-esp32-adc-doc-gia-tri-analog-voi-arduino-ide/): Bài viết này hướng dẫn cách đọc tín hiệu analog input với ESP32 bằng Arduino IDE. Việc đọc tín hiệu analog rất hữu ích cho việc đọc giá trị từ các biến trở như chiết áp (potentiometer) hoặc cảm biến analog. Đọc tín hiệu analog input với ESP32 dễ dàng bằng việc sử dụng hàm analogRead(GPIO) với đối số là GPIO mà bạn muốn đọc.  Bạn cũng có thể tham khảo các hướng dẫn khác về cách sử dụng chân analog với board ESP:  ESP8266 ADC – Read Analog Values with Arduino IDE, MicroPython and Lua  ESP32 Analog Readings with MicroPython  Analog Inputs (ADC)  Đọc một giá trị analog với ESP32 nghĩa là bạn có thể đo được các mức điện áp khác nhau giữa 0V và 3.3V.  Điện áp đo được sẽ được gán cho giá trị từ 0 đến 4095, trong đó 0V tương ứng với 0 và 3,3V tương ứng với 4095.   ADC phi tuyến tính Theo lý tưởng, bạn sẽ mong muốn một biểu diễn theo đường tuyến tính khi sử dụng các chân ADC của ESP32. Tuy nhiên, điều đó sẽ không xảy ra. Bạn sẽ nhận được một đường biểu diễn như biểu đồ sau:  Xem thêm thông tin về vấn đề này: Inconsistent values […] - [Bài 7: Lập trình SPI giao tiếp thẻ nhớ trên STM32](https://talucgiahoang.com/blog/bai-7-lap-trinh-spi-giao-tiep-the-nho-tren-stm32/): 1. Giới thiệu chuẩn giao tiếp SPI 1.1SPI là gì SPI (Serial Peripheral Bus) là một chuẩn truyền thông nối tiếp tốc độ cao do hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có thể xảy ra đồng thời. 1.2 Mô hình kết nối Mô […] - [Lập trình ESP32 PWM với Arduino IDE (Analog Output)](https://talucgiahoang.com/blog/lap-trinh-esp32-pwm-voi-arduino-ide-analog-output/): Bài viết này sẽ hướng dẫn cách tạo ra tín hiệu PWM với ESP32 sử dụng Arduino IDE.Để làm ví dụ, chúng ta sẽ cần một mạch điện đơn giản để điều khiển độ sáng của LED bằng tín hiệu PWM bởi ESP32. Bên cạnh đó, bài viết này cũng hướng dẫn bạn cách nhận cùng một tín hiệu PWM trên các GPIO khác nhau cùng một lúc. Cài đặt ESP32 Board cho Arduino IDE (Windows, Mac OS X, Linux) Bạn cũng có thể tham khảo thêm nhiều nguồn sau đây: Làm quen với ESP32 Development Board Tham khảo Chân […] - [Bài 6: Lập trình I2C giao tiếp DS1307 trên STM32](https://talucgiahoang.com/blog/lap-trinh-i2c-giao-tiep-ds1307-tren-stm32/): I2C viết tắt của Inter- Integrated Circuit là một phương thức giao tiếp được phát triển bởi hãng Philips Semiconductors. Dùng để truyền tín hiệu giữa vi xử lý và các IC trên các bus nối tiếp. - [Hướng Dẫn Sử Dụng SW-TM4C](https://talucgiahoang.com/blog/huong-dan-su-dung-sw-tm4c/): Tài liệu này hướng dẫn sử dụng SW-TM4C. Nơi download, cách cài đặt CCS phù hợp và SW-TM4C. Làm thế nào để import các example project dành cho Tiva C LaunchPad - TM4C123GXL. Cách build một exmple và upload cho board. - [Hiển thị Sidebar khác nhau với mỗi Post và Page trong WordPress](https://talucgiahoang.com/blog/display-different-sidebar-for-each-post-and-page-for-wordpress/): Thông thường, WordPress theme hiển thị sidebar giống nhau trên các vị trí cố định bất kể bạn đang truy cập bài đăng hoặc từ trang nào. Bài viết này sẽ hướng dẫn bạn cách tạo và hiển thị sidebar khác nhau cho từng bài đăng và trang trong WordPress. - [Template là gì](https://talucgiahoang.com/blog/what-is-template/): Trong phát triển theme (chủ đề) WordPress, một template (mẫu) xác định một phần của page (trang) web được tạo bởi theme WordPress. - [Lập trình ngắt EXTI với STM32](https://talucgiahoang.com/blog/lap-trinh-ngat-exti-voi-stm32/): 1.Ngắt (Interrupts) là gì? Giả sử bạn là 1 con MCU. Bạn đang làm việc (trong while(1)) thì có 1 cuộc điện thoại gọi tới, bạn đi bắt điện thoại(cuộc gọi ưu tiên hơn công việc đang làm), sau khi nghe điện thoại xong quay lại bàn làm việc tiếp. Thì sự kiện đi bắt điện thoại ngắt ngang công việc bạn đang làm có thể hiểu nôm na là sự kiên ngắt ( Interrupts) Các ngắt đều có 1 trị số priority ( Mức độ ưu tiên) cho phép người lập trình có thể ưu tiên xử lý ngắt […] - [Lập Trình Với Máy Trạng Thái (Phần 2)](https://talucgiahoang.com/blog/lap-trinh-voi-may-trang-thai-phan-2/): Xử lý đa tác vụ với máy trạng thái; Máy trạng thái độc lập chạy song song; Máy trạng thái có ngõ vào là ngõ ra của máy trạng thái khác; Thời gian đáp ứng của chương trình - [Lập Trình Với Máy Trạng Thái (Phần 1)](https://talucgiahoang.com/blog/lap-trinh-voi-may-trang-thai-phan-1/): Một hệ thống nhúng thường được thiết kế để thực hiện một công việc theo một quy trình cố định, lặp đi lặp lại. Tùy theo trạng thái các ngõ vào (input) và trạng thái (state) hiện hành của hệ thống mà các ngõ ra (output) sẽ có các giá trị thích hợp. - [ESP32 Digital Input và Digital Output (Arduino IDE)](https://talucgiahoang.com/blog/esp32-digital-inputs-outputs-arduino/): Trong bài hướng dẫn này, bạn sẽ học cách đọc chân digital input bằng nút nhấn và điều khiển chân digital output là một LED, sử dụng ESP32 với Arduino IDE. - [Giao tiếp Serial Port giữa Arduino và PC sử dụng C#](https://talucgiahoang.com/blog/giao-tiep-serial-port-giua-arduino-va-pc-su-dung-c/): Nếu bạn đang gặp khó khăn trong việc giao tiếp Serial dùng C# với Arduino, thì đây bài viết này là dành cho bạn. Bài viết này sẽ giúp bạn biết cách giao tiếp qua cổng Serial từ Arduino tới PC vào giao tiếp giữa PC và Arduino sử dụng C#. - [Getting Started with Freedom Studio IDE](https://talucgiahoang.com/blog/getting-started-with-freedom-studio-ide/): The video show how to use Freedom Studio to build example code and download binary to HiFive1 Rev B01 board - [SiFive HiFive1 Rev B with LCD I2C module](https://talucgiahoang.com/blog/hifive1-revb-lcd-i2c/): This is a library used for SiFive Hifive 1 Rev B board to communicate with Lyquid Crystal Display (LCD) with I2C module and examples of how to use this it (LiquidCrystal_I2C.c, LiquidCrystal_I2C.h). - [Bài 4: Lập trình UART với STM32](https://talucgiahoang.com/blog/bai-4-lap-trinh-uart-voi-stm32/): Bài này giới thiệu với các bạn 1 chuẩn truyền thông giúp STM32 có thể giao tiếp với các thiết bị như máy tính, module ngoại vi như màn hình, moudle sim, cảm b,.. Độ phổ biến của nó ở hầu hết các dòng vi điều khiển. Trong bài này mình sẽ hướng dẫn và giúp các bạn giao tiếp UART với máy tính 1 cách đơn giản và nhanh nhất. - [Tham khảo Chân Ra của ESP32: Chân GPIO nào nên dùng?](https://talucgiahoang.com/blog/esp32-pinout-reference-gpios/): Chip ESP32 gồm có 48 chân (pin) cùng với nhiều chức năng. Không phải tất cả các chân đều ‘lòi’ ra trong ngoài ở tất cả các board phát triển ESP32, một số chân thì không thể sử dụng được. Có nhiều câu hỏi về cách sử dụng GPIO của ESP32. Chân gì nên sử dụng? Chân gì nên tránh sử dụng trong các dự án của bạn? Bài viết này là một hướng dẫn tham khảo đơn giản và dễ làm theo cho các GPIO của ESP32. - [Cài đặt ESP32 Board cho Arduino IDE (Windows, Mac OS X, Linux)](https://talucgiahoang.com/blog/installing-the-esp32-board-in-arduino-ide/): Một tiện ích bổ sung (add-on) cho Arduino IDE cho phép bạn lập trình ESP32 bằng Arduino IDE và ngôn ngữ lập trình của nó. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt bảng ESP32 trong Arduino IDE cho dù bạn đang sử dụng Windows, Mac OS X hay Linux. - [Làm quen với ESP32 Development Board](https://talucgiahoang.com/blog/getting-started-with-esp32/): Bài viết này sẽ hướng dẫn bạn làm quen với board phát triển ESP32. Nếu bạn đã quen với ESP8266, thì ESP32 chính là thành công của nó. ESP32 đem đến rất nhiều tính năng mới. Điều thường được nhắc đến nhiều nhất chính là: nó kết hợp khả năng WiFi và Bluetooth và nó là lõi kép (dual core). - [Bài 3: Lập trình ADC STM32](https://talucgiahoang.com/blog/bai-3-lap-trinh-adc/): 1.ADC là gì ADC (Analog to Digital Convert) là bộ chuyển đổi tương tự sang số. Điện áp Vin được so sánh với điện áp mẫu Vref (giá trị lớn nhất), sau đó được chuyển đổi thành số . Giả sử ta cần đo điện áp tối thiểu là 0V và tối đa là 3.3V, trong STM32 điện áp 0 → 3.3V sẽ thành 0 → 4095 khoảng giá trị (do 2^12= 4096), giá trị đo được từ chân IO 0V sẽ là 0, tương ứng với 1.65V là 2047, 3.3V sẽ là 4095. Các mode hoạt động của ADC: […] - [Serial Port WinForm C# Basic with Arduino](https://talucgiahoang.com/blog/serial-port-winform-basic-with-arduino/): Demo sử dụng phần mềm WinForm C# trên Windows để điều khiển LED trên Arduino UNO board - [Bài 2: Lập trình GPIO STM32](https://talucgiahoang.com/blog/lap-trinh-gpio-stm32/): 1. Giới thiệu về GPIO General-purpose Input/Output (GPIO) rất phổ biến, là một chức năng ngoại vi cơ bản của mỗi loại vi điều khiển, bao gồm các chân đầu vào và chân đầu ra, có thể được điều khiển bởi người dùng. Đối với chip STM32F107VC gồm có 5 Port chính đó là GPIOA, GPIOB, GPIOC, GPIOD, GPIOE. Mỗi Port có tối đa 16 chân Cấu trúc 1 chân GPIO của chip: GPIO bao gồm 2 khối cơ bản: -Input Driver: Bao gồm thanh ghi Input Data (IDR), và 1 trigger. Tín hiệu Input ngoài việc được ghi vào […] - [Writing Reusable Drivers (Phần 1)](https://talucgiahoang.com/blog/writing-reusable-drivers-phan-1/): Viết một driver có thể được sử dụng từ application này sang application khác có thể rất hữu ích cho các embedded-software developer. Một khi driver được viết xong, các developer có thể tập trung vào application code và không phải lo lắng gì về các bit và byte. Các mẫu thiết kế (design pattern) driver có thể được sử dụng lại không chỉ trên cùng một phần cứng (hardware) mà còn trên nhiều nền tảng (platform) khác, chỉ bằng những thay đổi nhỏ cần thiết để điều chỉnh driver để truy cập các vùng bộ nhớ (memory region) khác nhau. Trong chương này, chúng ta sẽ xem xét các phương pháp luận (methodology) khác nhau mà developer có thể sử dụng để ánh xạ (map) vào bộ nhớ ngoại vi (peripheral memory) và sau đó chúng ta sẽ chứng minh cách sử dụng từng kỹ thuật. ## Pages - [Favorite Websites](https://talucgiahoang.com/favorite-websites/): Nơi lưu giữ những website bổ ích của tôi. - [My Resume](https://talucgiahoang.com/my-resume/): collaborate with me - [Privacy Policy](https://talucgiahoang.com/privacy-policy/): Privacy Policy Effective Date: October 20, 2025 Welcome to my Lập Trình Nhúng Dành Cho Sinh Viên blog. Your privacy is important, and I want to be transparent about how your information is handled when you visit my blog at talucgiahoang.com. 1. Information Collected While I do not personally collect or store any visitor data, this blog uses Google Analytics, a third-party service that may collect anonymous usage data to help me understand how the blog is being accessed and used. Google Analytics may collect: This data is used solely for analytical purposes and does not include personally identifiable information. […] - [Linux Interview (Private)](https://talucgiahoang.com/linux-interview/): This content is password-protected. To view it, please enter the password below. Password: - [BeagleBone Black – Rev C | Bán Giá Rẻ Dành Cho Sinh Viên](https://talucgiahoang.com/shop/beaglebone-black-rev-c-ban-gia-re-danh-cho-sinh-vien/): Tiết kiệm chi phí làm đồ án của bạn! BeagleBone Black – Rev C (New) Hàng sản xuất tại USA Giá bán: 1,699,000 VND SỐ LƯỢNG CÓ SẴN: 0 (Hết hàng) LIÊN HỆ TRANG BLOG TRÊN FACEBOOK ĐỂ ĐẶT MUA Bài viết tham khảo - [C Tutorials](https://talucgiahoang.com/c-tutorials/): Kiến thức C cơ bản Kiến thức C nâng cao - [Tài Liệu Học Linux](https://talucgiahoang.com/doc/tai-lieu-hoc-linux/): Text Editor : vi Basic vi Commands Sách Linux Kernel Linux Device Drivedrs, 3rd Edition , Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman – go to website The Linux Kernel Module Programming Guide, Peter Jay Salzman – go to website Linux Kernel Development, 3rd Edition, Robert Love – buy on Amazon The Devicetree Specification – get pdf file on github , website Bootlin training materials – go to website [PDF] https://bootlin.com/doc/training/linux-kernel/linux-kernel-slides.pdf How U-boot loads Linux kernel – https://krinkinmu.github.io/2023/08/21/how-u-boot-loads-linux-kernel.html - [Shop](https://talucgiahoang.com/shop/): My Shop BeagleBone Black – Rev C Bán Giá Rẻ Dành Cho Sinh Viên GH BOOKSTORE Mua hộ sách nước ngoài, Amazon, Ebay, Kindle, … - [Contact](https://talucgiahoang.com/contact/): Mọi ý kiến đóng góp xin vui lòng gởi qua email talucgiahoang@gmail.com Hoặc thông qua facebook Ta Lục Gia Hoàng – Facebook Lập trình nhúng dành cho sinh viên – Facebook - [Học Lập Trình BeageBone Black Cơ Bản](https://talucgiahoang.com/beagebone-black-co-ban/): Chương 1: Kiến Thức Cơ BảnChương 2: Cảm Biến (Sensor)Chương 3: Hiển Thị (Display) và Các Loại OutputChương 4: Động Cơ (Motor)Chương 5: Kiến Thức Cơ Bản Mở RộngChương 6: Internet of ThingsChương 7: KernelChương 8: Real-Time I/O - [Tài Liệu Học BeagleBone Black](https://talucgiahoang.com/doc/tai-lieu-hoc-beaglebone/): BeagleBone Black Getting Started Guide (docs.beagleboard.org) BeagleBone Black System Reference Manual (docs.beagleboard.org) [PDF] BeagleBone Black System Reference Manual [PDF] Sitara AM335x Cortex‐A8 Technical Reference Manual [PDF] BeagleBone Black Schematic (github.com) Sách BeagleBone Cookbook — Download PDF PRU Cookbook — Download PDF Github Official BeagleBone Black Wiki – https://github.com/beagleboard/beaglebone-black/wiki/ Design and Document files for BBB – https://github.com/beagleboard/beaglebone-black Kernel Source Code – https://github.com/beagleboard/linux/tree/master Texas Instrument Developer’s Guide Processor SDK Linux Software Processor SDK Linux Software Getting Started Guide Processor SDK RTOS Processor SDK RTOS Getting Started Guide Forum Forum element14 - [Courses](https://talucgiahoang.com/courses/): Page này sẽ được viết trong thời gian sắp tới. Nếu bạn quan tâm hãy giúp mình đóng góp ý tưởng về những chủ đề về lập trình nhúng mà sinh viên cần học. Mình sẽ xây dựng nội dung từng chút một nhé. ^_^ Để lại bình luận dưới đây hoặc inbox qua Facebook https://www.facebook.com/laptrinhnhungdanhchosinhvien - [E-books (Private)](https://talucgiahoang.com/ebooks/): This content is password-protected. To view it, please enter the password below. Password: - [Câu Hỏi Phỏng Vấn](https://talucgiahoang.com/doc/cau-hoi-phong-van/): Tập hợp một số câu hỏi phỏng vấn vị trí Lập Trình Nhúng. Các câu hỏi và đáp án sẽ được bổ sung theo thời gian. Nếu các bạn có câu hỏi hoặc cách trả lời khác, vui lòng để lại ý kiến của bạn ở phần bình luận bên dưới. Câu hỏi về lập trình C Q1: Cho biến c, hãy set bit 4 của nó A: c |= 0x10; Q2: Cho biến c, hãy clear bit 3 của nó. A: c &= ~0x048; Q3: Define một hàm swap() đổi giá trị hai biến integer a và b. A: […] - [Kỹ Thuật Lập Trình Nhúng](https://talucgiahoang.com/ky-thuat-lap-trinh-nhung/): Khái quát Nội dung chi tiết Chương 1: Cơ bản về lập trình C cho hệ thống nhúng Chương 2: Cấu trúc chương trình Chương 3: Lập trình với máy trạng thái - [[FAQ] Câu Hỏi Thường Gặp](https://talucgiahoang.com/doc/faq/): Mình có một blog Lập Trình Nhúng Dành cho Sinh Viên trên Facebook, nơi chia sẻ các bài viết từ website này. Đồng thời mình cũng nhận được khá nhiều câu hỏi từ các bạn sinh viên nhờ tư vấn và giải đáp những thắc mắc về Lập Trình Nhúng, như kiến thức cần thiết để theo ngành này, công việc khi ra trường, v.v. Do có nhiều câu hỏi tương tự nhau nên mình chọn lọc, sắp xếp thành danh sách để đây cho mọi người dễ tìm và cùng học hỏi. Hi vọng tạo được một môi trường […] - [ESP32 Tutorials](https://talucgiahoang.com/esp32-tutorials/): ESP32 là dòng vi xử lý được tích hợp sẵn WiFi và Bluetooth, có khả năng tiết kiệm năng lượng, tốc độ xử lý cao. Do đó nó khá nổi tiếng trong các ứng dụng IoT (Internet of Things). ESP32 được hỗ trợ để có thể dễ dàng lập trình bằng Arduino IDE, giúp tiết kiệm rất nhiều thời gian viết code, dễ dàng phát triển những dự án IoT. Vì được hỗ trợ trên nền tảng Arduino, ESP32 đã trở nên dễ tiếp cận, được nhiều người nghiên cứu và học tập. Một trong những tài liệu học ESP32 […] - [STM32 Tutorials](https://talucgiahoang.com/stm32-tutorials/): Loạt bài hướng dẫn nghiên cứu STM32 Nội dung Bài 1: HƯỚNG DẪN CÀI ĐẶT STM32CUBE IDE 1.Tải và cài đặt STM32CUBE IDE 2. Cài đặt STM32CUBE IDE Bài 2: Lập trình GPIO STM32 1. Giới thiệu về GPIO 2. Tạo project 3. Lập trình STM32 GPIO chớp tắt LED chân PD2 PD3 Bài 3: Lập trình ADC 1. ADC là gì 2. Tạo project và cấu hình 3. Viết code Bài 4: Lập trình UART với STM32 1. Giới thiệu UART là gì? 2. Cấu hình UART trong STM32CubeIDE 3. Lập trình Bài 5: Lập trình ngắt EXTI với […] - [HiFive1 Rev B](https://talucgiahoang.com/hifive1-rev-b/): My plays with SiFive HiFive1 Rev B board HiFive1 Kit Phát triển RISC-V Open-Source, Arduino-Compatible Sự trở lại của RISC-V HiFive1 Videos Getting Started with Freedom Studio IDE HiFive1 Rev B01 Getting Started with Freedom Studio examples Projects Getting Started with Freedom Studio IDE SiFive HiFive1 Rev B with BH1750 I2C Light Sensor SiFive HiFive1 Rev B with LCD I2C module Github Repositories hifive1-revb-freertos hifive1-revb-test-i2c-with-arduino hifive1-revb-lcd-i2c hifive1-revb-bh1750 hifive1-revb-getting-started - [Lập trình Reusable Firmware](https://talucgiahoang.com/reusable-firmware-development/): Reusable Firmware Development Reusable Firmware Development: A Practical Approach to APIs, HALs and Drivers by Jacob Beningo (Apress, 2017) Nội dung Chương 1: Khái niệm lập trình Portable Firmware Chương 2: Nguyên lý cơ bản API và HAL Chương 3: Device Driver Fundamentals in C Chương 4: Writing Reusable Drivers Chương 5: Tạo hồ sơ Firmware bằng Doxygen Chương 6: Quy trình Thiết kế HAL Chương 7: Thiết kế HAL cho GPIO Chương 8: Thiết kế HAL cho SPI Chương 9: Thiết kế HAL cho EEPROM và Memory Device Chương 10: Thiết kế API cho Ứng dụng Nhúng Chương 11: […] - [Đồ án Môn học 2 - THIẾT KẾ PHẦN MỀM ĐẾM SỐ NGƯỜI RA VÀO BẰNG CAMERA](https://talucgiahoang.com/doc/damh2/): Link Download: ĐAMH2 1. Giới thiệu Đếm người là một bài toán quan trọng trong nghiên cứu thị trường, phân tích dữ liệu. Có nhiều phương pháp giải bài toán này. Như sử dụng các máy đếm cơ học, cổng quét hồng ngoại, cảm biến nhiệt … tuy nhiên vẫn còn nhiều hạn chế. Với sự phát triển của kĩ thuật máy tính, các thuật toán xử lý ảnh phức tạp bây giờ có thể giúp việc đếm người bằng camera thu hình với độ chính xác có thể đạt 98% dù ở trong các điều kiện làm việc khác […] - [Đồ án Môn học 1 - TÌM HIỂU BEAGLEBONE BLACK](https://talucgiahoang.com/doc/damh1/): Link Download: ĐAMH1 BeagleBone Black là gì? BeagleBone Black là một máy tính thu nhỏ (minicomputer) có kích thước 8.6×5.3 cm , giá thành thấp. có khả năng boot hệ điều hành Linux trong 10 giây. Vi xử lý: AM335x 1GHz ARM Cortex A8 512MB DDR3 RAM 4GB 8-bit eMMC on-board flash storage 3D graphics accelerator 2x PRU 32-bit microcontrollers Cổng kết nối: USB client for power & communications  host Ethernet HDMI  2x 46 pin headers Hệ điều hành hỗ trợ: Debian, Android, Ubuntu, Angstrom  Linux Kết nối với BeagleBone Black Kết nối trực tiếp với PC hoặc Laptop: sử […] - [Tài liệu học lập trình nhúng](https://talucgiahoang.com/doc/): Dành cho Sinh viên Lập trình C The Clockwise/Spiral Rule By David Anderson Learning C Language eBook (PDF) – Free Download Con trỏ (Pointer) Cấu trúc dữ liệu & Giải thuật : (Linked List, Stack, Queue, …) Tài liệu của Texas Instrument (TI) Thời sinh viên mình bắt đầu học lập trình nhúng bằng cách thực hành trên 2 vi điều khiển MSP430 và Tiva C Series. 2 con này do hãng Texas Instrument (TI) thiết kế và được dùng nhiều cho việc dạy học ở các trường đại học hoặc các khóa online lúc bấy giờ nên cũng khá […] - [About Me](https://talucgiahoang.com/about-me/): Tạ Lục Gia Hoàng Đai học Bách Khoa Tp.HCM Kỹ thuật Điện tử – Viễn Thông (2012-2017) Skills C/C++, C#, Python, Embedded C Embedded Firmware, Flash/ROM, Drivers, Wi-Fi, BLE Internet of Things (IoT), Hardware Security Linux, FreeRTOS, RISC-V SoC Profile Read my resume Contact talucgiahoang@gmail.com (+84) 0779758988 Support Me Paypal: @talucgiahoang VietinBank – TA LUC GIA HOANG – số TK: 100868978931 About Me Mình sinh năm 1994. Công việc chính của mình là Kỹ Sư Lập Trình Nhúng (Embedded Software Enginner). Ngoài ra mình cũng thích du lịch khám phá, kết bạn với nhiều người để học hỏi và chia […] - [Home](https://talucgiahoang.com/): Hi, I am Tạ Lục Gia Hoàng. Welcome to my site! Nỗ lực thêm một chút, đó là điều tạo nên sự khác biệt giữa cái tốt và cái tuyệt. - [My Posts](https://talucgiahoang.com/blog/) [comment]: # (Generated by Hostinger Tools Plugin)