Browse Source

feat(unit_test): 测试捕获中断逻辑,更新lib,更新封装分支配置

CN\zhangkai71 2 years ago
parent
commit
9285591a28

BIN
User project/2.MotorDrive/Lib/WLMCP_LIB.lib


+ 136 - 14
WLMCP_PACKED.ewp

@@ -353,6 +353,8 @@
                     <state>$PROJ_DIR$\User project\3.BasicFunction\Include</state>
                     <state>$PROJ_DIR$\User project\4.BasicHardwSoftwLayer\1.BasicHardwLayer\Include</state>
                     <state>$PROJ_DIR$\User project\4.BasicHardwSoftwLayer\2.BasicSoftwLayer\Include</state>
+                    <state>$PROJ_DIR$\User project\5.Api_rt</state>
+                    <state>$PROJ_DIR$\api</state>
                     <state>$PROJ_DIR$\MSTLibraries\MISC\inc</state>
                     <state>$PROJ_DIR$\MSTLibraries\SelfTestLib\inc</state>
                 </option>
@@ -688,7 +690,7 @@
             <name>BUILDACTION</name>
             <archiveVersion>1</archiveVersion>
             <data>
-                <prebuild></prebuild>
+                <prebuild>powershell $PROJ_DIR$\tools\gen_fingerprint.ps1</prebuild>
                 <postbuild></postbuild>
             </data>
         </settings>
@@ -2112,6 +2114,45 @@
             <data />
         </settings>
     </configuration>
+    <group>
+        <name>api</name>
+        <file>
+            <name>$PROJ_DIR$\api\api.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_adc.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_cap.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_delay.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_fault.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_gpio.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_i2c.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_pwm.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_scheduler.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_test_probe.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_timer.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\api\api_uart.h</name>
+        </file>
+    </group>
     <group>
         <name>MSTLibraries</name>
         <group>
@@ -2427,6 +2468,12 @@
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Include\main.h</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\1.FrameLayer\Include\sys_ctrl.h</name>
+                </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\1.FrameLayer\Include\sys_task.h</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Include\tbc.h</name>
                 </file>
@@ -2442,6 +2489,9 @@
             </group>
             <group>
                 <name>Source</name>
+                <file>
+                    <name>$PROJ_DIR$\User project\1.FrameLayer\Source\app.c</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Source\FSM_1st.c</name>
                 </file>
@@ -2454,6 +2504,12 @@
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Source\main.c</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\1.FrameLayer\Source\sys_ctrl.c</name>
+                </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\1.FrameLayer\Source\sys_task.c</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Source\tbc.c</name>
                 </file>
@@ -2502,18 +2558,12 @@
                 <file>
                     <name>$PROJ_DIR$\User project\2.MotorDrive\Include\dbc.h</name>
                 </file>
-                <file>
-                    <name>$PROJ_DIR$\User project\2.MotorDrive\Include\fluxweaken.h</name>
-                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\2.MotorDrive\Include\flxwkn.h</name>
                 </file>
                 <file>
                     <name>$PROJ_DIR$\User project\2.MotorDrive\Include\hfinj.h</name>
                 </file>
-                <file>
-                    <name>$PROJ_DIR$\User project\2.MotorDrive\Include\motordriveAPI.h</name>
-                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\2.MotorDrive\Include\obs.h</name>
                 </file>
@@ -2533,13 +2583,7 @@
                     <name>$PROJ_DIR$\User project\2.MotorDrive\Include\torqobs.h</name>
                 </file>
                 <file>
-                    <name>$PROJ_DIR$\User project\2.MotorDrive\Include\uart_appl.h</name>
-                </file>
-                <file>
-                    <name>$PROJ_DIR$\User project\2.MotorDrive\Include\uart_driver.h</name>
-                </file>
-                <file>
-                    <name>$PROJ_DIR$\User project\2.MotorDrive\Include\uart_monitor_appl.h</name>
+                    <name>$PROJ_DIR$\User project\2.MotorDrive\Include\uart_monitor.h</name>
                 </file>
             </group>
             <group>
