Skip to content

Commit 433d81d

Browse files
🔥 update testing framework
1 parent 8a6134c commit 433d81d

File tree

14 files changed

+160
-24
lines changed

14 files changed

+160
-24
lines changed

Include/Kernel/rmp_kernel.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,11 @@ do \
185185
while(0)
186186
#endif
187187

188-
/* Coverage switch detection */
189-
#ifndef RMP_COVERAGE_MARKER
188+
/* Coverage marker enabling */
189+
#ifdef RMP_COVERAGE_LINE_NUM
190+
#define RMP_COVERAGE_WORD_NUM (RMP_ROUND_UP(RMP_COVERAGE_LINE_NUM,RMP_WORD_ORDER)>>RMP_WORD_ORDER)
191+
#define RMP_COVERAGE_MARKER() (RMP_Coverage[__LINE__>>RMP_WORD_ORDER]|=RMP_POW2(__LINE__&RMP_WORD_MASK))
192+
#else
190193
#define RMP_COVERAGE_MARKER()
191194
#endif
192195
/*****************************************************************************/
@@ -339,9 +342,9 @@ struct RMP_Mem
339342
/* If the header is not used in the public mode */
340343
#ifndef __HDR_PUBLIC__
341344
/*****************************************************************************/
342-
#ifdef RMP_COVERAGE
345+
#ifdef RMP_COVERAGE_LINE_NUM
343346
/* For coverage use only */
344-
static volatile rmp_ptr_t RMP_Coverage[RMP_COVERAGE_LINES];
347+
static volatile rmp_ptr_t RMP_Coverage[RMP_COVERAGE_WORD_NUM];
345348
#endif
346349
/* The scheduler bitmap */
347350
static volatile rmp_ptr_t RMP_Bitmap[RMP_PRIO_WORD_NUM];
@@ -691,8 +694,8 @@ EXTERN void RMP_Init_Hook(void);
691694
EXTERN void RMP_Init_Idle(void);
692695

693696
/* Coverage test */
694-
#ifdef RMP_COVERAGE
695-
__EXTERN__ void RMP_Print_Coverage(void);
697+
#ifdef RMP_COVERAGE_LINE_NUM
698+
__EXTERN__ void RMP_Coverage_Print(void);
696699
#endif
697700
/*****************************************************************************/
698701
/* Undefine "__EXTERN__" to avoid redefinition */

Project/RVMDK-STM32F103RBT6/RMP.uvprojx renamed to Project/RVMDK-STM32F103RBT6-COV/RMP.uvprojx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@
314314
</ArmAdsMisc>
315315
<Cads>
316316
<interw>1</interw>
317-
<Optim>1</Optim>
317+
<Optim>4</Optim>
318318
<oTime>1</oTime>
319319
<SplitLS>0</SplitLS>
320320
<OneElfS>1</OneElfS>
@@ -333,7 +333,7 @@
333333
<v6LangP>5</v6LangP>
334334
<vShortEn>0</vShortEn>
335335
<vShortWch>0</vShortWch>
336-
<v6Lto>0</v6Lto>
336+
<v6Lto>1</v6Lto>
337337
<v6WtE>0</v6WtE>
338338
<v6Rtti>0</v6Rtti>
339339
<VariousControls>
@@ -475,9 +475,9 @@
475475
<GroupName>Test</GroupName>
476476
<Files>
477477
<File>
478-
<FileName>rmp_benchmark.c</FileName>
478+
<FileName>rmp_coverage.c</FileName>
479479
<FileType>1</FileType>
480-
<FilePath>..\..\Source\Test\rmp_benchmark.c</FilePath>
480+
<FilePath>..\..\Source\Test\rmp_coverage.c</FilePath>
481481
</File>
482482
</Files>
483483
</Group>

Project/RVMDK-STM32F103RBT6/rmp_platform_a7m_conf.h renamed to Project/RVMDK-STM32F103RBT6-COV/rmp_platform_a7m_conf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Description : The configuration file for ARMv7-M HAL.
77
******************************************************************************/
88

99
/* Config Includes ***********************************************************/
10-
#include "Platform/A7M/Chip/STM32F103RB/rmp_platform_stm32f103rb.h"
10+
#include "rmp_platform_stm32f103rb.h"
1111
/* End Config Includes *******************************************************/
1212

