ThanhNT Blog's

Computer, Networking, Embedded Systems, PCB Design

Giải phẫu một viên pin sạc Lithium-Ion có mạch bảo vệ

Mạch bảo vệ pin sạc Li-ion Bài viết mô tả quá trình giải phẫu rất chi tiết một viên pin sạc có mạch bảo vệ được dịch từ trang Lygate-info Cấu trúc 1 viên pin sạc Một viên pin có mạch bảo vệ (hi vọng là thế) gồm những thành phần bảo vệ như sau: PTC, bảo vệ chống quá nhiệt, gián tiếp bảo vệ chống quá dòng và sẽ tự động reset.

C/C++ Preprocessor - Macro

C/C++ Preprocessor C/C++ Preprocessor Khái niệm macro Macro - một cái tên nghe khá hổ báo, được dùng để chỉ những hàm được viết ở phần Preprocessor, thay vì đặt nó vào trong phần thực thi của file nguồn. Ngoài ra khi nói đến macro có 1 nghĩa khác nữa, ám chỉ đến tất cả những phần định nghĩa được viết trong phần Preprocessor. Trong bài viết này thì mình dùng macro với cách dùng đầu tiên.

C/C++ Preprocessor - Constant và Conditional Inclusion

C/C++ Preprocessor Hằng số (Constant) #define được dùng để định nghĩa hằng số trong preprocessor. Cách sử dụng như sau: #define THREE 3 Sau câu lệnh này thì bất cứ chỗ nào có THREE trong code của bạn thì compiler sẽ thay nó thành 3 hết. Tuy nhiên, vì trình biên dịch ko hiểu cái 3 trên là số hay là chữ, là int hay float, nó chỉ đơn giản làm công việc copy và paste những gì đã được định nghĩa mà thôi.

4 tính chất đặc thù của lập trình hướng đối tượng

Tính chất đặc thù của lập trình hướng đối tượng Với lập trình hướng đối tượng (OOP), có 2 câu hỏi thực dụng: Nó có những tính chất đặc thù gì? Để ta có thể dễ nhớ, dễ hiểu, dễ hình dung về nó. Khi học một ngôn ngữ OOP nào đó, làm sao để kiểm tra xem ta đã nắm bắt được ngôn ngữ này hay chưa, bằng cách viết thử code để diễn tả các đặc thù này bằng cú pháp của ngôn ngữ này?

Từ khóa Static trong lập trình C/C++

Từ khóa Static Mở đầu Khi học C cơ bản, chắc hẳn bạn sẽ gặp cách dùng từ khoá static như ví dụ dưới đây: #include <stdio.h> void count(int i) { static int num = 0; num += i; printf("current value of num: %d\n", num); } int main() { count(1); count(3); return 0; } Kết quả khi chạy chương trình sẽ là: current value of num: 1 current value of num: 4 Biến num khai báo static như trên có 2 đặc điểm:

Từ khóa virtual trong C++

# Tác dụng của từ khoá virtual, tại sao cần có virtual function Một số tài liệu có viết công dụng của Virtual Function như sau: Virtual Function là để khai báo một function ở class cha (base class) mà sau đó các class kế thừa (derived class) có thể override function đó. Nhưng chờ đã, có gì không ổn ở chỗ này, nếu chỉ là để override thôi thì mình hoàn toàn có thể khai báo function ở base class mà không cần virtual thì vẫn được cơ mà.

[C/C++] Include guard trong C và C++

Khi làm quen với C hoặc C++ chắc bạn sẽ rất quen với mấy dòng kiểu như sau ở đầu và cuối mỗi file thư viện .h #ifndef _file_name_h #define _file_name_h /* file content */ #endif Những dòng trên được gọi là Include Guard (thực ra chính xác hơn là #include guard), đến đây thì bạn cũng lờ mờ đoán ra mớ code nhiều dấu thăng ở trên để làm cái gì rồi.

[Dev] Hàm đếm bit nhanh - Fast bit counter

Fast bit counter Mở đầu Bạn đang chăm chú ngắm nghía 1 đoạn code, bỗng nhiên bạn gặp một hàm trông có vẻ rất nguy hiểm như sau: int fbc(unsigned int data) { data = (data & 0x55555555) + ((data >> 1) & 0x55555555); data = (data & 0x33333333) + ((data >> 2) & 0x33333333); data = (data & 0x0F0F0F0F) + ((data >> 4) & 0x0F0F0F0F); data = (data & 0x00FF00FF) + ((data >> 8) & 0x00FF00FF); data = (data & 0x0000FFFF) + ((data >> 16) & 0x0000FFFF); return data; } Một đoạn hàm rất bí ẩn với một loạt các phép toán logic >>, &, +.

[Cơ bản] Điện trở kéo là gì?

Điện trở kéo là gì? Điện trở kéo là thành phần rất phổ biến trong các mạch số hoặc có sử dụng vi điều khiển. Vậy khi nào và ở đâu chúng ta sử dụng điện trở kéo? Và trị số của điện trở kéo bao nhiêu là đủ? Tại sao chúng lại quan trọng như vậy? Chúng ta có một MCU (vi điều khiển) với một chân được cấu hình là một đầu vào (Input).