First off I did make a Debug Fault Handler, this is what I am getting r0 = 1200 0x000004B0 r1 = 0 0x00000000 r2 = 1200 0x000004B0 r3 = 1 0x00000001 r12 = 0 0x00000000 lr = 134228401 0x080029B1 pc = 134228410 0x080029BA psr = 553648128 0x21000000 OST = 536881104 0x200027D0 HFSR = 1073741824 0x40000000 CFSR = 1024 0x00000400 Showing BUSFAULT IMPRECISERR DFSR = 0 0x00000000 MMFAR = 3758157108 0xE000ED34 BFAR = 3758157112 0xE000ED38 AFSR = 0 0x00000000 PSP = 536881200 0x20002830 SHCSR = 0 0x00000000 FPSCR = 0 0x00000000 MSP = 536898808 0x20006CF8 XPSR = 3 0x00000003 APSR = 0 0x00000000 IPSR = 3 0x00000003 CONTROL = 4 0x00000004 s0 = 67119376 0x04002910 s1 = 536881455 0x2000292F s2 = 10520 0x00002918 s3 = 536902072 0x200079B8 s4 = 536881440 0x20002920 s5 = 134225495 0x08001E57 s6 = 0 0x00000000 s7 = 0 0x00000000 s8 = 0 0x00000000 s9 = 4294967257 0xFFFFFFD9 s10 = 3256614912 0xC21C0000 s11 = 29245 0x0000723D s12 = 1200 0x000004B0 s13 = 0 0x00000000 s14 = 1200 0x000004B0 s15 = 0 0x00000000 end = 3735936685 0xDEADDEAD Below is the thread. I am using a photocell with this program and it is hooked up to the ADC, It works fine when gradual changes occur, but throws a fault, when there is a spike or I go to low. Not sure if I went back far enough in the stack from PC to show where things may have gone wrong. Any help would be helpful, and extra info can be provided [code]0x08002834: str r0, [r7, #60] ; 0x3c 1373 } 0x08002836: ldr r3, [pc, #56] ; (0x8002870 <processParam+708>) 0x08002838: mov.w r2, #1 0x0800283c: str r2, [r3, #0] 1374 case APPDATA_PARAM_TIT: 0x0800283e: b.n 0x800298c <processParam+992> 1380 0x08002840: lsls r4, r4, #8 0x08002842: movs r2, #56 ; 0x38 0x08002844: lsls r5, r5, #29 0x08002846: lsrs r6, r1, #32 0x08002848: lsls r4, r2, #6 0x0800284a: movs r0, #0 1384 &u8Status); 0x0800284c: lsls r4, r0, #5 0x0800284e: movs r2, #56 ; 0x38 0x08002850: lsls r0, r2, #6 0x08002852: movs r0, #0 0x08002854: lsls r0, r1, #5 0x08002856: movs r2, #56 ; 0x38 0x08002858: cmp r2, #29 0x0800285a: movs r0, #0 0x0800285c: lsls r4, r1, #5 0x0800285e: movs r2, #56 ; 0x38 0x08002860: lsls r0, r2, #5 0x08002862: movs r2, #56 ; 0x38 1385 target = XADC_read(); 0x08002864: lsls r4, r2, #5 0x08002866: movs r2, #56 ; 0x38 0x08002868: lsls r0, r3, #5 0x0800286a: movs r2, #56 ; 0x38 0x0800286c: lsls r4, r3, #5 0x0800286e: movs r2, #56 ; 0x38 0x08002870: lsls r0, r4, #5 0x08002872: movs r2, #56 ; 0x38 0x08002874: ldr r0, [pc, #648] ; (0x8002b00 <processParam+1364>) 0x08002876: bl 0x8000430 <CJ_readColdJunction> 0x0800287a: mov r3, r0 0x0800287c: cmp r3, #0 1387 /* Adjust ADC reading */ 0x0800287e: beq.n 0x80028fe <processParam+850> 0x08002880: ldr r3, [pc, #636] ; (0x8002b00 <processParam+1364>) 0x08002882: ldrh r3, [r3, #0] 0x08002884: sxth r3, r3 0x08002886: cmp r3, #0 0x08002888: ; <UNDEFINED> instruction: 0xf103da01 0x0800288c: b 0x93c34b0 0x08002890: addslt r0, r10, #-1946157053 ; 0x8c000003 0x08002894: mulshi r10, r10, r11 0x08002898: ldmdahi r11, {r0, r3, r4, r7, r8, r9, r11, lr} 0x0800289c: ; <UNDEFINED> instruction: 0xf107b21a 0x080028a0: ldmmi r8, {r0, r1, r2, r3, r4, r8, r9} 0x080028a4: ; <UNDEFINED> instruction: 0x461a4611 0x080028a8: ; <UNDEFINED> instruction: 0xff24f000 0x080028ac: blmi 0x65940bc 0x080028b0: ; <UNDEFINED> instruction: 0xf005601a 0x080028b4: ; <UNDEFINED> instruction: 0x4603f9d5 0x080028b8: blmi 0x64db8ac 0x080028bc: blvs 0x7e9c930 0x080028c0: mvnsvs r1, #13828096 ; 0xd30000 0x080028c4: tsteq pc, #-1073741823 ; 0xc0000001 0x080028c8: blvs 0x7e54b08 1391 target /= 32; 0x080028cc: mov r2, r3 0x080028ce: bl 0x80032dc <LOOKUP_tableLookUp+40> 0x080028d2: str r0, [r7, #60] ; 0x3c 0x080028d4: ldr r2, [r7, #60] ; 0x3c 0x080028d6: mov r3, r2 1392 BB_SET_BIT(BB_OFFSET_APP_PROCESSPARAM, 8); 0x080028d8: mov.w r3, r3, lsl #2 0x080028dc: adds r3, r3, r2 0x080028de: mov.w r3, r3, lsl #1 1393 } 0x080028e0: lsls r3, r0, #13 0x080028e2: str r3, [r7, #60] ; 0x3c 0x080028e4: ldr r3, [r7, #60] ; 0x3c 1394 else 0x080028e6: cmp r3, #0 0x080028e8: bge.n 0x80028ee <processParam+834> 0x080028ea: add.w r3, r3, #31 1397 coldTemp = -9999; 0x080028ee: mov.w r3, r3, asr #5 0x080028f2: str r3, [r7, #60] ; 0x3c 0x080028f4: ldr r3, [pc, #532] ; (0x8002b0c <processParam+1376>) 1398 adjust = -9999; 0x080028f6: mov.w r2, #1 0x080028fa: str r2, [r3, #0] 0x080028fc: b.n 0x800292c <processParam+896> 0x080028fe: ldrsh.w r3, [r7, #86] ; 0x56 1400 BB_SET_BIT(BB_OFFSET_APP_PROCESSPARAM, 9); 0x08002900: adds r0, #86 ; 0x56 0x08002902: ldr r2, [pc, #524] ; (0x8002b10 <processParam+1380>) 0x08002904: mov.w r1, #0 0x08002908: strb r1, [r2, r3] 0x0800290a: ldr r3, [pc, #500] ; (0x8002b00 <processParam+1364>) 0x0800290c: movw r2, #55537 ; 0xd8f1 1401 } 0x08002910: strh r2, [r3, #0] 0x08002912: ldr r3, [pc, #500] ; (0x8002b08 <processParam+1372>) 0x08002914: ldr r2, [pc, #508] ; (0x8002b14 <processParam+1384>) 0x08002916: str r2, [r3, #0] 0x08002918: ldr r3, [pc, #488] ; (0x8002b04 <processParam+1368>) 0x0800291a: ldr r3, [r3, #4] 0x0800291c: add.w r3, r3, #4 1402 #if 0 0x08002920: ldr r3, [r3, #0] 0x08002922: str r3, [r7, #60] ; 0x3c 0x08002924: ldr r3, [pc, #496] ; (0x8002b18 <processParam+1388>) 0x08002926: mov.w r2, #1 0x0800292a: str r2, [r3, #0] 0x0800292c: ldr r3, [pc, #492] ; (0x8002b1c <processParam+1392>) 0x0800292e: ldr r3, [r3, #0] 1403 target = XADC_read(); 0x08002930: ldr r3, [r3, #124] ; 0x7c 0x08002932: and.w r3, r3, #4 0x08002936: cmp r3, #0 0x08002938: beq.n 0x800296a <processParam+958> 0x0800293a: ldr r2, [r7, #60] ; 0x3c 0x0800293c: mov r3, r2 1405 /* Adjust ADC reading */ 0x0800293e: mov.w r3, r3, lsl #3 0x08002942: adds r3, r3, r2 0x08002944: str r3, [r7, #60] ; 0x3c 0x08002946: ldr r3, [r7, #60] ; 0x3c 0x08002948: ldr r2, [pc, #468] ; (0x8002b20 <processParam+1396>) 1406 target = LOOKUP_tableLookUp(&XADC_typeKDegC, target, &u8Status); 0x0800294a: smull r1, r2, r2, r3 0x0800294e: mov.w r2, r2, asr #1 0x08002952: mov.w r3, r3, asr #31 0x08002956: subs r3, r2, r3 0x08002958: str r3, [r7, #60] ; 0x3c 0x0800295a: ldr r3, [r7, #60] ; 0x3c 0x0800295c: add.w r3, r3, #320 ; 0x140 1407 target *= 10; 0x0800295e: strb r0, [r4, #14] 0x08002960: str r3, [r7, #60] ; 0x3c 0x08002962: ldr r3, [pc, #448] ; (0x8002b24 <processParam+1400>) 0x08002964: mov.w r2, #1 1408 target /= 32; 0x08002966: lsls r1, r0, #8 0x08002968: str r2, [r3, #0] 0x0800296a: ldr r3, [pc, #444] ; (0x8002b28 <processParam+1404>) 0x0800296c: mov.w r2, #1 1410 0x0800296e: lsls r1, r0, #8 0x08002970: str r2, [r3, #0] 0x08002972: b.n 0x800298c <processParam+992> 0x08002974: ldr r3, [pc, #436] ; (0x8002b2c <processParam+1408>) 1411 if (APPDATA_IS_FAHRENHEIT) 0x08002976: mov.w r2, #1 1415 target += 320; 0x08002978: lsls r1, r0, #8 0x0800297a: str r2, [r3, #0] 0x0800297c: mov.w r0, #9 1416 BB_SET_BIT(BB_OFFSET_APP_PROCESSPARAM, 10); 0x08002980: ldr r1, [pc, #428] ; (0x8002b30 <processParam+1412>) 0x08002982: mov.w r2, #5 0x08002986: bl 0x80e0000 <RTERR_displayErrorId> 0x0800298a: nop 0x0800298c: ldrsh.w r4, [r7, #86] ; 0x56 1417 } 0x0800298e: eors r6, r2 1422 { 0x08002990: ldr r3, [r7, #60] ; 0x3c 0x08002992: add.w r3, r3, #5 0x08002996: ldr r2, [pc, #392] ; (0x8002b20 <processParam+1396>) 0x08002998: smull r1, r2, r2, r3 0x0800299c: mov.w r2, r2, asr #2 0x080029a0: mov.w r3, r3, asr #31 0x080029a4: subs r3, r2, r3 0x080029a6: mov r0, r3 0x080029a8: ldr r1, [r7, #80] ; 0x50 0x080029aa: ldr r2, [r7, #76] ; 0x4c 0x080029ac: bl 0x8003284 <limitParam+40> 0x080029b0: mov r2, r0 0x080029b2: ldr r3, [pc, #384] ; (0x8002b34 <processParam+1416>) 0x080029b4: str.w r2, [r3, r4, lsl #2] 0x080029b8: ldrb r3, [r7, #7] 0x080029ba: cmp r3, #1 1427 }/* End of Switch */ 0x080029bc: bne.n 0x80029d0 <processParam+1060> 0x080029be: ldr r3, [pc, #376] ; (0x8002b38 <processParam+1420>) 0x080029c0: ldr r3, [r3, #0] 1429 /* set and limit*/ 0x080029c2: cmp.w r3, #4294967295 0x080029c6: beq.n 0x80029e0 <processParam+1076> 0x080029c8: ldr r3, [pc, #364] ; (0x8002b38 <processParam+1420>) 0x080029ca: ldr r3, [r3, #0] 1431 0x080029cc: str r3, [r7, #60] ; 0x3c 0x080029ce: b.n 0x80029e0 <processParam+1076> 0x080029d0: ldr r3, [pc, #356] ; (0x8002b38 <processParam+1420>)[/code
I may have fixed the problem...or at least for now it seems. Seemed only to throw a fault when I got a low signal from ADC. I increased the sampling time, and that seemed to have fixed the issue for now. Can the ADC be thrown off by possible white noise, and cause a IMPRECISERR?
You are a funny guy, you post a big bunch of disassembled code and expect anyone do debug it?! Why don't you post the C code? The IMPRECISERR has nothing to do with the ADC and is solely caused by the Cortex Core and its bus. Quoting from the ARMv7M Architechture Reference Manual (a must-read for Cortex-M4 developers): BusFault, bus error on data bus, imprecise Status bit BFSR.IMPRECISERR Imprecise bus error caused by an explicit memory access. The processor does not update the Bus Fault Address Register. The error is caused by an error in your code which might get triggered by certain ADC values.
LOL,I posted the disassembly, because the IMPRECISERR usually deals with a STR somewhere if it was my code. I would of posted my C code, but being RTOS, its not all straight forward. And I know the ADC has nothing to do with the IMPRECISERR, but that is what I was wondering if the values maybe throwing it off. Thanks though for clearing that up. My problem seemed to be an odd one, and I was having issues finding similar issues. So far so good, seems by increasing the sampling time, it improved the issue, if not also fixed it.
SGT Jacobs wrote: > LOL,I posted the disassembly, because the IMPRECISERR usually deals with > a STR somewhere if it was my code. Ah yes. But since the "str" is generated from C Code and that is generally much more readable, posting that would likely result in more helpful answers. Posting a minimal compilable example in C that shows the problem also greatly increases the chances of getting help.
how change it to no-cooldawn or 0 timers skills str r0, [r10, #56] writeData(0x256ba4, 0x!!!!!!!!);
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.