1313
/* End Of File ***************************************************************/
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/******************************************************************************
2+
Filename : rmp_platform_stm32f103rb.h
3+
Author : pry
4+
Date : 24/06/2017
5+
Licence : The Unlicense; see LICENSE for details.
6+
Description: The configuration file for STM32F103RB.
7+
******************************************************************************/
8+
9+
/* Define ********************************************************************/
10+
/* The HAL library */
11+
#include "stm32f1xx_hal.h"
12+
#include "stm32f1xx_hal_conf.h"
13+
#include "core_cm3.h"
14+
15+
/* Debugging */
16+
#define RMP_ASSERT_CORRECT (0U)
17+
/* Coverage */
18+
#define RMP_COVERAGE_LINE_NUM (6144U)
19+
20+
/* The maximum number of preemption priority levels in the system.
21+
* This parameter must be divisible by the word length - 32 is usually sufficient */
22+
#define RMP_PREEMPT_PRIO_NUM (64U)
23+
/* The maximum number of slices allowed */
24+
#define RMP_SLICE_MAX (100000U)
25+
/* The maximum number of semaphore counts allowed */
26+
#define RMP_SEM_CNT_MAX (1000U)
27+
/* Are we using custom hooks? */
28+
#define RMP_HOOK_EXTRA (0U)
29+
/* The stzck size of the init thread */
30+
#define RMP_INIT_STACK_SIZE (256U)
31+
/* The mask/unmask interrupt operations - can be adjusted to fit your own levels */
32+
#define RMP_INT_MASK() RMP_Int_Mask(0xFFU)
33+
#define RMP_INT_UNMASK() RMP_Int_Mask(0x00U)
34+
35+
/* What is the NVIC priority grouping? */
36+
#define RMP_A7M_NVIC_GROUPING RMP_A7M_NVIC_GROUPING_P2S6
37+
/* What is the Systick value? */
38+
#define RMP_A7M_SYSTICK_VAL (7200U)
39+
40+
/* Other low-level initialization stuff - clock and serial
41+
* STM32F10x APB1<36MHz, APB2<72MHz.
42+
* This is the default initialization sequence. If you wish to supply
43+
* your own, just redirect this macro to a custom function, or do your
44+
* initialization stuff in the initialization hook (RMP_Start_Hook). */
45+
#define RMP_A7M_LOWLVL_INIT() \
46+
do \
47+
{ \
48+
RCC_OscInitTypeDef Osc_Init; \
49+
RCC_ClkInitTypeDef Clk_Init; \
50+
UART_HandleTypeDef USART1_Handle; \
51+
GPIO_InitTypeDef GPIOA_Init; \
52+
HAL_Init(); \
53+
RMP_Clear(&Osc_Init, sizeof(RCC_OscInitTypeDef)); \
54+
RMP_Clear(&Clk_Init, sizeof(RCC_ClkInitTypeDef)); \
55+
RMP_Clear(&USART1_Handle, sizeof(UART_HandleTypeDef)); \
56+
RMP_Clear(&GPIOA_Init, sizeof(GPIO_InitTypeDef)); \
57+
\
58+
/* Enable HSE Oscillator and activate PLL with HSE as source */ \
59+
Osc_Init.OscillatorType=RCC_OSCILLATORTYPE_HSE; \
60+
Osc_Init.HSEState=RCC_HSE_ON; \
61+
Osc_Init.HSEPredivValue=RCC_HSE_PREDIV_DIV1; \
62+
Osc_Init.PLL.PLLState=RCC_PLL_ON; \
63+
Osc_Init.PLL.PLLSource=RCC_PLLSOURCE_HSE; \
64+
Osc_Init.PLL.PLLMUL=RCC_PLL_MUL9; \
65+
RMP_ASSERT(HAL_RCC_OscConfig(&Osc_Init)==HAL_OK); \
66+
\
67+
/* Secect PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ \
68+
Clk_Init.ClockType=(RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2); \
69+
Clk_Init.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK; \
70+
Clk_Init.AHBCLKDivider=RCC_SYSCLK_DIV1; \
71+
Clk_Init.APB2CLKDivider=RCC_HCLK_DIV1; \
72+
Clk_Init.APB1CLKDivider=RCC_HCLK_DIV2; \
73+
RMP_ASSERT(HAL_RCC_ClockConfig(&Clk_Init, FLASH_LATENCY_2)==HAL_OK); \
74+
__HAL_FLASH_PREFETCH_BUFFER_ENABLE(); \
75+
\
76+
__HAL_RCC_GPIOA_CLK_ENABLE(); \
77+
__HAL_RCC_USART1_CLK_ENABLE(); \
78+
GPIOA_Init.Mode=GPIO_MODE_AF_PP; \
79+
GPIOA_Init.Pin=GPIO_PIN_9; \
80+
GPIOA_Init.Speed=GPIO_SPEED_FREQ_HIGH; \
81+
HAL_GPIO_Init(GPIOA, &GPIOA_Init); \
82+
\
83+
USART1_Handle.Instance=USART1; \
84+
USART1_Handle.Init.BaudRate=115200; \
85+
USART1_Handle.Init.WordLength=UART_WORDLENGTH_8B; \
86+
USART1_Handle.Init.StopBits=UART_STOPBITS_1; \
87+
USART1_Handle.Init.Parity=UART_PARITY_NONE; \
88+
USART1_Handle.Init.HwFlowCtl=UART_HWCONTROL_NONE; \
89+
USART1_Handle.Init.Mode=UART_MODE_TX; \
90+
HAL_UART_Init(&USART1_Handle); \
91+
RMP_A7M_PUTCHAR('\r'); \
92+
RMP_A7M_PUTCHAR('\n'); \
93+
/* Enable all fault handlers */ \
94+
SCB->SHCSR|=RMP_A7M_SHCSR_USGFAULTENA|RMP_A7M_SHCSR_BUSFAULTENA|RMP_A7M_SHCSR_MEMFAULTENA; \
95+
\
96+
/* Set the priority of timer, svc and faults to the lowest */ \
97+
NVIC_SetPriorityGrouping(RMP_A7M_NVIC_GROUPING); \
98+
NVIC_SetPriority(SVCall_IRQn,0xFFU); \
99+
NVIC_SetPriority(PendSV_IRQn,0xFFU); \
100+
NVIC_SetPriority(SysTick_IRQn,0xFFU); \
101+
NVIC_SetPriority(BusFault_IRQn,0xFFU); \
102+
NVIC_SetPriority(UsageFault_IRQn,0xFFU); \
103+
NVIC_SetPriority(DebugMonitor_IRQn,0xFFU); \
104+
SysTick_Config(RMP_A7M_SYSTICK_VAL); \
105+
} \
106+
while(0)
107+
108+
/* This is for debugging output */
109+
#define RMP_A7M_PUTCHAR(CHAR) \
110+
do \
111+
{ \
112+
USART1->DR=CHAR; \
113+
while((USART1->SR&0x40U)==0U); \
114+
} \
115+
while(0)
116+
/* End Define ****************************************************************/
117+
118+
/* End Of File ***************************************************************/
119+
120+
/* Copyright (C) Evo-Devo Instrum. All rights reserved ***********************/

