Go Down

Topic: "applet" directory for build targets... (Read 9124 times) previous topic - next topic

Roger Fleig

As a work around you can also set the following flag in preferences.txt:

build.verbose=true

This will give you the location of the intermediate build files like core.a and any libs you need for building standalone.  For instance, on my mac I was able to get this line (among very, very many:)

/var/folders/+M/+M4oTL7NFPKSM+wMKMXig++++TI/-Tmp-/build6286307593943555774.tmp/core.a

mem

on version 0018 you can get the verbose output displayed in the IDE by holding down the shift key when compiling

Syntetik

#17
Apr 17, 2010, 02:42 pm Last Edit: Apr 17, 2010, 02:45 pm by Syntetik Reason: 1
I specify build.path and all is working fine.... BUT! When I close IDE, files deleted immediately :( WHY? In preferences I uncheck [X] Delete files...., but it don't understand me :)

I suppose, that preferences.txt file must allow wildcards and runtime parameters. It would be nice, if I can specify something like:
build.path=%PROJECT_PATH%\applet\

Okay, that for newbies. But "an old assembly language programmer" jrraines (and me too) can find Makefile in the same path, where bootloader lives:
[ Arduino-0018\hardware\arduino\bootloaders\atmega ]
It is simplier than run IDE and then searching, why problems are growing :)
How to change makefile and execute, I hope you know. Then you can write your application in every text editor (WinAvr have Programmer's Notepad) and compile in command line or somehow else.

I use FAR manager with built-in text editor. I used it always, almost 15 years. So, I specified in FAR what I want to execute, when I press Enter on some file types, like .hex (avrdude sends it to arduino), .asm (compile using make), .pde (compile using make) - for all projects in assembler, or C, or modified C like Arduino IDE uses you can create Makefile and then copy to simila projects and change only filenames...

When I purchase Arduino Duemilanova, my friend said - IDE is for newbies. I didn't agree with him, but now I agree.

And there is another reason. Big REASON, why not to use IDE. I saw it today, when trying to use applet directory. My code compiled in 0017 and stored in the projects's applet directory and then without changes compiled in 0018 - second one is bigger. Why? It adds Tone library and you cannot include nor exclude it in project. I think it is nonsense. Arduino is not PC with at least 1 MB memory. So better is to write in C or ASM. I find on Internet some mathematical functions for asm and it is great to program in pure processor's language.

Including Tone library was not so necessary. IMHO. It is good - you can output more than 1 line at the same time. But for small projects it is better to write ~5 rows of code, what gives you ability to output specified frequency and length.

Simplest way - get back your copy of 0017 :)

Best wishes to all!
I love arduino!

mem

Quote
It adds Tone library and you cannot include nor exclude it in project

I am surprised to hear you are seeing tone functions being linked if your sketch does not reference them.

I just had a look at the object dump for the blink example sketch and there is no sign of a tone function. The code size of blink is 870 bytes, which leaves almost 30k bytes of code space free.

I do agree with you that there should be an ability to build a sketch on the command line instead of through the IDE. This has been proposed to the Arduino team and I hope that it will be available in future.

Syntetik

Take a look on applet (or what you specified as build.path) directory. There is Tone.cpp.o as well as Print.cpp.o, but I dont use them in test compilation. There is Wiring library compiled too, which I don't use. And few rows of .pde compiled are about 5 KB (.hex file).

I disassembled this test.hex and there is one interrupt starting with PUSH registers and before RETI it POPs all registers back. I didn't defined in my code any interrupts. And there is another function. I don't dig deeper yet.

Please take AVR Simulator IDE (trial) and disassemble .hex compiled with Arduino IDE. I surprised that there is 5 KB (.hex or  2,3 KB binary) of nothing I used in my code. Okay, some of them was in 0017 too. But not Tone.

mem

#20
Apr 18, 2010, 04:10 pm Last Edit: Apr 18, 2010, 04:17 pm by mem Reason: 1
The Arduino build process will compile all the core files, but the linker will only include functions that are called (directly or indirectly) from your sketch. So you should ignore the object files  and just look at disassembly listing of the .elf file.

A good way to do that is to use avr-objdump.exe in the tools directory:    ?\arduino-0018\hardware\tools\avr\bin.  The -S option dumps  source intermixed with  with  disassembly of all modules pulled in by the linker.  

Try it with the blink.pde sketch - You should get a code size of  just under 900 bytes with none of the unreferenced functions you mentioned.  

BTW, push and pop are in the millis timer interrupt handler. Because the handler is initialized in the Arduino core startup code, this handler is included even if you don't use millis or delay.

Syntetik

Yeah, okay, you right. I tested with my example, where I included math library and difference between compiled with 0017 and with 0018 was some tenths bytes. But about Tone, yes, I forget about linker :) Can I get somewhere Makefile for .pde? It would be nice.

Now I'm testing all things, because I want do all with assembler, but I don't know, how to get result as it gets from log() function in Wiring or IDE. I disassemble IDE's version of program and it is very big function. Mem, can you help a little? With log() function I get temperature from analog readings. I have a NTC 10K thermistor on analog input. And I want it working from assembler. Would it be stupid to include disassembled part of function, which calculates temperature? Maybe no. Maybe simplier is to use DS18* digital thermometer.

gutzeit

Please, return the possibility to create applet folder like in version 0017. May be in preferences. I see  at least two reasons for it:

1. Sure, that  more than 1% of users are with brains and want to keep .hex and .elf files with sketch for future investigations or just using without necessity of every time compiling /uploading to get files again.

2. In Windows - temp folder  like build1755132727304913499.tmp are usually in directory C:\Documents and Settings\...\Local Settings\Temp, which is usually hidden. So it is necessary to keep Hidden files opened, which is not very smart idea.

Syntetik

Now it is wonted for me - after compiling I'm going to tmp folder (D:\AVR\tmp\ which specified in my preferences.txt) and copy .hex file to place I want. Anyway hope to see back 0017 applet folder.

thseiler

Hi all,

Here is a Suggestion on how to solve the applet-folder issue:

* The Applet Folder needs to be outside arduino base folder because of read-only environment under **nix and macosx.
* The Applet Folder needs to be easily accessible for the people who need access to the intermediary .hex and .elf files
* All the functionality to open a Folder are already in place => "Sketch->Show Sketch Folder"

This small patch adds another menu item just under "Show Sketch Folder", "Show Build Folder" which will open the temporary build folder (what used to be the applet folder).

That way, it can stay in the temp location, while the access to hex and elf files is just one click away.

Please consider this patch for next release.

Best Regards,
Thomas Seiler


Code: [Select]


--- Editor.java.orig    2010-06-28 08:19:35.000000000 +0200
+++ Editor.java 2010-06-28 08:40:00.000000000 +0200
@@ -643,6 +643,15 @@
    sketchMenu.add(item);
    item.setEnabled(Base.openFolderAvailable());

+    item = new JMenuItem("Show Build Folder");
+    item.addActionListener(new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+          Base.openFolder(Base.getBuildFolder());
+        }
+      });
+    sketchMenu.add(item);
+    item.setEnabled(Base.openFolderAvailable());
+
    item = new JMenuItem("Add File...");
    item.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {




Go Up