|
|
View previous topic :: View next topic |
Author |
Message |
pumiddu
Joined: 07 Jan 2007 Posts: 3
|
Please help me understand this STRANGE problem. |
Posted: Fri Aug 27, 2010 10:40 am |
|
|
Hello, first of all I would thank you anybody would help me to solve this issue.
I'm using CCS compiler version 4.094 for an application running on PIC16F886.
The application includes a menu, I made using pointers to function. I made an array of struct for each menu and submenus, where I put menu entry string and the relative pointer to function. The menu engine works fine, but I encountered a problem during the firmware updating. I saw a character of one menu entry string is different than that I wrote in the C code. I thought it was a compiler issue, but I found in the .lst file the compiled code is correct. I post you the part of the compiled code.
Code: | .................... MenuItem TestMenu[3]={{"TEST DISP.", test_display}, {"TEST KEYS ",test_keys}, {"RETURN ",return_mainmenu}};
193B: MOVLW 54
193C: BCF 03.5
193D: BSF 03.6
193E: MOVWF 10
193F: MOVLW 45
1940: MOVWF 11
1941: MOVLW 53
1942: MOVWF 12
1943: MOVLW 54
1944: MOVWF 13
1945: MOVLW 20
1946: MOVWF 14
1947: MOVLW 44
1948: MOVWF 15
1949: MOVLW 49
194A: MOVWF 16
194B: MOVLW 53
194C: MOVWF 17
194D: MOVLW 50
194E: MOVWF 18
194F: MOVLW 2E
1950: MOVWF 19
1951: CLRF 1A
1952: MOVLW 15
1953: MOVWF 1C
1954: MOVLW A5
1955: MOVWF 1B
1956: MOVLW 54
1957: MOVWF 1D
1958: MOVLW 45
1959: MOVWF 1E
195A: MOVLW 53
195B: MOVWF 1F
195C: MOVLW 54
195D: MOVWF 20
195E: MOVLW 20
195F: MOVWF 21
1960: MOVLW 4B
1961: MOVWF 22
1962: MOVLW 45
1963: MOVWF 23
1964: MOVLW 59
1965: MOVWF 24
1966: MOVLW 53
1967: MOVWF 25
1968: MOVLW 20
1969: MOVWF 26
196A: CLRF 27
196B: MOVLW 16
196C: MOVWF 29
196D: MOVLW 2E
196E: MOVWF 28
196F: MOVLW 52
1970: MOVWF 2A
1971: MOVLW 45
1972: MOVWF 2B
1973: MOVLW 54
1974: MOVWF 2C
1975: MOVLW 55
1976: MOVWF 2D
1977: MOVLW 52
1978: MOVWF 2E
1979: MOVLW 4E
197A: MOVWF 2F
197B: MOVLW 20
197C: MOVWF 30
197D: MOVWF 31
197E: MOVWF 32
197F: MOVWF 33
1980: CLRF 34
1981: MOVLW 14
1982: MOVWF 36
1983: MOVLW C9
1984: MOVWF 35
.................... |
Line 1949 would load W register with value 0x49 = 'I' character, but I found 0xFF in file register instead.
My questions are: is it assembler or programming issue ? How can I understand what's happening?
Thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Aug 27, 2010 10:53 am |
|
|
Post a short test program that shows the problem. It must be compilable.
Here are some examples of test programs for function pointers in structures:
http://www.ccsinfo.com/forum/viewtopic.php?t=33458
http://www.ccsinfo.com/forum/viewtopic.php?t=31637
http://www.ccsinfo.com/forum/viewtopic.php?t=35500
Strip your program down so it's the minimum size needed to show the
problem (no CCS Wizard code). It should have the #include, #fuses,
#use delay(), and main() in it, and compile with no errors.
In your program, indicate with a comment, the line where you see the
problem. Explain what you're doing to see the problem (ie., printf,
or using debugger with a watch window, breakpoint on the line, etc.) |
|
|
pumiddu
Joined: 07 Jan 2007 Posts: 3
|
|
Posted: Fri Aug 27, 2010 11:05 am |
|
|
Thank you for your prompt reply "PCM Programmer",
as I wrote and you can check in the first post the compiled code It's correct.
The compiled code reflect the C instruction shown.
It seem an assembler issue when generating the .hex file or during programming.
If you however think it's a compile issue, please write me again and I will make a short C list version. |
|
|
bkamen
Joined: 07 Jan 2004 Posts: 1615 Location: Central Illinois, USA
|
|
Posted: Fri Aug 27, 2010 11:47 am |
|
|
pumiddu wrote: |
as I wrote and you can check in the first post the compiled code It's correct.
|
It's not complete.
You need the proper header info which normally would include
the PIC's .H file, the fuses statements and such all the way to and through main().
Your post does not include this.
-Ben _________________ Dazed and confused? I don't think so. Just "plain lost" will do. :D |
|
|
FvM
Joined: 27 Aug 2008 Posts: 2337 Location: Germany
|
|
Posted: Fri Aug 27, 2010 12:00 pm |
|
|
Quote: | as I wrote and you can check in the first post the compiled code It's correct. |
>>
Quote: | Post a short test program that shows the problem. It must be compilable. |
How could we locate the problem without a test code? The test should also include
your method to display the error. E.g. printf() or whatsoever. |
|
|
pumiddu
Joined: 07 Jan 2007 Posts: 3
|
|
Posted: Fri Aug 27, 2010 12:25 pm |
|
|
Thank you all for your attention,
Please find below some of the C code I wrote, that as I told it works fine.
It's a code extract, since it's long and could cause confusing.
Code: | #include <16F886.h>
#device *=16
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES PUT //Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //Reset when brownout detected
#FUSES NOIESO //Internal External Switch Over mode enabled
#FUSES NOFCMEN //Fail-safe clock monitor enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //Debug mode for use with ICD
#FUSES BORV40 //Brownout reset at 4.0V
#FUSES NOWRT //Program memory not write protected
#use delay(clock=8000000)
#use rs232(uart1, baud=9600, parity=N, bits=8, ERRORS, DISABLE_INTS) //
#use i2c(master, sda=PIN_A3, scl=PIN_A2, Fast)
#use spi(MASTER, FORCE_HW, BITS=8, stream=SPISTREAM)
#zero_ram
typedef void (*pFunc)(void); //pointer to function
typedef struct { //menu struct
CHAR name[11];
pFunc ptrFunc;
} MenuItem;
//menu and submenu
MenuItem *pMenu;
MenuItem MainMenu[3]={{"WIRELESS ", enter_submenu}, {"TEST ",enter_submenu}, {"EXIT ", exit_mainmenu}};
MenuItem WirelessMenu[3]={{"REG. RETE ", registration_network}, {"N. CONVOGL",show_conveyerid}, {"RETURN ",return_mainmenu}};
MenuItem TestMenu[3]={{"TEST DISP.", test_display}, {"TEST KEYS ",test_keys}, {"RETURN ",return_mainmenu}};
void main()
{
// in my long list program, I use the following instruction to set the pointer to one of the 3 menus above
// for example here to test menu.
pMenu=&TestMenu[0];
//the following instruction one of the function of the menu pointed by pMenu
pMenu[menuentrynumber].ptrFunc();
} |
The problem is just when I read TestMenu[0].name value. The compiled code would give "TEST DISP.", and you can also check it in the in my first post it's. While I have in my LCD a 0xFF value in the "I" position, which would be 0x49 in ASCII code.
Hope you can focus the problem well now. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Aug 27, 2010 12:46 pm |
|
|
Quote: | Executing: "C:\Program Files\PICC\Ccsc.exe" +FM "pcm_test.c" +DF +LN -T -A +M -Z +Y=9 +EA -EW
*** Error 12 "pcm_test.c" Line 36(38,51): Undefined identifier enter_submenu
*** Error 43 "pcm_test.c" Line 36(52,53): Expecting a declaration
*** Error 43 "pcm_test.c" Line 36(54,55): Expecting a declaration
*** Error 43 "pcm_test.c" Line 36(67,68): Expecting a declaration
*** Error 43 "pcm_test.c" Line 36(67,68): Expecting a declaration
*** Error 48 "pcm_test.c" Line 36(68,81): Expecting a (
.
.
.
40 Errors, 0 Warnings.
Skipping link step. Not all sources built successfully.
BUILD FAILED: Fri Aug 27 11:47:24 2010
Hope you can focus the problem well now.
|
No. The program doesn't compile. You were asked twice to do this
and you didn't do it. I'm giving up on this thread. I won't be back. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|