我试着做一个任务,那就是创建两个任务。第一个任务是每95毫秒循环运行一次,占用处理器时间30毫秒;第二个任务是循环运行33毫秒,占用处理器时间15毫秒。我有一个问题,调整一个函数,使它采取正确的时间作为一个函数参数。是否应该使用软件计时器,或者eclipse中是否有函数计时工具?
main.c:
xTaskHandle task1, task2;
int main(int argc, char * argv[]) {
// SystemClock_Config();
HAL_Init();
MX_GPIO_Init();
xTaskCreate(zadanie1, "Zadanie1", 128, "to jest nazwa zadania ", 1, & task1);
xTaskCreate(zadanie2, "Zadanie2", 256, "to jest nazwa zadania ", 1, & task2);
vTaskStartScheduler();
return 0;
}实验1.c:
int iCPU_work(int czas_obliczen_ms) {
int a, b, wynik = 0;
for (int i = 0; i < czas_obliczen_ms; i++) {
a++;
b++;
wynik = a + b;
}
return wynik;
}
void zadanie1(void * parametry) {
char nazwa_zadania[16];
portTickType OstatnieWywolanie = 0;
strncpy(nazwa_zadania, (char * ) parametry, 15);
for (;;) {
iCPU_work(30);
LED1_TOGGLE();
vTaskDelayUntil( & OstatnieWywolanie, 95);
printf(nazwa_zadania);
}
vTaskDelete(NULL); // usuwa zadanie
}
void zadanie2(void * parametry) {
portTickType OstatnieWywolanie = 0;
char nazwa_zadania[16];
strncpy(nazwa_zadania, (char * ) parametry, 15);
for (;;) {
iCPU_work(15);
LED2_TOGGLE();
vTaskDelayUntil( & OstatnieWywolanie, 33);
printf(nazwa_zadania);
}
vTaskDelete(NULL);
}
void vApplicationIdleHook(void) {
LED3_TOGGLE();
}
void vApplicationTickHook(void) {
LED4_TOGGLE();
}发布于 2021-06-07 04:01:39
根据RMA/RMS,您似乎超出了可调度性限制。您的CPU利用率是30/95 + 15/33 == 0.77,这超过了ln(2)。您的任务不是和声的,所以您可能有一组“不可调度”的任务。(请谷歌搜索RMA/RMS,或“可调度性限制”)。
https://stackoverflow.com/questions/67853595
复制相似问题