@@ -2562,6 +2606,9 @@
                 <file>
                     <name>$PROJ_DIR$\User project\2.MotorDrive\Source\spdctrmode.c</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\2.MotorDrive\Source\uart_monitor.c</name>
+                </file>
             </group>
         </group>
         <group>
@@ -2607,6 +2654,9 @@
                 <file>
                     <name>$PROJ_DIR$\User project\3.BasicFunction\Include\i2c_master.h</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\3.BasicFunction\Include\InputCapture.h</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\3.BasicFunction\Include\power.h</name>
                 </file>
@@ -2661,6 +2711,9 @@
                 <file>
                     <name>$PROJ_DIR$\User project\3.BasicFunction\Source\i2c_master.c</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\3.BasicFunction\Source\InputCapture.c</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\3.BasicFunction\Source\power.c</name>
                 </file>
@@ -2684,6 +2737,15 @@
                 <name>hard</name>
                 <group>
                     <name>Include</name>
+                    <file>
+                        <name>$PROJ_DIR$\User project\4.BasicHardwSoftwLayer\1.BasicHardwLayer\Include\api_board_support.h</name>
+                    </file>
+                    <file>
+                        <name>$PROJ_DIR$\User project\4.BasicHardwSoftwLayer\1.BasicHardwLayer\Include\api_config.h</name>
+                    </file>
+                    <file>
+                        <name>$PROJ_DIR$\User project\4.BasicHardwSoftwLayer\1.BasicHardwLayer\Include\board_config.h</name>
+                    </file>
                     <file>
                         <name>$PROJ_DIR$\User project\4.BasicHardwSoftwLayer\1.BasicHardwLayer\Include\bootloader.h</name>
                     </file>
@@ -2756,5 +2818,65 @@
                 </group>
             </group>
         </group>
+        <group>
+            <name>5.Api_rt</name>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_adc.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_adc.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_cap.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_cap.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_common.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_dbg.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_dbg.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_gpio.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_gpio.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_i2c.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_i2c.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_pwm.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_pwm.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_timer.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_timer.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_uart.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\User project\5.Api_rt\api_rt_uart.h</name>
+            </file>
+        </group>
     </group>
 </project>

+ 1 - 1
tests/unit_test/main.cpp

@@ -19,7 +19,7 @@ int main(int argc, char **argv)
 {
     // ::testing::GTEST_FLAG(output) = "xml:unittest.xml";
     ::testing::InitGoogleTest(&argc, argv);
-    UdpScope::Init(50000);
+    UdpScope::Init(56789);
     MotorSimHelper::StoreDefaultParam();
     auto res = RUN_ALL_TESTS();
     UdpScope::Deinit();

+ 145 - 18
tests/unit_test/test_bikespeed.cpp

@@ -9,16 +9,25 @@ class BikeSpeedTest : public testing::Test
 protected:
     static void SetUpTestSuite()
     {
-        bikespeed_voBikeSpeedInit();
-        iRt_Init();
+        
+
     }
     virtual void SetUp() override
     {
+        iRt_Init();
+        iCap_BindDeviceInterrupt(0,IC_CountMaxISR);
+        iCap_EnableDeviceInterrupt(0);
+        iCap_BindChannelInterrupt(0,CAP_CH(3),IC_BikeSpdISR);
+        iCap_EnableChannelInterrupt(0,CAP_CH(3));
+          iCap_BindChannelInterrupt(0,CAP_CH(2),IC_CadenceISR);
+        iCap_EnableChannelInterrupt(0,CAP_CH(2));
 
+        cadence_voCadenceInit();
+        bikespeed_voBikeSpeedInit();
     }
     virtual void TearDown() override
     {
-        bikespeed_voBikeSpeedInit();
+    
     }
 };
 
@@ -112,36 +121,41 @@ TEST_P(BikeSpeedTest1, FreCal)
 INSTANTIATE_TEST_SUITE_P(DiffBikeSpeedPeriod, BikeSpeedTest1,
                          ::testing::Values(0, 500, 3000, 18000, 100000,10000000));
 
