RXシリーズにてデータをZIP圧縮

お世話になっております。

カイロスです。

マイコンにて、データをZIP圧縮してから別機器にシリアルで圧縮データを送信したいのですが、

ZIP圧縮をマイコン側で実施するライブラリ等のあるRXシリーズのマイコンはございますでしょうか?

できれば、OSを積むことなく実施できればと考えたのですが、OSを積むしか方法はないですかね?

この辺り、あまり知識もない者ですので、いろいろとご意見いただけると幸いです。

よろしくお願いいたします。

  • libzipというものはあるので試されると良いのでは

  • zlib をGNU-RX 8.3.0でコンパイルして、使っています。

    OSの有る無しは、根本的に関係ありません。

    又、ファイルシステムの有る無しも関係ありません。

    自分は、PNG 画像ファイルのデコードで利用していますが、エンコードも出来ると思います。

    問題は、記憶割り当てです、malloc、freeを利用(libc)するのと、それなりにメモリを消費するので、最終的にはエンコードする大きさによると思います。

    エンコードする対象と、RAM容量とのトレードオフなので、その範囲ならどのRXマイコンでも利用可能と思います。

    ※zlibライブラリはRXv2コア用でコンパイルしてあります。

    https://github.com/hirakuni45/RX

    に関係コードをMITライセンスで公開しているので参考にして下さい。

  • fujitaさん、ご返答ありがとうございます。

    試してみます!!

  • hirakuniさん、ご返信ありがとうございます。

    試してみます!

    それと質問なのですが、zlibの圧縮方法は、gzipと同様の方式という認識で大丈夫でしょうか?

  • zlibに関して質問があります。

    現在、zlibをCS+を用いてRXシリーズに組み込もうとしているのですが、以下のエラーが出てしまいました。

    C0564000:Internal error : (0281) "File:io_conv_lib.cpp Line:297 / Illigal library format" / "IOConvertIARLibrary::setModuleName"

    組み込んだファイルとしては、zlib.hとzconf.hです。

    そして、Zlib.libをライブラリとして登録しました。

    zconf.hのinclude <sys/types.h>はファイルがオープンできないというエラーが出たため、プログラムファイルにsys/types.hを追加して対応しました。もしかするとこの対応がよくなかったのかな?とも考えています。

    それか、Zlib.libの作成時に何かおかしかったのかな?とも考えています。

    質問が多くなって申し訳ありません。

    zlibをCS+に組み込むための知恵などありましたらご教授頂けると幸いです。

    よろしくお願いいたします。

  • gccを用いて、Windows上でzlibを動作させファイルの圧縮と解凍は実現しました。

  • > C0564000:Internal error : (0281) "File:io_conv_lib.cpp Line:297 / Illigal library format" / "IOConvertIARLibrary::setModuleName"

    ぐぐるかされましたか?

    www.google.com/search

  • はい!ぐぐりまして、コンパイラ等の問題を確認してみました。

    以下、確認したコンパイラバージョン

    V2.08.00

    V2.03.00

    V3.03.00

    コンパイラを変更しても解決しなかったので、ライブラリ生成時のコンパイルの問題なのかな?と考えているところです。

    外部のライブラリなので、CS+用にビルドする方法等あるのですかね?

    そのあたり調査しているところです。

  • カイロスさん、こんにちは。NoMaYです。

    > コンパイラを変更しても解決しなかったので、ライブラリ生成時のコンパイルの問題なのかな?と考えているところです。
    > 外部のライブラリなので、CS+用にビルドする方法等あるのですかね?

    一応、常識的には、CC-RXでリンクするライブラリはCC-RXでビルドしないと駄目です。(ただ、常識も時代と共に変化しますが、もしかすると、ARMマイコン界隈では、コンパイラ間の垣根が取り払われているかも知れません。また、RXマイコンでも、CC-RXでビルドしたライブラリをIARコンパイラでリンクしてしまうことが行われ始めていますね、、、)

    エラーからの推測ですけど、IARコンパイラ用のC++ライブラリのバイナリファイルなのではないでしょうか?なので、御自身で、zlibをCC-RXでビルドしてライブラリを作るか、ライブラリを作らずともzlibのソースをCS+のプロジェクトに追加してビルドするか、といったことをする必要があると思います。

  • 基本的な部分ですが、zlib のような POSIX 系ソースをCC-RX コンパイラでビルドする場合、configure を CC-RX 用にカスタマイズして、CC-RX で適切にコンパイル出来るような設定を生成させる必要があります。

    gcc をターゲットとして生成した設定を使って、CC-RXでビルドしても、それが適切にコンパイルされ、ライブラリが出来る保証はありません。(まぁ、zlib 程度なら、試した事はありませんが、コンパイル出来れば、問題無く動くかもしれませんが・・)

    基本的に、環境変数、カスタマイズされたヘッダー、コンパイラーオプションがそれぞれ、CC-RXに適した物が選ばれないと、正しいライブラリは生成されないものと思います。

    それらを全部理解した上で、環境変数、ヘッダー、コンパイラオプション、などを全て「手動」で設定、改修が行えるスキルがあれば問題ありません。

  • NoMaYさん、ありがとうございます。

    やはり、そうなんですね。

    必要なのは、圧縮機能のみなので、そのあたりでコンパイルを試してみたいと思います!!

    また、ご報告させていただきます!

  • hirakuni45さん、ありがとうございます。

    知識不足ゆえに、いろいろと遠回りしてしまってすみません!!

    漸く、理解できました!

    いろいろと試してみたいと思います!

    またご報告します!!