Skip to main content

RTX Real-Time Operating System Issues

RTX Real-Time Operating System Issues

Tổng hợp các vấn đề tôi đã bị vướng khi làm việc với Keil - RTX (for STM32)

1. Sizeof base on MCU platform.
Keyword: sizeof in Keil ARM, sizeof of struct, checksum, BKP_ReadBackupRegister,
BKP_WriteBackupRegister.
Description: Return wrong size of struct when you call sizeof(YourStruct);

Trong ví dụ dưới, ứng với mỗi kiểu khai báo thứ tự của các member trong struct khác nhau, sẽ trả về size of struct khác nhau. Vì vậy, nếu không chắc chắn về sizeof, hãy debug để xác định chính xác toán tử này trả về bao nhiêu trong từng trường hợp cụ thể.
Bạn hoàn toàn có thể dính trấu trong trường hợp sử dụng sizeof để tính checksum, hoặc làm việc với Ram Backup.
Example:
typedef struct
{
uint16_t mem1;
uint32_t mem2;
}foo1_t;

typedef struct
{
uint16_t mem1;
uint16_t dummy;
uint32_t mem2;
}foo2_t;

typedef struct
{
uint16_t mem1;
uint8_t dummy;
uint32_t mem2;
}foo3_t;


len1 = sizeof(foo1_t);
len2 = sizeof(foo2_t);
len3 = sizeof(foo3_t);
Result: len1 = len2 = len3 = 8;

In another case:
typedef struct
{
uint8_t mem1;
uint8_t mem2;
}foo1_t;
len1 = sizeof(foo1_t) = 2;

typedef struct
{
uint8_t mem1;
uint16_t mem2;
}foo1_t;
len1 = sizeof(foo1_t) = 4;

typedef struct
{
uint8_t mem1;
uint16_t mem2;
uint16_t mem3;
}foo1_t;
len1 = sizeof(foo1_t) = 6;

typedef struct
{
uint8_t mem1;
uint16_t mem2;
uint32_t mem3;
}foo1_t;
len1 = sizeof(foo1_t) = 8;

typedef struct
{
uint8_t mem1;
uint32_t mem3;
}foo1_t;
len1 = sizeof(foo1_t) = 8;

2. Time management (các loại wait, delay trong RTX)
Keyword: os_dly_wait, os_itv_set, os_itv_wait.
Description:
Reference:
http://www.eng.auburn.edu/~nelson/courses/elec5260_6260/RL-ARM%20Real-Time%20Executive%20(RTX).pdf

Just one thing to remember that:
Cannot mix os_itv_wait and os_dly_wait in one task. Because, os_dly_wait will change interval time of task what is set by os_itv_set before.

3. Mutex (stand for “Mutual Exclusion”)
Keyword: Mutex, semaphore
Description: How to use mutex...
Reference: http://www.dejazzer.com/ee379/labs/lab6_rtos.pdf
When:
The main use of a Mutex is to control access to a chip resource
such as a peripheral/register.
os_mut_wait also change priority of the owning task of the mutex
http://www.keil.com/support/man/docs/rlarm/rlarm_os_mut_wait.htm

Hàm os_mut_wait có thể làm thay đổi priority của 1 task
Q&A
1. Khai tối đa được bao nhiêu mutex?
/* Definition of Mutex type */
typedef U32 OS_MUT[3];
Ex: OS_MUT  GsmMutex // GsmMutex là 1 mảng 3 phần tử có định dạng là U32
2. Tại sao lại có 3 phần tử?


4. Task managemet
Keyword: RL-RTX, state, 
Description: How to use mutex...
http://www.keil.com/support/man/docs/rlarm/rlarm_ar_task_mgmt.htm







Comments

Post a Comment

Popular posts from this blog

[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 ...

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) ...

[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 ...