View previous topic :: View next topic |
Author |
Message |
qwwe
Joined: 17 Sep 2017 Posts: 59
|
|
Posted: Tue Oct 17, 2017 9:28 am |
|
|
Thanks
I read somewhere the maximum size of an array that can be defined is limited to the amount of RAM in a bank.
If this is the case, then I've defined two arrays in the program, which is a lot more than that.
#define BUFFER_SIZE 300
char buffer[BUFFER_SIZE];
and
char recive[200];
But the compiler did not make a Error.
If the maximum amount of SRAM available to each bank from this microcontroller is equal to 96 bytes.
So, according to the description, it should not create an array of more than 96 bytes. Can this be a problem with the program?
In the meantime, if the address of the variable and the array is identical, one is in another bank.
So why the values of these variables are arranged in the array
Below are two parts of the datasheet of this microcontroller:
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19195
|
|
Posted: Wed Oct 18, 2017 1:04 am |
|
|
The CCS compiler is (now) able to handle arrays larger than a bank, on chips that support linear access (as this one does - a lot of older chips don't), _but_ the debugger can't...
It'll work, but the debugger 'loses the thread' when it happens. You will get the right actual results, and even the right values being shown in physical memory (with the hardware debugger), but if you try to look at the 'array' directly with the debugger, it'll show the wrong values. It can't cope with an array split across banks.
The same happens with things like structures split across banks.
You have to manually look at the bits of memory involved and do the calculations yourself.
This is why you need to understand the limitations of the tools.... |
|
|
qwwe
Joined: 17 Sep 2017 Posts: 59
|
|
Posted: Wed Oct 18, 2017 2:49 am |
|
|
Should I write the program in the style I wrote, or EX_MXRAM.C example
Where do you think the program is wrong, since it sometimes reads out modem SMS messages and sometimes not?
Last edited by qwwe on Wed Oct 18, 2017 11:00 pm; edited 1 time in total |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19195
|
|
Posted: Wed Oct 18, 2017 3:37 am |
|
|
Your code is making assumptions about the message.
When you send an SMS, you can get success or error status returns. Similarly the index may not be 1.
If a second message or a part message arrives the index may be higher. You have to read all the messages. The message itself may also be multi-line. |
|
|
qwwe
Joined: 17 Sep 2017 Posts: 59
|
|
Posted: Wed Oct 18, 2017 3:53 am |
|
|
The problem is that sometimes the text of the message is stored in the smstext array, and sometimes not, for example, the text of the first message is found correctly, but not the second message |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19195
|
|
Posted: Wed Oct 18, 2017 4:33 am |
|
|
Exactly.
You need to design your code to cope.
Are you sure that the message index was returned as '1'?.
You may well have multiple messages received, it is fairly common to get multiple copies, and only the last one is complete, as the network retries. The index number then to go up, and you have to retrieve them one by one to get the message... |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9081 Location: Greensville,Ontario
|
|
Posted: Wed Oct 18, 2017 6:46 am |
|
|
I'd be capturing the data on a PC with terminal software. Not just a msg or two but say 5-10 minutes of transactions,maybe even an hour or so
THEN carefully look at what's going on...
Odds are real good there's 'some' data either you haven't thought of OR the module is not sending data as you think it should. |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1899
|
|
Posted: Wed Oct 18, 2017 7:01 am |
|
|
A long time ago when I was developing an SMS-enabled product, my provider sent an ad to my cellular modem. That day my application suddenly became a lot more 'ruggedized'. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19195
|
|
Posted: Wed Oct 18, 2017 7:19 am |
|
|
A huge amount depends on how the modem & SIM are setup.
You can specify that a SMS is 'forward and forget'. Sent just once. Then (the commonest) is 'best effort'. It may get through but may not. You can commonly add 'delivery reporting' to an SMS (you put 0# or N# in front of the message), but the actual report you get depends on your service, and may only mean the message is in the network, not that it has actually 'arrived'). Some servers reckon that up to 5% of SMS's are lost completely.....
The original SMS standard had no provision for acknowledgement. This was added to later GSM standards, but many towers still do not actually handle this.
It is quite common to get 'multiple delivery' of part of an SMS, with an entry on your phone saying you have an SMS, and nothing inside it, and then the real SMS arriving a moment later. I suspect this is what is being seen here.... |
|
|
qwwe
Joined: 17 Sep 2017 Posts: 59
|
|
Posted: Wed Oct 18, 2017 8:42 am |
|
|
Thank you.
So you believe the program has no problems.
I tested the app with a hyper terminal all the way and answer it.
But this is a problem when connected to the module.
Your answer is probably correct. |
|
|
|