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)
Keyword: sizeof in Keil ARM, sizeof of struct, checksum, BKP_ReadBackupRegister,
BKP_WriteBackupRegister.
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)
3. Mutex (stand for “Mutual Exclusion”)
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.
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
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
great !
ReplyDelete