GOOSEE users' page

Page updated May 1, 2001

Hi, the action is just starting on this page!

 

Download: goosee.zip  Version 1.21, 175K bytes.

Right-button-click your mouse to save-as to a temporary directory. Create C:\GOOSEE and unzip into it. No other installation process required. Oh yeah, all files are dated 1995, as my PC has its clock set back. Complete waiver of responsibility: use at own risk.

Yes, the filesize is only 175K -- that's a sophisticated GUI application with auto-code generator, plus HTML quick guide, plus demo .GOO files. Unzipped, goosee.exe is only 242K. The reason for this is that it's written in assembly language and uses the raw MS Windows API. Even trivial applications developed with "modern" tools are at least half a Mb in size. Seeing is believing, so go ahead and get it.

Freeware licence:
You may download and use goosee.exe indefinitely. goosee.exe is fully functional and there are no nag screens. If you wish to host goosee.exe for download by others, you must provide the complete goosee.zip, unchanged. You may include goosee.exe with a .GOO datafile when distributing the latter -- imagine, a complete visual-diagram/project-manager/coder/documenter that both reads and edits, that is small enough to be attached to an email or put onto a floppy along with the data files!

More about registration

Why bother to register? GOOSEE is free for download. I intend to keep GOOSEE always freely downloadable, and fully functional. With the release of version 1.1, I also decided to release the User Manual for free. I classify GOOSEE as "donationware" for individuals, meaning you can donate something if you feel moved to support me. GOOSEE is shareware for government, education and business institutions, in which a site licence can be purchased.

 


Checkout the book Flow design for embedded systems.


 

After installing GOOSEE.EXE the next thing you need, and most important, is the
GOOSEE User's Manual.


Application: Baby breathing monitor 

Baby breathing monitor GOOSEE example application. Shows some general program design techniques.

Go to this link


Application: SCREEM RTOS

The SCREEM RTOS (Real Time Operating System) is only 258 bytes (Franklin C -- even smaller with Keil C) and is a true time-sliced OS. It will run entirely inside an 8051 with only internal RAM and only needs 71 bytes (much of which is the stack frames, that hold application data -- so effectively the amount of data space taken away by the RTOS is very small).

SCREEM51 has these code components:

main()

30 bytes

postmsg()

30 bytes

ismsg()

47 bytes

switcher_isr()

151 bytes

In addition there are the small macros, KILLTASK and CREATETASK.

switcher_isr() is somewhat inefficient with Franklin C, as some registers are explicitly pushed onto the stack and Franklin C doesn't support inline assembly very well -- so the pushing is done with C code and assembles to 4 or 5 instructions just to push a byte onto the stack, where one "push" could have done it.
Also, Franklin C is buggy -- using a register inside the ISR, such as a dummy statement "++DPL;" does not cause Franklin C to save DPL -- but Keil C does save DPL as you would expect.
Maybe your C compiler can improve on this, bringing the code size way down and improving context switch time.
The C compiler will generate code to push various registers onto the stack on entry to the ISR, and this is where there is great variation between compilers. SCREEM51 requires that A,B,PSW,DPTR,and R0--R7 (bank 0) be pushed. Anything not automatically pushed needs to be explicitly made to. Basically, any register used by a task must be saved on the stack by the ISR.

It should be easy to port SCREEM to other compilers and CPUs, because it's so darn simple.

I would like to thank James Stewart, third-year engineering student at Edith Cowan University, for some improvements to the efficiency of the code for SCREEM. He got the size down to 288 bytes, and I worked on it some more and v1.3 is now 258 bytes (v1.1 was 297 bytes). Note that James has also rewritten SCREEM totally in assembly, linkable with C application code, and got it down to a remarkable 132 bytes total.

 

Get SCREEM51.ZIP (only 20K bytes) NEW VERSION 1.3
Create a directory, say C:\screem51, and unzip into it.

PLEASE NOTE: If you develop a major enhancement to SCREEM, such as porting to another microprocessor, and you want to make it free for everyone, I'll be happy to host it on the public pages, or link to your site.


Limitations/bugs in current version of GOOSEE

You'll see some greyed-out menu items. These are intended to be implemented in later versions.

A superb feature of GOOSEE for those learning C is that data elements can be drawn on the screen to represent fairly complex data types. For example, you can easily draw visually a pointer to a pointer to a function, and GOOSEE will take care of composing the correct C data definition. However, GOOSEE uses recursion to analyse complex data compositions, and currently there are limitations. For example, a pointer to a pointer to a pointer to a function comes out wrong -- but, would you ever need such a thing? (I'll either fix that one or not allow it to be constructed).

Anyway, let me know if any data definition that you require doesn't compose to C correctly. Note also that you may have a peculiar C compiler, that won't accept valid ANSI code. Check that first if possible, before contacting me.

A very small percentage of PC (about 1%) reported some operational problems with GOOSEE version 1.0, related to scrolling with the mouse and to display of the elements in the window. The latest version is looking real good, with only a couple of people reporting difficulties -- let me know if GOOSEE misbehaves on your system. The current problems seem to concern fonts on Win NT -- wrong fonts and/or missing text in dialog boxes.

Version release notes (entries get taken off the to-do list and put in here as they're completed).

Here's the official to-do list (in no particular order of urgency, so let me know if you want one of these in a hurry):

  1. A pointer to a function can be drawn visually, by attaching a node to a pointer data element. If you want to call the function (via the pointer), currently you have to write the appropriate C code. However, in future, an execution-flow wire drawn to the function-node will auto-generate the indirect call. I'm even planning support for auto-generation of calls via an array of pointers to functions.
  2. GOOSEE generates a variable definition for a structure-data-element, however I plan to allow data-elements to be attached to the structure-data-element to define structure templates. That is, you currently have to have a pre-existing structure template.
  3. Improvements to double-click on a library-function node to open a diagram. Node has name of matching function in child-diagram -- scroll child diagram to centralise node. Implement backwards feature, like web browsers.
  4. To speed up creation and placement of new elements, right-button mouse click to bring up the elements menu -- instead of having to go up to the menubar "Elements".
  5. Window redraw sometimes doesn't happen. Under some circumstances the GOOSEE window doesn't get input focus and doesn't redraw when another window is removed from on top of it -- have to click on it.
  6. Synchronous signalling, and with timeout. This is like the async signal, in which a flag is set then cleared when consumed, except the sending-end will wait until the flag is consumed, with optional timeout. This will be independent of any O.S.
  7. GOOSEE doesn't compose the data definition for shareable data attached to a clone. Currently has to be done manually (see User's Manual section "External data and clones").
  8. Enhancements to make-icon. Better integration with an editor and external make program. Integration with simulators/debuggers
  9. User control over the order in which GOOSEE composes functions in a .C file. Currently they are composed in order of depth below the top-level node.
  10. GOOSEE currently composes "return 0;" at end of a function if a value is to be returned, else composes "return ;" if return is "void". Need to be able to specify a variable when a return value is required.
  11. Insert "\" for long lines.
  12. Unix or DOS/Win text file output (currently cr/lf end each line, DOS/Win style).
  13. Add "replace" feature to "Control/Text find...".
  14. Add further features to the database integrity check.

 


 

Home: http://www.goosee.com/explorer/ 
(c) Copyright 2000 Barry Kauler.