mirror of
https://gitee.com/Lamdonn/varch.git
synced 2025-12-06 16:56:42 +08:00
68 lines
2.3 KiB
Markdown
68 lines
2.3 KiB
Markdown
### Introduction
|
|
`cpul` is a simple CPU load (cpuload) module for the C language. It defines a series of data structures, macros, and function interfaces related to CPU load management, aiming to facilitate developers to control and monitor CPU load in C language projects.
|
|
|
|
### Interfaces
|
|
|
|
#### Functions
|
|
|
|
##### `cpul_init` Function
|
|
```c
|
|
int cpul_init(CPUL *cpul);
|
|
```
|
|
**Function Description**: This function is used to initialize an instance of `CPUL`. It initializes the `CPUL` structure to its default values and checks the validity of the passed-in pointer. For the initialization, a function method for obtaining the original load needs to be provided. For the Linux cpuload, you can refer to [test_cpul.c](/test/test_cpul.c).
|
|
|
|
##### `cpul_get` Function
|
|
```c
|
|
int cpul_get(CPUL *cpul, uint16_t *load);
|
|
```
|
|
**Function Description**: This function retrieves the current CPU load value from the `CPUL` instance. It also checks the validity of the parameters and the status.
|
|
|
|
##### `cpul_set` Function
|
|
```c
|
|
int cpul_set(CPUL *cpul, uint16_t load);
|
|
```
|
|
**Function Description**: This function is used to set the target CPU load value for the `CPUL` instance. It checks the validity of the passed-in parameter.
|
|
|
|
##### `cpul_task` Function
|
|
```c
|
|
int cpul_task(CPUL *cpul);
|
|
```
|
|
**Function Description**: This function executes a CPU load management task. It manages the CPU load based on the current load value and the target load value.
|
|
|
|
**Usage Example**:
|
|
```c
|
|
void *loadgen_entry(void *ptr)
|
|
{
|
|
#define PERIOD 10
|
|
const int coreid = *(int *)ptr;
|
|
CPUL cpul;
|
|
int ret = 0;
|
|
uint32_t count = 0;
|
|
uint16_t load = 0;
|
|
|
|
cpul.coreid = coreid;
|
|
cpul.resolution = 10;
|
|
cpul.raw = cpul_raw;
|
|
ret = cpul_init(&cpul);
|
|
|
|
ret = cpul_set(&cpul, 5000);
|
|
|
|
while(1)
|
|
{
|
|
count += PERIOD;
|
|
if (count >= 25200000) count = 0;
|
|
|
|
if (count % 1000 == 0)
|
|
{
|
|
ret = cpul_get(&cpul, &load);
|
|
printf("cpul_get<%d> %2d.%02d%%, %d, %d\r\n", coreid, (uint16_t)(load / 100), load % 100, cpul.ctrl.tload, cpul.ctrl.refine);
|
|
}
|
|
|
|
cpul_task(&cpul);
|
|
usleep(1000 * PERIOD);
|
|
}
|
|
}
|
|
```
|
|
|
|
Through these function interfaces, developers can conveniently implement functions such as initialization, retrieval, setting, and management of CPU load in C language programs.
|