# ccs_Debug.pl # Demonstrates some of Code Composer Studio Scripting's debugging functionality # Pulls in the Code Composer Studio Scripting declarations and definitions use CCS_SCRIPTING_PERL; # Declarations and Initializations # Create 2 new Code Composer Studio Scripting objects my $MyCCScripting = new CCS_SCRIPTING_PERL::CCS_Scripting(); my $MyCCScripting2 = new CCS_SCRIPTING_PERL::CCS_Scripting(); my $sCurDir; my $sLogFile; my $sProject; my $sProgram; my $nPCVal; my $nPCVal2; my $nMainAddr; my $nBreakpoint1; my $nBreakpoint2; my $sHexOutput; my $sBoardName; my $sCPUName; my $sVersion; $sProject = ".\\c28_test\\c28_test.pjt"; $sProgram = ".\\c28_test\\Debug\\c28_test.out"; $sLogFile = ".\\c28_test_ccs_Debug.log"; $sCurDir = ".\\"; #print ("Testing...\n"); # Open log file and set to maximum level of debug output $MyCCScripting -> ScriptTraceBegin($sLogFile); $MyCCScripting -> ScriptTraceVerbose($CCS_SCRIPTING_PERL::VERBOSE_ALL); # Get the current version of Code Composer Studio Scripting #$sVersion = $MyCCScripting->ScriptGetVersion(); #$MyCCScripting -> ScriptTraceWrite("$sVersion\n"); #print "$sVersion\n"; # Open Code Composer Studio for the C55x Phase 3 Simulator #$MyCCScripting -> CCSOpen($CCS_SCRIPTING_PERL::ISA_C55, # 0, # 0, # $CCS_SCRIPTING_PERL::PLATFORM_SIMULATOR, # 1); # Alternatively -- # Clear current Code Composer Studio configuration # Configure for a c55x simulator # Open that as the default Code Composer Studio configuration # Make the Code Composer Studio application not visible # The CCSConfigImport API requires an absolute pathname to the configuration file $MyCCScripting -> CCSConfigClear(); $MyCCScripting -> CCSConfigImport("c:\\CCStudio_v3.3\\drivers\\import\\f2812_sim.ccs"); $MyCCScripting -> CCSOpenNamed("*", "*", 0); # Retrieve the Board name and CPU name of the current configuration # and write names to log file #$sBoardName = $MyCCScripting -> TargetGetBoardName(); #$sCPUName = $MyCCScripting -> TargetGetCPUName(); #$MyCCScripting -> ScriptTraceWrite("Board Name: $sBoardName\n"); #$MyCCScripting -> ScriptTraceWrite("CPU Name: $sCPUName\n\n"); # The previous Board name and CPU name can be used to open other instance of Code Composer Studio #$MyCCScripting2 -> CCSOpenNamed($sBoardName, $sCPUName, 0); # Set the Current Directory, if necessary $MyCCScripting -> CCSSetCurrentDirectory($sCurDir); # Open the project $MyCCScripting -> ProjectOpen($sProject); # Build a project #$MyCCScripting -> ProjectBuild("Debug"); # Load an .out file $MyCCScripting -> ProgramLoad($sProgram); # Get the address of main. Set a breakpoint at main. $nMainAddr = $MyCCScripting -> SymbolGetAddress("main"); #$nBreakpoint1 = $MyCCScripting -> BreakpointSetAddress($nMainAddr); # Run to breakpoint (main) #$MyCCScripting -> TargetRun(); # Read the value of the PC and display in the DOS prompt #while ($nPCVal != 0x3f784c){ while ($nPCVal != 0x3f601d){ #$MyCCScripting->RegisterWrite("AR0", 0x5555); $MyCCScripting -> TargetStepIntoAsm(); $nPCVal = $MyCCScripting -> RegisterRead("PC"); #$nSPVal = $MyCCScripting -> RegisterRead("SP"); $nAcc = $MyCCScripting -> RegisterRead("ACC"); $nARVal = $MyCCScripting -> RegisterRead("AR0"); #$nSPVal = $MyCCScripting -> RegisterRead("SP"); $sHexOutput1 = sprintf("PC :0x%x\n", $nPCVal); $sHexOutput2 = sprintf("ACC :0x%x\n", $nAcc); $sHexOutput3 sprintf("AR0 :0x%x\n", $nARVal); print $sHexOutput1; print $sHexOutput2; print $sHexOutput3; } # Display the address of main in the DOS prompt $sHexOutput = sprintf("The address of main is -> 0x%x \n", $nMainAddr); #print $sHexOutput; # Perform a step into C source #$MyCCScripting -> TargetStepOverSrc; # Perform a step into Asm source #$MyCCScripting -> TargetStepIntoAsm; # Set a breakpoint at the value of the PC #$nPCVal2 = $MyCCScripting -> RegisterRead("PC"); #$nBreakpoint2 = $MyCCScripting -> BreakpointSetAddress($nPCVal2); # Write a comment to the log file #$MyCCScripting -> ScriptTraceWrite("Restarting and rerunning program\n"); # Remove the second breakpoint. #$MyCCScripting -> BreakpointRemove($nBreakpoint2); # Remove all the breakpoints. Restart and rerun. #$MyCCScripting -> BreakpointRemoveAll; #$MyCCScripting -> TargetReset; #$MyCCScripting -> TargetRestart; #$MyCCScripting -> TargetRun; # Check previous values if ($nPCVal == $nMainAddr) { $MyCCScripting -> ScriptTraceWrite("\nTest Passed\n"); # print ("Passed"); } else { $MyCCScripting -> ScriptTraceWrite("\nTest Failed\n"); print ("Failed"); } # Close all current Code Composer Studio processes #$MyCCScripting -> CCSClose(); # Or, close only one Code Composer Studio #$MyCCScripting2 -> CCSClose(0); # Close the log file #$MyCCScripting -> ScriptTraceEnd;