-TEST_F(BikeSpeedTest, FreCal2)
+class BikeSpeedTest2 : public BikeSpeedTest, public testing::WithParamInterface<int>
+{};
+
+TEST_P(BikeSpeedTest2, IntSimultFreCal)
 {
     /* Coef Cal */
     bikespeed_voBikeSpeedCof();
     bikespeed_stFreGetCof.uwNumbersPulses = BIKESPEED_NUMBERS_PULSES;
+    switch_flg.SysCoef_Flag = TRUE;
 
     /* Test conditions */
     bikespeed_stFreGetOut.bikespeed_fsm = BIKESPEED_WORK;
     bikespeed_stFreGetOut.uwCaputureNumCnt = 1;
-    bikespeed_stFreGetOut.uwCaputure1Cnt = 0;
+    bikespeed_stFreGetOut.uwCaputure1Cnt = 100;
     bikespeed_stFreGetOut.uwCaputureOverflowCnt = 3;
 
     double overflowCnt = bikespeed_stFreGetOut.uwCaputureOverflowCnt;
     double cap1Cnt = bikespeed_stFreGetOut.uwCaputure1Cnt;
 
-    testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP] = 1;
-    testCh3CapValue[TIMER1] = 17900;
-    testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3] = 1;
 
-    /* Interrupt: update and capture */       
-    if(testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP])  
+    testCh3CapValue[TIMER1] = GetParam();
+
+    /* Interrupt flag */ 
+    testTimerIntFlag2[TIMER1] = 0x0011;
+    
+    /* Interrupt: update and capture */ 
+    if(testTimerIntFlag2[TIMER1] != 0)  
     {
-        bikespeed_voBikeSpeedCal(1);
-        testTimerIntFlg[TIMER1][TIMER_INT_FLAG_UP] = 0;
-    }
-    else if(testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3])
+        iRtCap_Isr(0);
+    }     
+
+    if(testCh3CapValue[TIMER1] < (iCap_GetPeriod(0) >> 1))
     {
-        bikespeed_voBikeSpeedCal(3);
-        testTimerIntFlg[TIMER1][TIMER_INT_FLAG_CH3] = 0;
-    }        
+        overflowCnt++;
+    }
 
     double bikeSpeedFreqPu =  overflowCnt * 18000 + bikespeed_stFreGetOut.uwCaputure2Cnt - cap1Cnt;
     bikeSpeedFreqPu = (double)TIM1CLK_KHZ * 1000 * 1048576 / bikeSpeedFreqPu / FBASE / bikespeed_stFreGetCof.uwNumbersPulses;  // Q20
@@ -153,5 +167,118 @@ TEST_F(BikeSpeedTest, FreCal2)
     else 
     {
         EXPECT_NEAR(bikespeed_stFreGetOut.uwFrequencyPu, bikeSpeedFreqPu, 2);
+        if(testCh3CapValue[TIMER1] < (iCap_GetPeriod(0) >> 1))
+        {
+            EXPECT_EQ(bikespeed_stFreGetOut.uwCaputureOverflowCnt, 0);
+        }
+        else 
+        {
+            EXPECT_EQ(bikespeed_stFreGetOut.uwCaputureOverflowCnt, 1);
+        }
     }