Source/Kernel/rmp_kernel.c

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -452,28 +452,41 @@ rmp_ptr_t RMP_RBT_Generic(rmp_ptr_t Value)
452452
}
453453
/* End Function:RMP_RBT_Generic **********************************************/
454454

455-
/* Function:RMP_Print_Coverage ************************************************
455+
/* Function:RMP_Coverage_Print ************************************************
456456
Description : The coverage data printer. Should always be disabled for all cases
457457
except where a kernel coverage test is needed. This should never
458-
be called ny any user application; for EDI coverage testing only.
458+
be called any any user application; for coverage testing only.
459459
Input : None.
460460
Output : None.
461461
Return : None.
462462
******************************************************************************/
463-
#ifdef RMP_COVERAGE
464-
void RMP_Print_Coverage(void)
463+
#ifdef RMP_COVERAGE_LINE_NUM
464+
void RMP_Coverage_Print(void)
465465
{
466466
rmp_ptr_t Count;
467+
rmp_ptr_t Next;
467468

468-
for(Count=1U;Count<RMP_COVERAGE_LINES;Count++)
469+
Next=0U;
470+
for(Count=0U;Count<RMP_COVERAGE_LINE_NUM;Count++)
469471
{
470-
if(RMP_Coverage[Count]!=0U)
472+
if((RMP_Coverage[Count>>RMP_WORD_ORDER]&RMP_POW2(Count&RMP_WORD_MASK))!=0U)
471473
{
472474
RMP_COVERAGE_MARKER();
473475
RMP_DBG_I(Count);
474-
RMP_DBG_S(":");
475-
RMP_DBG_I(RMP_Coverage[Count]);
476-
RMP_DBG_S("\r\n");
476+
RMP_DBG_S(",");
477+
/* We put 12 markers on a single line */
478+
Next++;
479+
if(Next>11U)
480+
{
481+
RMP_COVERAGE_MARKER();
482+
Next=0U;
483+
RMP_DBG_S("\r\n");
484+
}
485+
else
486+
{
487+
RMP_COVERAGE_MARKER();
488+
/* No action needed */
489+
}
477490
}
478491
else
479492
{
@@ -483,7 +496,7 @@ void RMP_Print_Coverage(void)
483496
}
484497
}
485498
#endif
486-
/* End Function:RMP_Print_Coverage *******************************************/
499+
/* End Function:RMP_Coverage_Print *******************************************/
487500

488501
/* Function:RMP_Clear *********************************************************
489502
Description : Memset a memory area to zero.
@@ -3110,9 +3123,9 @@ int main(void)
31103123
{
31113124
rmp_ptr_t Count;
31123125

3113-
#ifdef RMP_COVERAGE
3126+
#ifdef RMP_COVERAGE_LINE_NUM
31143127
/* Initialize coverage markers if coverage enabled */
3115-
for(Count=0U;Count<RMP_COVERAGE_LINES;Count++)
3128+
for(Count=0U;Count<RMP_COVERAGE_WORD_NUM;Count++)
31163129
{
31173130
RMP_Coverage[Count]=0U;
31183131
}

Source/Test/rmp_coverage.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
Filename : rmp_test.c
2+
Filename : rmp_coverage.c
33
Author : pry
44
Date : 22/07/2017
55
Licence : The Unlicense; see LICENSE for details.

0 commit comments

Comments
 (0)