WonderWitch 技術情報 2001/09/27

2001年9月27日公開の技術情報です。

プロセス制御関連機能群についてのドキュメントを提供しました

sys/process.h に宣言/定義されているプロセス制御関連の関数、マクロ、構造体について 説明するドキュメントを追加し、ダウンロードページで提供しました。

ダウンロードページ


lseek()、fseek() でポインタを移動後にファイルに書き込みを行なうと正しく動作しませんでした

ライブラリ関数 lseek()、fseek() でファイルポインタの位置を移動した後にファイルに書き込みを行なうと ファイルの長さが短く再設定されてしまい、 書き込み位置より後ろのデータをアクセスできなくなる不具合がありました。

この問題はオペレーティングシステム内部のストリームドライバに起因しており、 修正のためには FreyaOS の入れ換えが必要となります。

この問題を修正したオペレーティングシステムをダウンロードページで提供しました。

ダウンロードページ


ライブラリ関数 lseek() に不具合がありました

ライブラリ関数 lseek() が返す戻り値が正しくない不具合がありました。

この問題を修正したライブラリをダウンロードページで提供しました。

ダウンロードページ


ライブラリ関数 strcpy()、strncpy() に不具合がありました

ライブラリ関数 strcpy()、strncpy() が返す戻り値が正しくない不具合がありました。

この問題を修正したライブラリをダウンロードページで提供しました。

ダウンロードページ


ライブラリ関数 pcb_get_pcbid() に不具合がありました

ライブラリ関数 pcb_get_pcbid() が SRAM バンクの切替が発生しているタイミングで呼び出される 割り込みハンドラの中から呼ばれた場合に正しい値を返さない不具合がありました。
(関連:「割り込み時に SRAM のバンク切替え状態に不整合が起こる場合があります」)

この問題を修正したライブラリをダウンロードページで提供しました。

ダウンロードページ


割り込み時にSRAMのバンク切替え状態に不整合が起こる場合があります

バンク切替えを伴う機能を実行中に割り込みハンドラが呼び出されると、 SRAM バンクの切替え状態に不整合が生じる場合があります。 このときにユーザプログラムのデータエリアを操作すると OS のワークエリアや ソフトファイルシステムの内容を破壊してしまい、 システムの暴走を招いてしまう問題がありました。

この問題を回避するために必要となるライブラリ関数 pcb_get_sram() を準備し、 この関数を含むライブラリとヘッダーファイルをダウンロードページで提供しました。

また、この問題とその回避方法についての説明をプログラミング tips のページに 掲載しました。

ダウンロードページ
「割り込み時のSRAMバンク不整合問題を回避する」


Turbo C および Digital Mars C/C++ 用のスタートアップルーチンで _resource が public 宣言されていませんでした

Turbo C 用のスタートアップルーチン、c0ww.obj および Digital Mars C/C++ 用のスタートアップルーチン、ctww.obj でシンボル _resource が public 宣言されていませんでした。 なお、このシンボルで定義される値は C 言語プログラムからは、_pc->_resource としてアクセスできるので 実害はありませんでした。

この問題を修正したスタートアップルーチン群とソースファイルをダウンロードページで提供しました。

ダウンロードページ


main関数から戻った場合に終了コードを設定するようにしました

main 関数から戻るとプロセスが終了しますが、この際、main 関数の戻り値を終了コードに設定するように なっておらず、終了コードを設定するには明示的に exit 関数を呼ぶ必要がありました。 各スタートアップルーチンを、main 関数から戻った際に終了コードを設定するように変更しました。

この修正を施したスタートアップルーチン群とソースファイルをダウンロードページで提供しました。

ダウンロードページ


Digital Mars C/C++ で _heap が破壊される場合がありました

ヒープ領域の先頭を示すシンボル _heap は、使用されるデータ領域の最後を指すように初期化される必要がありましたが、Digital Mars C/C++ によりいくつかのセグメントがデータ領域に追加されていたため _heap が正しくデータ領域の最後を指していませんでした。Digital Mars C/C++ が追加するセグメントの結合順をスタートアップルーチンで指定し、_heap が正しくデータ領域の最後を指すように変更しました。

この修正を施したスタートアップルーチン群とソースファイルをダウンロードページで提供しました。

ダウンロードページ


ワンダーゲート用ライブラリ WgILで write() 時に 4 バイト余分に送信していました

WgIL の write() 時に 0x0d, 0x0a, 0x0d, 0x0a の 4 バイトが必ず余分に送信されていました。この 4 バイトの送信を行わないように変更しました。
これに伴いサンプルプログラムの setup.h 中の GETCMD_GRAY, GETCMD_COLOR の末尾に上記 4 バイトを 追加、webload.c の GET コマンド発行時に上記 4 バイトを追加 しました。

この修正を施した WgIL をダウンロードページで提供しました。

ダウンロードページ


Copyright (C) 2001 Qute Corporation. All rights reserved.