Skip to main content

Một số kiến thức cơ bản trong lập trình firmware

Qủa thực tình là trong quá trình làm việc, mình rất hay đụng phải những khái niệm này nhưng chẳng mấy khi chú tâm. Bug đến là ta debug, debug xong là thôi, cũng không tìm hiểu ngọn ngành ra ngô ra khoai, lần sau ta lại đụng bug :-(

1. MSB và LSB hoặc msb và lsb
msb (chữ thường) : most significant bit
lsb (chữ thường): least significant bit
Hai khái niệm này được dùng trong phạm vi 1 byte
msb là cái bít quan trọng nhất ở byte đó. Hiểu đơn giản, byte nào mà mất cái bit này đi(gán bít này bằng 0) thì giá trị của byte đó bị thay đổi đáng kể (có khi là đổi trắng thay đen, đổi từ âm sang dương :D)
lsb thì ngược lại.
Ví dụ: Trên hình ta có số 10100101 =  165
Mất msb thì số đó thành  00100101 =    37
Mất lsb thì số đó thành    10100100 =  164

MSB (chữ hoa) : most significant byte
LSB (chữ hoa): least significant byte
Hiểu đơn giản, MSB là byte quan trọng nhất trong một string hoặc buffer. LSB thì ngược lại

Hai khái niệm này cũng liên quan đến việc tổ chức các byte dự liệu trong bộ nhớ (memory, register..vv). Nó cũng liên quan đến khái niệm Endian (hay Big Endian ) và Endianless (Litte Endian)
Ví dụ: Trong code ta có một string:  string[3] = {'A', 'B', 'C'} ; 
Ba phần tử này được lưu thế nào trong bộ nhớ?
Bộ nhớ thì được đánh địa chỉ từ thấp đến cao. Vậy, thằng A được đánh ở địa chỉ nào, thằng C ở địa chỉ nào? Điều này hoàn toàn phụ thuộc vào hệ thống( MCU platform) là big-endian system hay little endian system.
Hiểu đơn giản, thằng Big-Endian là thằng "đuôi to", MSB sẽ được xếp ở địa chỉ thấp rồi các byte sau được sếp theo địa chỉ to dần.
Ngược lại Little Endian là thằng "đuôi nhỏ", LSB được xếp ở địa chỉ thấp, các byte tiếp theo được sếp ở địa chỉ to dần.
Định nghĩa từ wikipedia
The terms endian and endianness refer to the convention used to interpret the bytes making up a data word when those bytes are stored incomputer memory


2. Phân biệt Arithmetic Shift  và Logical Shift
Hai khái niệm này đều liên quan đến phép dịch bít và các phép toán liên quan đến bi (bitwise operation). Câu hỏi đặt ra ở đây là: vị trí mà bit bị dịch đi ấy (vacant bit position) thì ta điền số mấy vào vị trị đó, 0 hay là 1?

Logical Shift
- Ta điền số 0 vào các vị trí bị dịch. Hiểu đơn giản trong trường hợp một byte, nó giống như 1 cái hàng đợi (queue). Một bít đi ra một đầu thì đầu kia lại được chèn thêm một bít giá trị 0 vào.
Arithmetic Shift (phép dịch số học)
- Giá trị được điền vào phụ thuộc vào dấu của byte đó. msb là bit được sử dụng để đánh dấu âm dương cho số đó. Dấu của số này sẽ ko bị thay đổi sau phép dịch số học. (Ví dụ, -2 dịch số học sang trái 1 bít thì thành -4)
- Phép dịch số học hay được sử dụng để nhân/chia một số nguyên có dấu (signed integer) cho 2


3. Stack và Heap  (under contruction)
2 khái niệm này liên quan đến memory (ví dụ, memory là RAM trong máy tính cho dễ hiểu)
Ví dụ:
Khi bạn lập trình cho vi điều khiển thực hiện phép tính A + B = ? bằng ngôn ngữ lập trình C
Bạn khai báo như sau
int A = 5;
int B= 6;
int C;

C = A+B;
return;

Sau khai báo int A = 5, int B= 6. Số 5, và 6 này đã được để ở trong memory theo một cách nào đó
Khi chương trình chạy đến dòng lệnh "C=A+B"
Giá trị của A và B lúc ấy được lấy từ memory và nạp vào công thức trên để tính ra C

Vậy stack là gì

Stack is used for static memory allocation and Heap for dynamic memory allocation, both stored in the computer's RAM .

Thế nên stack giới hạn size (ví dụ RAM 2G), còn Heap thì không 
http://net-informations.com/faq/net/stack-heap.htm

https://www.gribblelab.org/CBootCamp/7_Memory_Stack_vs_Heap.html

Dùng khi nào
Tại sao heap và stack lại quan trọng trong lập trình firmware








Comments

Popular posts from this blog

How to test frame buffer in linux

The intended goal of this article is to provide the user with enough information so they can display an image onto a screen of their choosing. How to re-build frame buffer testing application. Base knowledge http://trac.gateworks.com/wiki/OpenEmbedded/Video_Out Frame buffer test application - rebuild fb-test-app step 1: Download soure code ( git installed on your machine and account in git-hub is required) https://github.com/prpplague/fb-test-app Command in git: git init git clone https://github.com/prpplague/fb-test-app.git step 2: Change makefile vi Makefile //open Makefile by vim editor :set nu //show line number replace from line 6 to line 12 by folow code: CC=arm-linux-gnueabi-gcc CFLAGS=-02 -Wall Save change command :wq step 3: Rebuid Type “make” command step 4: Copy execute file to target system by filezilla or something like that step 5: Remote target by root account, change mode of execute file (what copied from host)

[Git] Handle trailing space when patching with git

After complete coding one module in development branch. Next phase is merging. Obviously, you can merge source code automatically without no errors happen. However, life is not dream. Create a patch git diff HEAD > newTariff.patch Apply patch git apply newTariff.patch then problem happens Problem git apply newTariff.patch:106: trailing whitespace. patch does not apply Route cause: Nguyên nhân: Do trong source code có những dấu space thừa (ô vuông màu đỏ hình dưới) Some whitespaces is existed in your patch. (red area in below pictures) Fix Clean white space and patch again. Cách khắc phục Xóa những dấu space này đi và thực hiện patch lại Make up after complete coding. Find and clean whitespace before create patch file. Sửa sau khi code xong Kiểm tra sau khi code xong có lỗi này không git diff HEAD --check Prevent whitespace by manually when typing source code Sửa ngay khi đang code =>Bật chức năng hiển thị các dấu whitespace, hoặc remove trailing

[Vi] Công nghệ phát triển ngược đời - How is AI harming my world

Tiếng cười khanh khách của mấy cậu sinh viên quốc tế người Bắc Ấn sau bài kiểm tra cuối khóa (a final exam) làm gã thấy buồn một góc tâm hồn. Sự trống rỗng ngay lập tức xâm chiếm lấy tâm trí gã sau khi nộp bài môn thi cuối cùng của kỳ học. Gã hiểu gã quá mà, gã đang cố gắng giải thích cho nỗi nhục của chính bản thân ở bên trong. Đầu gã thoáng nghĩ về cái lần thi cuối kỳ một môn học ở bậc thạc sỹ nơi quê nhà hơn mười năm về trước, cái ánh mắt khinh bỉ đến ám ảnh của một anh dọn vệ sinh dành cho những học viên cao học đang quay cóp trong giờ thi của một trường đại học hàng đầu quốc gia như vết dao khứa vào lòng tự trọng của gã. Vết thương vẫn nhói đau lại khi những mùa thi đến. Một lão già sinh viên quốc tế ranh ma. Gã đang học lại cái thứ mà gã đã học từ hai mươi năm về trước với một thứ ngôn ngữ không mới và cái tâm bằng sắt nung. Kinh nghiệm làm việc chuyên môn lâu năm cộng với việc vừa được trang bị thứ vũ khí khoa học tối tân AI (Trí truệ nhân tạo) khiến lão trở thành sát thủ trong