-}
+}
+
+INSTANTIATE_TEST_SUITE_P(DiffBikeSpeedPeriod, BikeSpeedTest2,
+                         ::testing::Values(200, 17900));
+
+
+class BikeSpeedTest3 : public BikeSpeedTest, public testing::WithParamInterface<::std::tuple<int,int>>
+{};
+
+TEST_P(BikeSpeedTest3, IntSimultFreCal)
+{
+    /* Coef Cal */
+    bikespeed_voBikeSpeedCof();
+    bikespeed_stFreGetCof.uwNumbersPulses = BIKESPEED_NUMBERS_PULSES;
+    switch_flg.SysCoef_Flag = TRUE;
+    cadence_voCadenceCof();
+    cadence_stFreGetCof.uwNumbersPulses = CADENCE_NUMBERS_PULSES;
+    bikespeed_voBikeSpeedCof(); ///< timer更新中断函数中有bikespeed函数,防止运行时除0
+
+    /* Test conditions */
+    bikespeed_stFreGetOut.bikespeed_fsm = BIKESPEED_WORK;
+    bikespeed_stFreGetOut.uwCaputureNumCnt = 1;
+    bikespeed_stFreGetOut.uwCaputure1Cnt = 100;
+    bikespeed_stFreGetOut.uwCaputureOverflowCnt = 3;
+
+    /* Test conditions */
+    cadence_stFreGetOut.cadence_fsm = CADENCE_HFreWork;
+    cadence_stFreGetOut.uwCaputureNumCnt = 1;
+    cadence_stFreGetOut.uwCaputure1Cnt = 100;
+    cadence_stFreGetOut.uwCaputureOverflowCnt = 1;  ///< OverflowCnt cant be 0
+    testGpioBValue[GPIOB] = 0;
+
+    double BSoverflowCnt = bikespeed_stFreGetOut.uwCaputureOverflowCnt;
+    double BScap1Cnt = bikespeed_stFreGetOut.uwCaputure1Cnt;
+
+    double CDoverflowCnt = cadence_stFreGetOut.uwCaputureOverflowCnt;
+    double CDcap1Cnt = cadence_stFreGetOut.uwCaputure1Cnt;
+
+    testCh2CapValue[TIMER1] = get<1>(GetParam());
+    testCh3CapValue[TIMER1] = get<0>(GetParam());
+
+    /* Interrupt flag */ 
+    testTimerIntFlag2[TIMER1] = 0x0019;
+    
+    /* Interrupt: update and capture */ 
+    if(testTimerIntFlag2[TIMER1] != 0)  
+    {
+        iRtCap_Isr(0);
+    }     
+
+    if(testCh3CapValue[TIMER1] < (iCap_GetPeriod(0) >> 1))
+    {
+        BSoverflowCnt++;
+    }
+    if(testCh2CapValue[TIMER1] < (iCap_GetPeriod(0) >> 1))
+    {
+        CDoverflowCnt++;
+    }
+
+    double bikeSpeedFreqPu =  BSoverflowCnt * 18000 + bikespeed_stFreGetOut.uwCaputure2Cnt - BScap1Cnt;
+    bikeSpeedFreqPu = (double)TIM1CLK_KHZ * 1000 * 1048576 / bikeSpeedFreqPu / FBASE / bikespeed_stFreGetCof.uwNumbersPulses;  // Q20
+
+    if(bikeSpeedFreqPu > bikespeed_stFreGetCof.uwMaxBikeSpeedFre || bikespeed_stFreGetOut.uwCaputureOverflowCnt > bikespeed_stFreGetOut.uwCaputureOverflowMinCnt)
+    {
+        EXPECT_NEAR(bikespeed_stFreGetOut.uwFrequencyPu, 0, 0.1);
+    }
+    else 
+    {
+        EXPECT_NEAR(bikespeed_stFreGetOut.uwFrequencyPu, bikeSpeedFreqPu, 2);
+        if(testCh3CapValue[TIMER1] < (iCap_GetPeriod(0) >> 1))
+        {
+            EXPECT_EQ(bikespeed_stFreGetOut.uwCaputureOverflowCnt, 0);
+        }
+        else 
+        {
+            EXPECT_EQ(bikespeed_stFreGetOut.uwCaputureOverflowCnt, 1);
+        }
+    }
+
+
+
+    double capValErrLast = 0, capValErr = 0, cadFreqPu = 0;
+    capValErrLast = capValErr;
+    capValErr =  CDoverflowCnt * 18000 + cadence_stFreGetOut.uwCaputure2Cnt - CDcap1Cnt;
+    cadFreqPu = (double)TIM1CLK_KHZ * 1000 * 1048576 / ((capValErr + capValErrLast) / 2)/ FBASE / cadence_stFreGetCof.uwNumbersPulses;  // Q20
+
+    if(cadFreqPu > cadence_stFreGetCof.uwMaxCadenceFre || cadence_stFreGetOut.uwCaputureOverflowCnt > cadence_stFreGetCof.uwHfMaxTimeCnt || cadence_stFreGetOut.cadence_dir == 1)
+    {
+        EXPECT_NEAR(cadence_stFreGetOut.uwFrequencyPu, 0, 0.1);
+    }
+    else 
+    {
+        EXPECT_NEAR(cadence_stFreGetOut.uwFrequencyPu, cadFreqPu, 2);
+        if(testCh2CapValue[TIMER1] < (iCap_GetPeriod(0) >> 1))
+        {
+            EXPECT_EQ(cadence_stFreGetOut.uwCaputureOverflowCnt, 0);
+        }
+        else 
+        {
+            EXPECT_EQ(cadence_stFreGetOut.uwCaputureOverflowCnt, 1);
+        }
+    }
+}
+
+INSTANTIATE_TEST_SUITE_P(DiffBikeSpeedPeriod, BikeSpeedTest3,
+                        ::testing::Combine(::testing::Values(200, 17900), ::testing::Values(199, 201, 17800,17901)));

