I read in the LTS roadmap that to get into an LTS the code has to meet the following constraint:
All functions will have a GNU Complexity score of 8 or lower
I downloaded the current LTS snapshot and saw that the kernel version contained in it is 10.3.0. I cloned this version from the github repository and ran complexity on it with the following results:
$ complexity -c -h -t9 `find -name "*.c"`
procedure xEventGroupCreateStatic in ./event_groups.c ended before final close bracket
NOTE: proc xEventGroupWaitBits in file ./event_groups.c line 285
nesting depth reached level 6
procedure xEventGroupClearBitsFromISR in ./event_groups.c ended before final close bracket
NOTE: proc xEventGroupSetBits in file ./event_groups.c line 490
nesting depth reached level 5
procedure xTimerCreate in ./timers.c ended before final close bracket
NOTE: proc prvProcessTimerOrBlockTask in file ./timers.c line 555
nesting depth reached level 5
NOTE: proc prvProcessReceivedCommands in file ./timers.c line 705
nesting depth reached level 6
NOTE: proc prvCheckForValidListAndQueue in file ./timers.c line 907
nesting depth reached level 5
NOTE: proc prvCheckDelayedList in file ./croutine.c line 212
nesting depth reached level 5
procedure xTaskCreateStatic in ./tasks.c ended before final close bracket
NOTE: proc prvAddNewTaskToReadyList in file ./tasks.c line 960
nesting depth reached level 5
procedure vTaskDelete in ./tasks.c ended before final close bracket
procedure prvGetExpectedIdleTime in ./tasks.c ended before final close bracket
NOTE: proc prvSearchForNameWithinSingleList in file ./tasks.c line 2247
nesting depth reached level 5
procedure prvSearchForNameWithinSingleList in ./tasks.c ended before final close bracket
procedure xTaskGetHandle in ./tasks.c ended before final close bracket
NOTE: proc xTaskAbortDelay in file ./tasks.c line 2497
nesting depth reached level 5
procedure xTaskAbortDelay in ./tasks.c ended before final close bracket
procedure vTaskSetApplicationTaskTag in ./tasks.c ended before final close bracket
procedure vTaskPlaceOnEventListRestricted in ./tasks.c ended before final close bracket
procedure uxTaskGetTaskNumber in ./tasks.c ended before final close bracket
procedure eTaskConfirmSleepModeStatus in ./tasks.c ended before final close bracket
NOTE: proc vTaskGetInfo in file ./tasks.c line 3523
nesting depth reached level 7
==> *seriously consider rewriting the procedure*.
procedure vTaskGetInfo in ./tasks.c ended before final close bracket
procedure xTaskGetCurrentTaskHandle in ./tasks.c ended before final close bracket
procedure pvTaskIncrementMutexHeldCount in ./tasks.c ended before final close bracket
procedure xStreamBufferGenericCreate in ./stream_buffer.c ended before final close bracket
NOTE: proc xStreamBufferReset in file ./stream_buffer.c line 365
nesting depth reached level 5
NOTE: proc xStreamBufferSend in file ./stream_buffer.c line 476
nesting depth reached level 5
NOTE: proc pvPortMalloc in file ./portable/MemMang/heap_4.c line 103
nesting depth reached level 6
NOTE: proc vPortFree in file ./portable/MemMang/heap_4.c line 252
nesting depth reached level 5
NOTE: proc vPortGetHeapStats in file ./portable/MemMang/heap_4.c line 428
nesting depth reached level 5
NOTE: proc pvPortMalloc in file ./portable/MemMang/heap_5.c line 125
nesting depth reached level 6
NOTE: proc vPortFree in file ./portable/MemMang/heap_5.c line 264
nesting depth reached level 5
NOTE: proc vPortGetHeapStats in file ./portable/MemMang/heap_5.c line 480
nesting depth reached level 6
NOTE: proc pvPortMalloc in file ./portable/MemMang/heap_2.c line 105
nesting depth reached level 5
end of pxPortInitialiseStack() in ./portable/MPLAB/PIC24_dsPIC/port.c reached with open control blocks
unscored: pxPortInitialiseStack in ./portable/MPLAB/PIC24_dsPIC/port.c on line 135
procedure vPortNonPreemptiveTick in ./portable/CCS/ARM_Cortex-R4/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/CCS/ARM_CM3/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/CCS/ARM_CM4F/port.c ended before final close bracket
procedure prvPreemptiveTick in ./portable/Paradigm/Tern_EE/large_untested/port.c ended before final close bracket
procedure prvPreemptiveTick in ./portable/Paradigm/Tern_EE/small/port.c ended before final close bracket
procedure prvSetupMPU in ./portable/ARMv8M/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/ARMv8M/non_secure/port.c ended before final close bracket
NOTE: proc SecureContext_AllocateContext in file ./portable/ARMv8M/secure/context/secure_context.c line 92
nesting depth reached level 6
NOTE: proc pvPortMalloc in file ./portable/ARMv8M/secure/heap/secure_heap.c line 223
nesting depth reached level 5
NOTE: proc vPortFree in file ./portable/ARMv8M/secure/heap/secure_heap.c line 367
nesting depth reached level 5
procedure vTickISR in ./portable/GCC/H8S2329/port.c ended before final close bracket
procedure prvSetupMPU in ./portable/GCC/ARM_CM23/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/GCC/ARM_CM23/non_secure/port.c ended before final close bracket
NOTE: proc SecureContext_AllocateContext in file ./portable/GCC/ARM_CM23/secure/secure_context.c line 92
nesting depth reached level 6
NOTE: proc pvPortMalloc in file ./portable/GCC/ARM_CM23/secure/secure_heap.c line 223
nesting depth reached level 5
NOTE: proc vPortFree in file ./portable/GCC/ARM_CM23/secure/secure_heap.c line 367
nesting depth reached level 5
procedure vPortTaskUsesFPU in ./portable/GCC/IA32_flat/port.c ended before final close bracket
procedure vPortCentralInterruptHandler in ./portable/GCC/IA32_flat/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/GCC/ARM_CM3/port.c ended before final close bracket
procedure vPortDisableInterruptsFromThumb in ./portable/GCC/STR75x/portISR.c ended before final close bracket
procedure vNonPreemptiveTick in ./portable/GCC/ARM7_LPC23xx/portISR.c ended before final close bracket
procedure vPortTaskUsesFPU in ./portable/GCC/ARM_CA9/port.c ended before final close bracket
procedure vPortValidateInterruptPriority in ./portable/GCC/ARM_CA9/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/GCC/ARM_CM7/r0p1/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/GCC/ARM_CM4F/port.c ended before final close bracket
procedure vPortDisableInterruptsFromThumb in ./portable/GCC/ARM7_LPC2000/portISR.c ended before final close bracket
procedure prvSetupMPU in ./portable/GCC/ARM_CM23_NTZ/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/GCC/ARM_CM23_NTZ/non_secure/port.c ended before final close bracket
procedure prvSetupMPU in ./portable/GCC/ARM_CM33/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/GCC/ARM_CM33/non_secure/port.c ended before final close bracket
NOTE: proc SecureContext_AllocateContext in file ./portable/GCC/ARM_CM33/secure/secure_context.c line 92
nesting depth reached level 6
NOTE: proc pvPortMalloc in file ./portable/GCC/ARM_CM33/secure/secure_heap.c line 223
nesting depth reached level 5
NOTE: proc vPortFree in file ./portable/GCC/ARM_CM33/secure/secure_heap.c line 367
nesting depth reached level 5
procedure prvScheduleFirstTick in ./portable/GCC/AVR32_UC3/port.c ended before final close bracket
procedure vNonPreemptiveTick in ./portable/GCC/ARM7_AT91FR40008/portISR.c ended before final close bracket
procedure vNonPreemptiveTick in ./portable/GCC/ARM7_AT91SAM7S/portISR.c ended before final close bracket
procedure vPortSetupTimerInterrupt in ./portable/GCC/RISC-V/port.c ended before final close bracket
procedure prvSetupMPU in ./portable/GCC/ARM_CM33_NTZ/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/GCC/ARM_CM33_NTZ/non_secure/port.c ended before final close bracket
procedure prvPreemptiveTick in ./portable/BCC/16BitDOS/Flsh186/port.c ended before final close bracket
procedure prvPreemptiveTick in ./portable/BCC/16BitDOS/PC/port.c ended before final close bracket
procedure vPortSetupTimerInterrupt in ./portable/RVDS/ARM_CM0/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/RVDS/ARM_CM3/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/RVDS/ARM_CM7/r0p1/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/RVDS/ARM_CM4F/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/MikroC/ARM_CM4F/port.c ended before final close bracket
procedure vPortSetupTimerInterrupt in ./portable/MikroC/ARM_CM4F/port.c ended before final close bracket
procedure MPU_xTaskCreateRestricted in ./portable/Common/mpu_wrappers.c ended before final close bracket
procedure MPU_vTaskDelete in ./portable/Common/mpu_wrappers.c ended before final close bracket
procedure MPU_xTaskGetHandle in ./portable/Common/mpu_wrappers.c ended before final close bracket
procedure MPU_uxTaskGetStackHighWaterMark in ./portable/Common/mpu_wrappers.c ended before final close bracket
procedure MPU_xTaskGenericNotify in ./portable/Common/mpu_wrappers.c ended before final close bracket
procedure MPU_xQueueGetMutexHolder in ./portable/Common/mpu_wrappers.c ended before final close bracket
procedure MPU_pvPortMalloc in ./portable/Common/mpu_wrappers.c ended before final close bracket
procedure MPU_xStreamBufferGenericCreate in ./portable/Common/mpu_wrappers.c ended before final close bracket
procedure prvRLT0_TICKISR in ./portable/Softune/MB96340/port.c ended before final close bracket
invalid character in ./portable/Softune/MB91460/port.c on line 39: 0x40 (@)
NOTE: proc prvProcessSimulatedInterrupts in file ./portable/MSVC-MingW/port.c line 357
nesting depth reached level 6
procedure prvSetupMPU in ./portable/IAR/ARM_CM23/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/IAR/ARM_CM23/non_secure/port.c ended before final close bracket
NOTE: proc SecureContext_AllocateContext in file ./portable/IAR/ARM_CM23/secure/secure_context.c line 92
nesting depth reached level 6
NOTE: proc pvPortMalloc in file ./portable/IAR/ARM_CM23/secure/secure_heap.c line 223
nesting depth reached level 5
NOTE: proc vPortFree in file ./portable/IAR/ARM_CM23/secure/secure_heap.c line 367
nesting depth reached level 5
procedure vPortSuppressTicksAndSleep in ./portable/IAR/ARM_CM3/port.c ended before final close bracket
procedure prvFindFactors in ./portable/IAR/STR91x/port.c ended before final close bracket
procedure vPortNonPreemptiveTick in ./portable/IAR/LPC2000/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/IAR/ARM_CM7/r0p1/port.c ended before final close bracket
procedure vPortSuppressTicksAndSleep in ./portable/IAR/ARM_CM4F/port.c ended before final close bracket
procedure prvSetupMPU in ./portable/IAR/ARM_CM23_NTZ/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/IAR/ARM_CM23_NTZ/non_secure/port.c ended before final close bracket
procedure prvSetupMPU in ./portable/IAR/ARM_CM33/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/IAR/ARM_CM33/non_secure/port.c ended before final close bracket
NOTE: proc SecureContext_AllocateContext in file ./portable/IAR/ARM_CM33/secure/secure_context.c line 92
nesting depth reached level 6
NOTE: proc pvPortMalloc in file ./portable/IAR/ARM_CM33/secure/secure_heap.c line 223
nesting depth reached level 5
NOTE: proc vPortFree in file ./portable/IAR/ARM_CM33/secure/secure_heap.c line 367
nesting depth reached level 5
procedure prvScheduleFirstTick in ./portable/IAR/AVR32_UC3/port.c ended before final close bracket
procedure SIG_OUTPUT_COMPARE1A in ./portable/IAR/ATMega323/port.c ended before final close bracket
procedure vPortNonPreemptiveTick in ./portable/IAR/AtmelSAM7S64/port.c ended before final close bracket
procedure vPortSetupTimerInterrupt in ./portable/IAR/RISC-V/port.c ended before final close bracket
procedure prvSetupMPU in ./portable/IAR/ARM_CM33_NTZ/non_secure/port.c ended before final close bracket
procedure vPortStoreTaskMPUSettings in ./portable/IAR/ARM_CM33_NTZ/non_secure/port.c ended before final close bracket
procedure prvPreemptiveTick in ./portable/oWatcom/16BitDOS/Flsh186/port.c ended before final close bracket
procedure prvPreemptiveTick in ./portable/oWatcom/16BitDOS/PC/port.c ended before final close bracket
invalid character in ./portable/CodeWarrior/ColdFire_V2/port.c on line 47: 0x40 (@)
procedure xQueueGenericCreateStatic in ./queue.c ended before final close bracket
procedure prvInitialiseMutex in ./queue.c ended before final close bracket
NOTE: proc xQueueGenericSendFromISR in file ./queue.c line 909
nesting depth reached level 9
==> *seriously consider rewriting the procedure*.
NOTE: proc xQueueGiveFromISR in file ./queue.c line 1068
nesting depth reached level 9
==> *seriously consider rewriting the procedure*.
NOTE: proc xQueueReceive in file ./queue.c line 1230
nesting depth reached level 6
NOTE: proc xQueueSemaphoreTake in file ./queue.c line 1369
nesting depth reached level 7
==> *seriously consider rewriting the procedure*.
NOTE: proc xQueuePeek in file ./queue.c line 1575
nesting depth reached level 6
NOTE: proc xQueueReceiveFromISR in file ./queue.c line 1722
nesting depth reached level 7
==> *seriously consider rewriting the procedure*.
procedure uxQueueGetQueueNumber in ./queue.c ended before final close bracket
NOTE: proc prvUnlockQueue in file ./queue.c line 2101
nesting depth reached level 7
==> *seriously consider rewriting the procedure*.
Complexity Scores
Score | ln-ct | nc-lns| file-name(line): proc-name
9 60 44 ./tasks.c(2247): prvSearchForNameWithinSingleList
9 143 99 ./event_groups.c(285): xEventGroupWaitBits
9 160 160 ./portable/ARMv8M/non_secure/portable/GCC/ARM_CM23/portasm.c(214): PendSV_Handler
9 160 160 ./portable/GCC/ARM_CM23/non_secure/portasm.c(214): PendSV_Handler
10 91 68 ./portable/GCC/ARM_CM3_MPU/port.c(637): vPortStoreTaskMPUSettings
10 91 68 ./portable/IAR/ARM_CM4F_MPU/port.c(516): vPortStoreTaskMPUSettings
10 93 68 ./portable/RVDS/ARM_CM4_MPU/port.c(687): vPortStoreTaskMPUSettings
10 97 72 ./portable/GCC/ARM_CM4_MPU/port.c(691): vPortStoreTaskMPUSettings
12 116 49 ./portable/MSVC-MingW/port.c(357): prvProcessSimulatedInterrupts
13 159 67 ./portable/MikroC/ARM_CM4F/port.c(431): vPortSuppressTicksAndSleep
15 134 95 ./queue.c(1230): xQueueReceive
15 142 97 ./queue.c(1575): xQueuePeek
17 134 89 ./portable/MemMang/heap_5.c(125): pvPortMalloc
18 139 94 ./portable/ARMv8M/secure/heap/secure_heap.c(223): pvPortMalloc
18 139 94 ./portable/GCC/ARM_CM23/secure/secure_heap.c(223): pvPortMalloc
18 139 94 ./portable/GCC/ARM_CM33/secure/secure_heap.c(223): pvPortMalloc
18 139 94 ./portable/IAR/ARM_CM23/secure/secure_heap.c(223): pvPortMalloc
18 139 94 ./portable/IAR/ARM_CM33/secure/secure_heap.c(223): pvPortMalloc
19 144 99 ./portable/MemMang/heap_4.c(103): pvPortMalloc
23 201 134 ./queue.c(1369): xQueueSemaphoreTake
24 138 90 ./timers.c(705): prvProcessReceivedCommands
26 157 101 ./queue.c(1068): xQueueGiveFromISR
28 154 106 ./queue.c(909): xQueueGenericSendFromISR
Complexity Histogram
Score-Range Lin-Ct
0-9 463 **********************
10-19 1242 ************************************************************
20-29 431 *********************
Scored procedure ct: 23
Non-comment line ct: 2136
Average line score: 16
25%-ile score: 10 (75% in higher score procs)
50%-ile score: 17 (half in higher score procs)
75%-ile score: 18 (25% in higher score procs)
Highest score: 28 (xQueueGenericSendFromISR() in ./queue.c)
Unscored procedures: 1
there are a lot of warnings and notes, and some functions that score higher than 8.
so there’s a contradiction. These codes are in LTS despite not respecting the first of the LTS rules.
best regards
Max