質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

Lazurite IDE で構造体のネストのコンパイルが通りません……

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,589

mrtb

score 8

前提・実現したいこと

Lazurite IDEで共用体の中に構造体を定義したコードを書きたいです。

発生している問題・エラーメッセージ

CCU8 C Compiler, Ver.3.41
Copyright (C) 2008-2013 LAPIS Semiconductor Co., Ltd.   

test.c
test.c(9) : Error : E4009 : Syntax error : ';'

Error(s)     :  1
Warning(s)   :  0

Compile error occurs. Stopped build.

該当のソースコード

#include "test_ide.h"        // Additional Header

union u_data{
    unsigned char BYTE[2];
    struct{
        struct{ // BYTE[0]
            unsigned char   :1;
            unsigned char A :7;
        };
        struct{// BYTE[1]
            unsigned char   :1;
            unsigned char B :7;
        };
    };
}DATA = {1,1};

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

試したこと

Arduino IDEで同様の(一行目をコメントアウトした)コードは問題なく通り動作しました。

補足情報(言語/FW/ツール等のバージョンなど)

Lazuriteのフォーラムに投稿しようとすると

エラー: キャプチャ値が無効です。

と怒られ投稿できなかったのでこちらで質問させていただきました。

Lazurite IDEのバージョンは1.0.0です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

check解決した方法

0

ラピスセミコンダクタのフォーラムから回答が帰ってきたので転載します.

下記の様に、構造体に名前を付与すると問題なくビルドは通るようです。
お試しください。

#include "test_ide.h"        // Additional Header

union u_data{
    unsigned char BYTE[2];
    struct{
        struct{ // BYTE[0]
            unsigned char   :1;
            unsigned char A :7;
        } pack11;
        struct{// BYTE[1]
            unsigned char   :1;
            unsigned char B :7;
        } pack12;
    } pack1;
}DATA = {1,1};

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

こんにちは。

直接の回答ではないのですが、ヒントにはなると思います。

MinGWとmsvcではビルドできましたので文法的にはあっていると思います。
test_ide.hは手元にないのでインクルードしていません。
ヘッダ・ファイルtest_ide.hの中に不正な記述があると、そのようなエラーがでることがあります。
#include "test_ide.h"をコメントアウトして、そのエラーがでなくなったら、test_ide.hに何か問題がある筈です。{}の対応とか見なおしてみると良いように思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/15 19:50

    回答ありがとうございます。

    一行目をコメントアウトしてみましたが、同じエラーが出ました。

    キャンセル

  • 2016/09/15 21:52

    ならば、Lazuriteのコンパイラが対応していない機能を使っているのだと思います。

    Lazuriteについて調べたところANSI-C対応のようですね。むちゃくちゃ古い(1989年)です。http://www.tamasoft.co.jp/lc/hlp/F035.html によるとANSI-Cのビット・フィールドはint型にしか対応していないそうなので、unsigned charではなくintにしてみてはどうでしょうか?
    int型が2バイトなら目的を果たすことはできる筈です。

    キャンセル

  • 2017/08/29 15:49

    5ヶ所のcharを何も考えずにintに置換して実行してみましたが,全く同じエラーが出ました.

    共用体の中に構造体を宣言しようとしたときにエラーを吐く?ところまでは確認できました.

    なお,test_ide.hの中身は一行のみで,「#include "lazurite.h"」と
    マイコンを動かすための諸々の関数が定義されてそうなヘッダがインクルードされていました.

    キャンセル

  • 2017/08/29 16:07

    となると、Lazuriteを持っていないので私には分かりません。
    お役に立てずすいません。

    キャンセル

0

外していたらすいません。
構造体にタグ名が記されていないからじゃないですか?
もしくはビットフィールドでタグ名が無いものが許されないとか?

union u_data{
    unsigned char BYTE[2];
    struct X1 {
        struct X2 { // BYTE[0]
            unsigned char C :1;
            unsigned char A :7;
        };
        struct X3 {// BYTE[1]
            unsigned char D :1;
            unsigned char B :7;
        };
    };
}DATA = {1,1};

Lazuriteの環境を持ってないのでこれ以上はわかりません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る