+ 24 - 4
tests/unit_test/test_cadence.cpp

@@ -111,7 +111,11 @@ TEST_P(CadenceTest1, FreCal)
 INSTANTIATE_TEST_SUITE_P(DiffCadencePeriod, CadenceTest1,
                          ::testing::Combine(::testing::Values(0, 500, 3000, 18002, 100000,1000000), ::testing::Values(0,0x0004)));
 
-TEST_F(CadenceTest, IntSimultFreCal)
+
+class CadenceTest2 : public CadenceTest, public testing::WithParamInterface<int>
+{};
+
+TEST_P(CadenceTest2, IntSimultFreCal)
 {
     /* Coef Cal */
     cadence_voCadenceCof();
@@ -129,7 +133,7 @@ TEST_F(CadenceTest, IntSimultFreCal)
     double overflowCnt = cadence_stFreGetOut.uwCaputureOverflowCnt;
     double cap1Cnt = cadence_stFreGetOut.uwCaputure1Cnt;
 
-    testCh2CapValue[TIMER1] = 17900;
+    testCh2CapValue[TIMER1] = GetParam();
 
     /* Interrupt flag */ 
     testTimerIntFlag2[TIMER1] = 0x0009;
@@ -139,7 +143,12 @@ TEST_F(CadenceTest, IntSimultFreCal)
     {
         iRtCap_Isr(0);
     }
- 
+
+    if(testCh2CapValue[TIMER1] < (iCap_GetPeriod(0) >> 1))
+    {
+        overflowCnt++;
+    }
+
     double capValErrLast = 0, capValErr = 0, cadFreqPu = 0;
     capValErrLast = capValErr;
     capValErr =  overflowCnt * 18000 + cadence_stFreGetOut.uwCaputure2Cnt - cap1Cnt;
@@ -152,5 +161,16 @@ TEST_F(CadenceTest, IntSimultFreCal)
     else 
     {
         EXPECT_NEAR(cadence_stFreGetOut.uwFrequencyPu, cadFreqPu, 2);
+        if(testCh2CapValue[TIMER1] < (iCap_GetPeriod(0) >> 1))
+        {
+            EXPECT_EQ(cadence_stFreGetOut.uwCaputureOverflowCnt, 0);
+        }
+        else 
+        {
+            EXPECT_EQ(cadence_stFreGetOut.uwCaputureOverflowCnt, 1);
+        }
     }
-}
+}
+
+INSTANTIATE_TEST_SUITE_P(DiffBikeSpeedPeriod, CadenceTest2,
+                         ::testing::Values(200, 17900));