9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] pcc limitation?
Date: Sun,  7 Nov 2010 17:22:13 +0100	[thread overview]
Message-ID: <4CD6D235.3030704@gmx.net> (raw)
In-Reply-To: <9f6f706b0da2fc0b208ad49c097a823b@brasstown.quanstro.net>

On 07.11.2010 15:46, erik quanstrom wrote:
>> writearr should point to a one-member const unsigned char array, and the
>> zeroth element of that array has the value JEDEC_WREN.
>>
> =
> it's not clear to me that c99 allows one to declare an unnamed array
> and assign a pointer to it in this way except if the array is a char* or
> wchar_t*.
>
> i think the cleanest approach to solving your problem is
> to define writeattr as an array, not a uchar*.
>

The big problem with defining it as an array inside struct spicmd is
that writearr has variable length. writearr is a command sent to a SPI
chip by a SPI controller. writearr can have any length of 1-1056 bytes.
There's also an analogous readarr in struct spi_command (not mentioned
in the example to keep it brief) and that one can have any length
between 0 and 16777217 (2^24+1) bytes. One variable-length array at the
end of a struct is possible, but an array of structs with a variable
length array in the struct won't work since you can't compute the offset
of individual members of the outer arrray.

The only solution I can see is this:

#define JEDEC_WREN              0x06
#define JEDEC_SE                0x20
struct spi_command {
        const unsigned char *writearr;
};
int main(int argc, char *argv[])
{
	const unsigned char writearr_helper1[] = { JEDEC_WREN };
	const unsigned char writearr_helper2[] = { JEDEC_SE, 0x01, 0x23, 0x45 };
        struct spi_command cmds[] = {
        {
                .writearr       = writearr_helper1,
        },{
                .writearr       = writearr_helper2,
        }};
        /* ... */
}


That solution wastes variables and is generally pretty ugly.
I still hope we can find a better solution.

Regards,
Carl-Daniel

--
http://www.hailfinger.org/




  reply	other threads:[~2010-11-07 16:22 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-07  0:56 Carl-Daniel Hailfinger
2010-11-07  4:02 ` Federico G. Benavento
2010-11-07 12:32   ` Carl-Daniel Hailfinger
2010-11-07 14:46     ` erik quanstrom
2010-11-07 16:22       ` Carl-Daniel Hailfinger [this message]
2010-11-07 18:26         ` erik quanstrom
2010-11-07 19:36           ` Carl-Daniel Hailfinger
2010-11-07 19:42             ` erik quanstrom
2010-11-08  0:16               ` Carl-Daniel Hailfinger
2010-11-08  0:56                 ` erik quanstrom
2010-11-08  9:39                   ` Julius Schmidt
2010-11-08 14:00                     ` erik quanstrom
2010-11-08 15:17                       ` Anthony Sorace
2010-11-08  2:58         ` Russ Cox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CD6D235.3030704@gmx.net \
    --to=c-d.hailfinger.devel.2006@gmx.net \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).