Page 7 of 25

Re: wishlist for NXC

Posted: 31 Jan 2011, 20:43
by afanofosc
I don't think FormatNum actually works with strings. The compiler must be generating bad code or something. The opcode that I added to the enhanced firmware definitely should not do the right thing if you pass in an array instead of a scalar as the third parameter (iirc).

fmtnum ar_out, fmt_in, value

Here's the firmware code:

Code: Select all

        //Make sure we're trying to convert a scalar/float to a string
        if (TypeCode3 == TC_VOID || (TypeCode3 > TC_LAST_INT_SCALAR && TypeCode3 != TC_FLOAT)) {
          Status = ERR_INSTR;
          return (Status);
        }
This suggests to me that it is not passing your string into the fmtnum opcode in the NBC code generated by the NXC layer since it would return an ERR_INSTR status value if it did.

John Hansen

Re: wishlist for NXC

Posted: 31 Jan 2011, 21:21
by HaWe
hm, it appears to work correctly although it seems to work (and should work) coincidently faulty -
a real Wunderhorn, this Lego firmware :roll:

Re: wishlist for NXC

Posted: 02 Feb 2011, 23:59
by dsjove
We cannot pass an array member as a reference. The work around is to use the array index as the reference variable. Is it possible to resolve the array access as a reference?

Code: Select all

struct Something
{
	int v1;
	int v2;
};

void DoSomethingWith(Something& Else)
{
}

Something everything[4];

task main()
{
	Something today;
	for (int i = 0; i < 4; i++)
	{
		DoSomethingWith(everything[i] /*today*/);
	}
}

Re: wishlist for NXC

Posted: 06 Feb 2011, 12:39
by HaWe
I indeed just got repetitive runtime errors (File error -1) using printf with "%s" and variable strings.

so my wish is:
a real correct working printf function like in ANSI C stdio.h

that means:
- working with both nums and strings
- working with multiple format strings and multiple variables

Re: wishlist for NXC

Posted: 07 Feb 2011, 02:52
by muntoo
Can we have "real" pass-by-referencing? I recall that you [John] once said something like this:
Guess who wrote: There is no real passing by reference, so there should be no speed improvement between

Code: Select all

#define LOL void foo(int &bar[])
and

Code: Select all

#define LOL void foo(int bar[])
in

Code: Select all

LOL
{

}

int myarr[1000];
foo(myarr);
in terms of speed.
I think this shouldn't be too hard to implement [using NBC global variable magic card tricks], and it'd help speed in some of my programs. (I may be wrong.)

Re: wishlist for NXC

Posted: 07 Feb 2011, 19:14
by afanofosc
For inline functions it might not be too hard to replace reference parameters with whatever you pass in using some kind of NBC magic but a non-line function that is called at run-time in more than one place with different input arguments could not be magically "fixed" by the compiler at compile time. A real reference type requires real firmware VM support for pointers, which does not exist currently - and without a lot of work on the enhanced NBC/NXC firmware probably will never exist.

John Hansen

Re: wishlist for NXC

Posted: 10 Feb 2011, 04:55
by mattallen37
I want support in the enhanced FW and API functions, for the "Absolute position reglation in firmware" feature that Nicolas created.

It is an awesome feature, and exactly what I have been wanting for a long time, but the FW isn't based on the "normal" enhanced FW. Now I can finally have a "rack and pinion" type car, and have it automatically steer to the right position ;) .

Re: wishlist for NXC

Posted: 10 Feb 2011, 16:24
by HaWe
me too! :)

Re: wishlist for NXC

Posted: 16 Feb 2011, 19:40
by afanofosc
I will work to incorporate the new absolute position regulation changes from Nicolas into my enhanced NBC/NXC firmware. I am also working on getting my firmware SVN repository up on sourceforge. Hopefully I can get it up there this month.

John Hansen

Re: wishlist for NXC

Posted: 16 Feb 2011, 20:35
by HaWe
John, what do you think about "outsourcing" some libs in order to decrease the memory NXC needs?
e.g., I dont regularily need graphic libraries (except fonts).
My suggestion would be to resurrect #include for specific libraries -
nxtdefs.h may be included automatically (or- maybe not) -
and anyone who wants different fonts may
#include "fonts.h"
who wants advanced graphics:
#include "graphics.h"
and maybe who ever (I actually can't imagine who exactly) likes faked stdio functions may use
#include "fakedio.h" Image

ok-
the last one admittedly was a joke (because this lib's size would extend even the nxtdefs.h) -
no, I'm kidding -
but honestly, I think the rest might be a good idea... :)