|
|
View previous topic :: View next topic |
Author |
Message |
spilz
Joined: 30 Jan 2012 Posts: 219
|
[SOLVED] Structure with array of int16 issue |
Posted: Mon Jun 15, 2020 3:50 am |
|
|
hello,
I'm working on a project and want to use a structure which contain an array of int16, but I have wird result :(
exemple of code :
Code: | #include <18F66J94.h>
#device ADC=12
#FUSES NOWDT //No Watch Dog Timer
#use delay(clock=64MHz,crystal=16MHz,USB_FULL)
#include <usb_cdc.h>
typedef struct {
int puissances [10];
int16 profondeurs[10];
} exerciceAl;
void affichage(exerciceAl exer_loc){
int i;
if(usb_cdc_carrier.dte_present){
printf(usb_cdc_putc,"puissances :");
for(i=0;i<10;i++)
printf(usb_cdc_putc," %2u",exer_loc.puissances[i]);
printf(usb_cdc_putc,"\r\nprofondeurs G :");
for(i=0;i<10;i++)
printf(usb_cdc_putc," %2lu",exer_loc.profondeurs[i]);
printf(usb_cdc_putc,"\r\n");
}
}
void main()
{
setup_lcd(LCD_DISABLED);
setup_adc_ports(sAN0 | sAN1 | sAN7, VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL | ADC_TAD_MUL_0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64); //262 ms overflow, resolution 4us
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //32,7 ms overflow, resolution 0,5us
disable_interrupts(INT_TIMER0);
disable_interrupts(INT_TIMER1);
disable_interrupts(INT_EXT);
disable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
usb_init();
usb_task();
int connectedUSB = 0;
exerciceAl exer_testAL = {5,5,5,5,5,5,5,5,5,5,
200,200,200,200,200,200,200,200,200,200};
while(true){
usb_task();
if(usb_cdc_carrier.dte_present){
if(connectedUSB == 0){
connectedUSB = 1;
printf(usb_cdc_putc,"Test\r\n");
affichage(exer_testAL);
}
}
}
} |
I got : Quote: | Test :
puissances : 5 5 5 5 5 5 5 5 5 5
profondeurs G : 0 0 0 0 0 0 0 0 0 0 |
but I expected : Quote: | est :
puissances : 5 5 5 5 5 5 5 5 5 5
profondeurs G : 200 200 200 200 200 200 200 200 200 200 |
what is wrong ???
thanks for your help
regards
Last edited by spilz on Mon Jun 15, 2020 7:24 am; edited 2 times in total |
|
|
spilz
Joined: 30 Jan 2012 Posts: 219
|
|
Posted: Mon Jun 15, 2020 3:55 am |
|
|
same result if I add Code: | for(int i=0;i<10;i++)
exer_testAL.profondeurs[i] = 100; |
just before the "while" loop |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9226 Location: Greensville,Ontario
|
|
Posted: Mon Jun 15, 2020 6:01 am |
|
|
others will KNOW but I'm guessing you really need for i=10 to 19 to get the int16 elements from the array ? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19513
|
|
Posted: Mon Jun 15, 2020 6:41 am |
|
|
Brackets. You are sending all the elements to the first array (so the second
lot gets thrown away):
Code: |
exerciceAl exer_testAL = {{5,5,5,5,5,5,5,5,5,5},
{200,200,200,200,200,200,200,200,200,200}};
|
Note the extra two brackets, and the change in the comma position.
A single structure, containing an array of ten elements, then a second
array of ten elements. |
|
|
spilz
Joined: 30 Jan 2012 Posts: 219
|
|
Posted: Mon Jun 15, 2020 7:23 am |
|
|
I change it
I found the issue : Code: | printf(usb_cdc_putc," %2lu",exer_loc.profondeurs[i]); |
changing it by Code: | printf(usb_cdc_putc," %lu",exer_loc.profondeurs[i]); |
seems to solve the issue
thanks for your help
regards |
|
|
|
|
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
|