Shop OBEX P1 Docs P2 Docs Learn Events
C: XMMC And CFG Files - Page 2 — Parallax Forums

C: XMMC And CFG Files

2»

Comments

  • idbruceidbruce Posts: 6,197
    edited 2015-03-30 07:17
    There may be another way around this dilema.....

    Let's say I abandon the idea of using the Propeller Memory Card.......

    Are there any DIP flash memory chips that are compatible with SimpleIDE Version 1.0.2(RC2) and the drivers delivered with that package????
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-30 07:22
    idbruce wrote: »
    There may be another way around this dilema.....

    Let's say I abandon the idea of using the Propeller Memory Card.......

    Are there any DIP flash memory chips that are compatible with SimpleIDE Version 1.0.2(RC2) and the drivers delivered with that package????
    Yes, XMMC worked fine with a number of different external flash, SRAM and even SDRAM memory. Certainly, the flash chip that is included on the C3 works fine. Really, the PMC can be used with release_1_0 as well but I have to find the driver. It never got added to release_1_0 because I thought we would be moving to the master branch long ago.
  • RsadeikaRsadeika Posts: 3,837
    edited 2015-03-30 07:36
    @idbruce, just a reminder, since you will be using SimpleIDE Version 1.0.2(RC2), the use of newcogs in XMM mode are not supported. Yes, you will get access to the extended memory, but you will only be able to implement threads. And this is why I have all my Propeller projects on hold, with interest moving in another direction ever so slowly...

    Ray
  • idbruceidbruce Posts: 6,197
    edited 2015-03-30 07:52
    Ray
    @idbruce, just a reminder, since you will be using SimpleIDE Version 1.0.2(RC2), the use of newcogs in XMM mode are not supported. Yes, you will get access to the extended memory, but you will only be able to implement threads. And this is why I have all my Propeller projects on hold, with interest moving in another direction ever so slowly...

    Surely you are joking?

    If this is the case, then it is truly a case of fubar.
  • Heater.Heater. Posts: 21,230
    edited 2015-03-30 08:03
    Sometimes if you need more memory it's cheaper and easier and faster to use an STM32 F4 or some such.
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-30 10:46
    idbruce wrote: »
    Ray



    Surely you are joking?

    If this is the case, then it is truly a case of fubar.
    The Propeller isn't a PC. There are tradeoffs associated with using a limited resource device like the Propeller. When we first developed the XMM support in PropGCC we assumed that people would write a single "main application" that was written in C or C++ and ran in a single COG. This would be accompanied by a number of either COG C or PASM drivers that would run in the other COGs. This is, in fact, how Spin programs seem to be written most of the time. Later, Parallax wanted the ability to run XMM C or C++ code in more than one COG at a time. This has a big cost associated with it because you end up a cache for each COG that is running XMM code and those caches necessarily are in hub memory and reduce the amount of hub memory that is available for your program. So in the process of gaining the ability to run XMMC on multiple COGs, you lose some of one of your most valuable resources, hub memory. I guess we could implement XMM without a cache but that would be significantly slower unless you're willing to dedicate a large number of pins to a parallel interface to external SRAM or SDRAM. If you have any better suggestions as to how this can all be managed, I'd be happy to hear them.
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-30 10:48
    It seems you're not interested in this anymore but I've attached a cache driver that works with release_1_0 and supports the Propeller Memory Card.

    pmc-ab.zip
  • idbruceidbruce Posts: 6,197
    edited 2015-03-30 10:55
    David
    If you have any better suggestions as to how this can all be managed, I'd be happy to hear them.

    I don't have any better ideas.... my comments:
    Surely you are joking?

    If this is the case, then it is truly a case of fubar.

    were intended to mean that this was something that I was unaware of and that my situation is all screwed up and that I must reevaluate all my plans. It was not intended to mean that alot of the thought did not go into the current setup, because I certainly could not have come up with anything viable.
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-30 10:56
    idbruce wrote: »
    David



    I don't have any better ideas.... my comments:



    were intended to mean that this was something that I was unaware of and that my situation is all screwed up and that I must reevaluate all my plans. It was not intended to mean that alot of the thought did not go into the current setup, because I certainly could not have come up with anything viable.
    What kind of XMM support do you need to implement your plans? Can you post a list of your requirements so I can see if we can meet them?
  • idbruceidbruce Posts: 6,197
    edited 2015-03-30 11:31
    David

    As close as I can determine and what I do know, I will do my best to give you an overall view.

    I am currently already maxing out my memory on one propeller chip and that does not include all the features that I want to support. At the present point, my code is failing, and I believe the main reason is due to insuffient stack space for one of the cogs, but if I increase the stack space or add the additional features that I want, the hub overflows.

    In the current setup, the program will be running at least five cogs full time and it will be necessary to implement locks.

    I am currently thinking about a different strategy of dividing the code amongst two Propellers and running about 9 or 10 cogs full time. I think a two Propeller design will eliminate most of the headaches that I am now getting :) but I could be wrong and it may compound them.
  • Heater.Heater. Posts: 21,230
    edited 2015-03-30 11:56
    This all seems like a bit of a mess.

    Being able to compile C into LMM or raw COG PASM is pretty amazing. I for one thought it could never happen back in the day. One of those "impossible on the Propeller" things that got done.

    Then we get to the problem that HUB RAM is to small and we need external memory for any useful C programs. OK it's possibly reasonable to expect to be able to fetch code from external memory and run it. All be it we are now running at a snails pace compared to an MCU with the memory space.

    Now I hear we get to the idea of multiple COGs being able to execute code from external memory at the same time!

    Do what? How is that even sensible in any way? What kind of performance does that give? Isn't it even slower than running multiple threads from a single COG that use external RAM?

    Is there something I am missing here?
  • Heater.Heater. Posts: 21,230
    edited 2015-03-30 12:00
    Bruce,
    I am currently thinking about a different strategy of dividing the code amongst two Propellers and running about 9 or 10 cogs full time.
    I really have to ask why?

    I presume you are still on the Teacup thing here. Well it works on a 2 cent AVR, use that. What advantage is to be gained from a slower and more complex, more expensive Propeller solution?
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-30 12:03
    Heater. wrote: »
    This all seems like a bit of a mess.

    Being able to compile C into LMM or raw COG PASM is pretty amazing. I for one thought it could never happen back in the day. One of those "impossible on the Propeller" things that got done.

    Then we get to the problem that HUB RAM is to small and we need external memory for any useful C programs. OK it's possibly reasonable to expect to be able to fetch code from external memory and run it. All be it we are now running at a snails pace compared to an MCU with the memory space.

    Now I hear we get to the idea of multiple COGs being able to execute code from external memory at the same time!

    Do what? How is that even sensible in any way? What kind of performance does that give? Isn't it even slower than running multiple threads from a single COG that use external RAM?

    Is there something I am missing here?
    No, you're not missing anything. You're right that multiple COGs running C code from external memory is likely too slow to be very useful. That is why our first implementation of XMM only supported a single COG running code from external memory. You could argue that you could get four COGs running from external memory, each with a 2K cache, that would perform reasonably well since Steve tested 2K caches and found them acceptable for some use cases. And four 2K caches is about the same size as a single 8K cache which is currently the default for XMM. I haven't done any tests with real programs that run XMM C in multiple COGs to know what the performance would be like. I've only run simple LED blinking code to verify that the multi-COG XMM support actually works. You really run into trouble if you try to put data in external memory and access it from multiple COGs since you then have cache coherency issues. That's why we have stuck with XMMC.
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-30 12:55
    David Betz wrote: »
    It seems you're not interested in this anymore but I've attached a cache driver that works with release_1_0 and supports the Propeller Memory Card.

    pmc-ab.zip

    If you have a chance, please test this driver and let me know if it works for you. All you have to do is this (from the directory where you unzipped my file):
    propeller-load -b pmc-ab ebasic.elf -r -t
    

    Then type this in the terminal:
    10 print "Hello"
    run
    

    Here is what you should see:
    david-betzs-macbook-pro:pmc dbetz$ propeller-load -b pmc-ab ebasic.elf -r -t
    Propeller Version 1 on /dev/cu.usbserial-DAXLIRBW
    Loading the serial helper to hub memory
    10392 bytes sent                  
    Verifying RAM ... OK
    Loading cache driver 'winbond_sqi_flash_sram_xcache.dat'
    1964 bytes sent                  
    Loading program image to flash
    44168 bytes sent                  
    Loading .xmmkernel
    1736 bytes sent                  
    [ Entering terminal mode. Type ESC or Control-C to exit. ]
    10 print "Hello"
    run
    000017CC 19 00 00 17 D8 LIT 000017D8
     6104
    000017D1 28 02          TRAP 02
    Hello000017D3 28 05          TRAP 05
    
    000017D5 00             HALT
    OK
    

    Oops! Forgot to turn off the debugging code. Anyway, you get the idea. Let me know if this works with your PMC setup.
  • idbruceidbruce Posts: 6,197
    edited 2015-03-30 13:14
    David
    If you have a chance, please test this driver and let me know if it works for you.

    Most cointenly }

    It appears that you have success David :) Is this usable within SimpleIDE?

    attachment.php?attachmentid=113704&d=1427746483
    669 x 421 - 64K
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-30 13:18
    idbruce wrote: »
    David



    Most cointenly }

    It appears that you have success David :) Is this usable within SimpleIDE?

    attachment.php?attachmentid=113704&d=1427746483
    Yes, it is usable with SimpleIDE. I compiled the ebasic.elf file with the release_1_0 tools. Just put the pmc-ab.cfg file into /opt/parallax/propeller-load along with the .dat file and add pmc-ab.cfg to boards.txt.
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-30 13:33
    FYI, here is a better version of ebasic3 with the debugging output turned off as well as a readme telling how to rebuild the driver from sources.

    pmc-ab.zip
  • idbruceidbruce Posts: 6,197
    edited 2015-03-30 13:40
    David

    Thank you very much for your time and effort. I am certain this will come in handy, and in fact, I may still need it for this project. This may allow me to increase the size of the parse to enable more G + M commands.:)
  • David BetzDavid Betz Posts: 14,516
    edited 2015-03-31 17:15
    jazzed wrote: »
    Gee.

    It is very ironic that you need XMM for exactly the same reason that got me thinking about it about 8 years ago (I.E. Gee codes). I should have just moved on to another chip. Sounds like a good place to find closure for me.
    Hmmm.... I guess you don't consider XMM to be a viable solution to this problem? In that case, why did you push its development for so many years?
  • idbruceidbruce Posts: 6,197
    edited 2015-03-31 23:38
    Steve
    Gee.

    It is very ironic that you need XMM for exactly the same reason that got me thinking about it about 8 years ago (I.E. Gee codes). I should have just moved on to another chip. Sounds like a good place to find closure for me.

    Now you tell me :)

    I am going to give the single Propeller one more shot, by attempting to write my own parser. However yesterday, I was thinking about just adding a PC motherboard and harddrive to the project. That would eliminate 99.9% of my headaches and give me a very wide range of possibilities.

    By using a motherboard, I could create a full blown PC app to do everything I need and I could just use the Propeller board as an IO controller.

    EDIT: Additionally, at that point, I could add all kinds of supporting apps, with no worries about hub ram or eeprom, with the added benefit, that I would be back to programming in a Windows environment.
  • David BetzDavid Betz Posts: 14,516
    edited 2015-04-01 03:02
    idbruce wrote: »
    Steve



    Now you tell me :)

    I am going to give the single Propeller one more shot, by attempting to write my own parser. However yesterday, I was thinking about just adding a PC motherboard and harddrive to the project. That would eliminate 99.9% of my headaches and give me a very wide range of possibilities.

    By using a motherboard, I could create a full blown PC app to do everything I need and I could just use the Propeller board as an IO controller.

    EDIT: Additionally, at that point, I could add all kinds of supporting apps, with no worries about hub ram or eeprom, with the added benefit, that I would be back to programming in a Windows environment.
    Not a bad solution although I would use a RaspberryPi instead of a PC motherboard.
  • idbruceidbruce Posts: 6,197
    edited 2015-04-01 05:01
    David
    Not a bad solution although I would use a RaspberryPi instead of a PC motherboard.

    I truly don't know anything about using a RaspberryPi, so I really could not debate a comparison. However I do know that with a PC, I can create some nice full blown GUI apps that can be displayed on any monitor. The main benefit would be that I know the Windows environment pretty darn well, but I am certain that a lot has changed over the years. However, for the sake of discussion....

    I could take one of my worthless Windows discs, say 98, ME, NT, 2000, etc... and load it onto an old mother board, along with say VS C++ 6.0, and from there I really could do some experimentation, with interfacing the Prop and various GUIs. All the way from a GCODE interpreter to a slicer to a serial terminal.

    However, I may look into the RaspberryPi to see why everyone is so gung ho about it.
  • David BetzDavid Betz Posts: 14,516
    edited 2015-04-01 05:08
    idbruce wrote: »
    David



    I truly don't know anything about using a RaspberryPi, so I really could not debate a comparison. However I do know that with a PC, I can create some nice full blown GUI apps that can be displayed on any monitor. The main benefit would be that I know the Windows environment pretty darn well, but I am certain that a lot has changed over the years. However, for the sake of discussion....

    I could take one of my worthless Windows discs, say 98, ME, NT, 2000, etc... and load it onto an old mother board, along with say VS C++ 6.0, and from there I really could do some experimentation, with interfacing the Prop and various GUIs. All the way from a GCODE interpreter to a slicer to a serial terminal.

    However, I may look into the RaspberryPi to see why everyone is so gung ho about it.
    You should be able to create nice GUI apps to run on the RaspberryPi using Qt or any number of other graphical frameworks that run under Linux. You will, however, be limited to HDMI video output. I guess the Pi also supports CVBS but I doubt that would meet your needs. No VGA support that I know of.
  • idbruceidbruce Posts: 6,197
    edited 2015-04-01 05:25
    David
    You should be able to create nice GUI apps to run on the RaspberryPi using Qt or any number of other graphical frameworks that run under Linux. You will, however, be limited to HDMI video output. I guess the Pi also supports CVBS but I doubt that would meet your needs. No VGA support that I know of.

    Thanks for the info.... And thanks once again for all of your help with the PMC. I truly appreciate it.
Sign In or Register to comment.