This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Tool/software: TI C/C++ Compiler
Hello champion,
I am debugging a program on R4F inside IWR6843. The tools version are TI v18.1.3.LTS compiler and SYS BIOS 6.73.01.01. I am using CCS 8.2.0.
I find the code always enter the assert whose condition should not happen at all. When I checked the variables in stack, I find some abnormal variable values which cause exception. The variable window is as attached snapshot. I could not understand why two variables udPtIdx and udTgtIdx are always locate in stack address 0x0800586C. These variable are not referenced by each other, so should be independent with each other. I checked the code logic, but could not find any problem. The stack is not overflowed.
Could you help to give some comment? The building console output of this file is as below:
"C:\\CCS_8_2\\ccsv8\\utils\\bin\\gmake" -k -j 8 all -O
rm -f "C:/Users/a0286234/workspace_v8/3D_people_count_68xx_mss/3D_people_count_68xx_demo.bin"
makefile:206: recipe for target 'pre-build' failed
process_begin: CreateProcess(NULL, rm -f C:/Users/a0286234/workspace_v8/3D_people_count_68xx_mss/3D_people_count_68xx_demo.bin, ...) failed.
gmake[1]: [pre-build] Error 2 (ignored)
Building file: "C:/ti/mmwave_industrial_toolbox_4_1_0/labs/people_counting/68xx_3D_people_counting/src/mss/mss_main.c"
Invoking: ARM Compiler
"C:/CCS_8_2/ccsv8/tools/compiler/ti-cgt-arm_18.1.3.LTS/bin/armcl" -mv7R4 --code_state=16 --float_support=VFPv3D16 -me -O0 --include_path="C:/Users/a0286234/workspace_v8/3D_people_count_68xx_mss" --include_path="C:/Users/a0286234/workspace_v8/3D_people_count_68xx_mss/mss" --include_path="C:/Users/a0286234/workspace_v8/3D_people_count_68xx_mss/common" --include_path="C:/ti/mmwave_sdk_03_03_00_03/packages" --include_path="C:/ti/mmwave_sdk_03_03_00_03/packages/ti/demo/utils" --include_path="C:/ti/mathlib_c674x_3_1_2_1/packages" --include_path="C:/ti/dsplib_c64Px_3_4_0_0/packages" --include_path="C:/ti/dsplib_c64Px_3_4_0_0/packages/ti/dsplib/src/DSP_fft16x16_imre/c64P" --include_path="C:/ti/dsplib_c64Px_3_4_0_0/packages/ti/dsplib/src/DSP_fft32x32/c64P" --include_path="C:/ti/mmwave_industrial_toolbox_4_1_0/labs" --include_path="C:/CCS_8_2/ccsv8/tools/compiler/ti-cgt-arm_18.1.3.LTS/include" --define=FALLDET_PROC_EN --define=SOC_XWR68XX --define=SUBSYS_MSS --define=PLATFORMES2 --define=MMWAVE_L3RAM_NUM_BANK=6 --define=MMWAVE_SHMEM_TCMA_NUM_BANK=0 --define=MMWAVE_SHMEM_TCMB_NUM_BANK=0 --define=MMWAVE_SHMEM_BANK_SIZE=0x20000 --define=MMWAVE_L3_CODEMEM_SIZE=0x100 --define=DOWNLOAD_FROM_CCS --define=DebugP_ASSERT_ENABLED --define=_LITTLE_ENDIAN --define=OBJDET_NO_RANGE --define=TRACKERPROC_EN --define=GTRACK_3D --define=APP_RESOURCE_FILE='<'C:/ti/mmwave_industrial_toolbox_4_1_0/labs/people_counting/68xx_3D_people_counting/src/common/pcount3D_hwres.h'>' -g --gcc --diag_warning=225 --diag_wrap=off --display_error_number --gen_func_subsections=on --enum_type=int --abi=eabi --obj_extension=.oer4f --preproc_with_compile --preproc_dependency="mss/mss_main.d_raw" --obj_directory="mss" --cmd_file="configPkg/compiler.opt" "C:/ti/mmwave_industrial_toolbox_4_1_0/labs/people_counting/68xx_3D_people_counting/src/mss/mss_main.c"
"C:/ti/mmwave_industrial_toolbox_4_1_0/labs/people_counting/68xx_3D_people_counting/src/mss/mss_main.c", line 1197: warning #515-D: a value of type "float *" cannot be assigned to an entity of type "Pcount3DDemo_PointCloud_cartesian *"
"C:/ti/mmwave_industrial_toolbox_4_1_0/labs/people_counting/68xx_3D_people_counting/src/mss/mss_main.c", line 1883: warning #225-D: function "gtrack_spherical2cartesian" declared implicitly
Finished building: "C:/ti/mmwave_industrial_toolbox_4_1_0/labs/people_counting/68xx_3D_people_counting/src/mss/mss_main.c"
Building target: "3D_people_count_68xx_mss.xer4f"
The optimiser might do this if the variables don't interfere with each other:
A dumb example:
for (int i=0; i< 100; i++) /* do something */ ;
for(int j=0; i<100; j++) /* do something else*/;
i and j can share the same location on the stack.
When local variables are not active at the same time, they may share a register or memory location. This behavior is more common for registers than memory locations. In the screen shot you show, the register R0 is shared among 4 local variables.
Adam Yao94020 said:I find the code always enter the assert whose condition should not happen at all.
I don't know what causes this problem. But it unlikely to be related to these variables sharing a location on the stack. One thing to check ... Be sure all the local variables are initialized before they are used.
Thanks and regards,
-George