View previous topic :: View next topic |
Author |
Message |
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
How to use simultaneously TCPIP stack and SD card? |
Posted: Mon Oct 01, 2012 6:15 am |
|
|
Hi, everyone! I have CCS Complier v4.134, TCP IP stack v30_November_06 and the mdd package. So I want to create a program which is using both - TCPIP and SD card. So I tried with one of the examples in the tcpip stack - ex7a.c
So I just added the ex_mdd_common.h:
Code: |
#define ALLOW_GET_DISK_PROPERTIES //used by 'info' command
#include "ccstcpip.h"
#include "ex_mdd_common.h"
|
I`ve made some changes to the ex_mdd_common.h. I stopped the device settings in this file:
Code: |
#if defined(HW_CCS_3V_ETHERNET)
// ccs 3.3v ethernet development kit, with sd connector.
// other hardware definitions made in hardwareprofile.h
// #include <18f66j60.h>
// #fuses HS
// #fuses NOXINST
// #fuses NOWDT
|
And again the complier throws an error - you can not change the device type so far in the code and it`s pointing to the file p18Cxxx.h.
I have suspicions this row in the ex_mdd_common.h
#include "filesystem\p18cxxx.h" //C18 to PCH compatibility
makes the problems, but I`m not sure I have to stop it because it`s some kind of compatibility.
Can someone post an example how to do the job?
Thanks! |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9225 Location: Greensville,Ontario
|
|
Posted: Mon Oct 01, 2012 6:36 am |
|
|
The error may not be in that header file...but it is in some code before where the error message appears, so you have to look at ALL the code before the error( it can be several lines before...)
on another point, have you got tcpip working by itself ? Then , do you have the SD program working by itself? When both work without the other, then 'merge' the code into one program.
This way you KNOW they work and any errors are due to the 'merging' code.
divide and conqueor !
hth
jay |
|
|
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
|
Posted: Mon Oct 01, 2012 6:46 am |
|
|
The TCPIP stack and the mdd stack works fine separately. So I tried to put them into 1 program but I have to remove the second device declaration and because in my code the mdd header is second I removed there the device options. This is the only one change I made. Now the p18Cxxx.h include returns an error I suppose!
Do you have an example for mix adjustments??? |
|
|
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
|
Posted: Thu Oct 04, 2012 10:42 pm |
|
|
Does anyone know how to adjust the both stacks?? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19506
|
|
Posted: Fri Oct 05, 2012 4:47 am |
|
|
Step back a bit.
Anything beginning with 'ex', is likely to be an _example_, or part of an example, which itself then calls the driver. It is only the driver that you should load if using this with your own code.
So (for instance), ex_fat.c, loads the two drivers, mmcsd.c (low level driver for an mmc card), and then fat.c (which gives the higher level fat access).
Draw a little diagram. Start with the example file. Then show below this what drivers it loads, and the order these are loaded. Then look at the example, and see what order calls are made in (and read the notes in the drivers), so you have the fact that fat_init needs to be called before you start accessing the card.
Then make your main file, and include just the drivers in the order needed, and initialise the devices as needed.
You seem to be trying to 'hybridise' two examples, rather than using them as examples of how to use the drivers.
Best Wishes |
|
|
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
|
Posted: Fri Oct 05, 2012 6:12 am |
|
|
Look! I took one of the tcpip example files - ex7a.c. It has only this include file:
Code: | #include "ccstcpip.h"
|
And this example works fine. So I added the include file for the sd card
Code: |
#include "ccstcpip.h" //this is the standard include
#include "ex_mdd_common.h" // I added this which should allow me to use
the SD functions
|
The both headers have device directives do I stopped them in the second one
//ex_mdd_common.h
But when I tried to compile it I received an error!
You cannot change the device type so far in the code 18Fcxxx.c
I`m using 18F67J60 microcontroller. This include is for mdd header and it comes after include <18F67J60>.
This is the problem I just want to know what else I have to change. The problem is not in the way I`m using the both stack but in their work together.
This 2 include files load the 2 stacks:
#include "ccstcpip.h"
#include "ex_mdd_common.h"
and they work just fine separately.
What do I suppose to do??? |
|
|
Douglas Kennedy
Joined: 07 Sep 2003 Posts: 755 Location: Florida
|
|
Posted: Fri Oct 05, 2012 11:08 am |
|
|
The device is specified by ex. #device PIC18F2685.
Maybe a search of all of your code for #device will help you find a second, third or more #device declaration that if present are the source of your issue. If there is only one #device then remember this is a very fast compiler so it needs to know very very earlier on ( preferably on the first line the compiler encounters) the specific PIC device so that it can eliminate initiation code for other devices. Make sure the include usually xxxxx.h where xxxx is ex PIC18F2685.h is the first include the compiler sees and that only comment lines should proceed this include in your main code file. |
|
|
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
|
Posted: Wed Oct 10, 2012 1:24 am |
|
|
I did it! The problem was the both tcpip and the mdd stacks are uncompatible, so I had to change a lot in them. I think CCS team have to work some more in this area.
Best regards! |
|
|
RF_Developer
Joined: 07 Feb 2011 Posts: 839
|
|
Posted: Wed Oct 10, 2012 4:06 am |
|
|
The CCS TCP/IP stack is a port of an rather old version of the Microchip stack. Its by far the most complex "driver" that CCS make available. They do not appear to have a common driver format or design strategy, and such drivers are intended as starting points for us developers to develop our own code. CCS have never declared any intention to make drivers "compatible" with each other, nor do they appear to have any means to do so.
Yes, CCS *could* do some more work on this, but this sort of thing, i.e. developing our apps from their *sample* and *example* code, is what WE should be doing. I feel its unfair to berate CCS for this, its not their "fault". Its embedded development. Yes, it would be lovely if all the drivers worked together, and heck, why not make them fully plug and play, and hardware absracted too. Great! But that totally misses the point of small scale embedded development.
RF Developer. |
|
|
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
|
Posted: Wed Oct 10, 2012 4:41 am |
|
|
May be the problem has a simple solution: just write a good self documenting code. The main problem of your examples is that the variables they use have same names. So if you use something like:
Code: |
unsigned int32 mddBuffer
//not just unsigned int32 Buffer
|
everything would be perfect.
Best regards! |
|
|
|