(toppers-users 4129) SSP(cq_starm_gcc版)で不具合と思われる修正を行いました
koizumi yoshiyuki
koizumiyoshiyuki @ gmail.com
2013年 9月 19日 (木) 09:57:19 JST
こいさんです
SSPの1.2.0が公開(ssp-1.2.0.tar.gz)されたので、sq_strm
1.1.1(ssp_cq_starm_gcc-20120607.tar)の
arch\arm_m_gccとtarget\cq_starm_gccをコピーして実行しました。この際気になった問題(?)の修正を(ワーニングを含む)行ったので報告します。
-------------------------------------------
1 eコマンドが動作しない(共通部)
ssp\sample\sample1.cの205,206行のmessage[tskno - 1]の -1 は不要のはず。
main_task()にて tskno=0の時、taskのアクセスがmessage[tskno - 1]だと問題あり?
**org
command = message[tskno - 1];
message[tskno - 1] = 0;
**update
command = message[tskno];
message[tskno] = 0;
修正後sample1は以下のように動作するようになりました。
TOPPERS/SSP Kernel 1.2.0 for CQ-STARM(STM32F103) (Sep 18 2013 , 20:26:04)
Copyright (C) 2010 by Meika Sugimoto
Copyright (C) 2010 by Naoki Saito
Nagoya Municipal Industrial Research Institute, JAPAN
Sample program starts. <− aコマンド タスクは1が出来フォルトなのでタスク1が起動
#act_tsk(1)
task1 is running (001). | <−aコマンド 起動キューを有効
#act_tsk(1)
task1 is running (002). |
task1 is running (003). |
task1 is running (004). | <−eコマンド タスクを停止、起動がキューされているので再起動
#1#terminate task
task1 is running (005). | <−eコマンド タスクを停止
#1#terminate task
この件は使用も絡むので私の認識誤りかもしれません。
2 kernel_cfg.cのワーニング(共通部)
_kernel_flginib_iflgptnの初期値が9桁あり、8桁が正しい。
ssp\sample\sample1.cfgの25行目の0x100000000が誤り。0を1つ削除でよさそう。
**org
CRE_FLG(FLG1 , { TA_NULL , 0x100000000 });
**update
CRE_FLG(FLG1 , { TA_NULL , 0x10000000 });
3 serial.cのワーニング(共通部)
ssp\syssvc\serial.cの478行のbuffer_emptyは使われていない。
削除した(すべきかは解らず)。
4 dataqueue.cのワーニング(共通部)
ssp\extension\dataqueue.cの84,164行のconst sizeにuint8_t 追加
記述もれ(誤り)だと思う。(cy8c版は修正されている)
**org
dequeue_data(intptr_t* const data , uint8_t* const head , const size ,
intptr_t* rdata);
**update
dequeue_data(intptr_t* const data , uint8_t* const head , uint8_t const
size , intptr_t* rdata);
5 t_syslog.hのワーニング(共通部)
110行、loginfo[5]のアクセスがあるが、TMAX_LOGINFOは4になっている、6が正しい。
216行のsyslog.loginfo[5] = arg6; でメモリの不正アクセスになる。記述誤りだと思う。
**org
#define TMAX_LOGINFO 4
**update
#define TMAX_LOGINFO 6
TMAX_LOGINFOの値を条件に関数の有効無効を切り替えるのが使い易いと思うが。#ifは好まれないみたいですね。
6 prc_timer.cのワーニング(CM3専用)
102行、フラグクリアの為、レジスタ読出し値は使用しない。
tmpを削除すべきではないか。
7 prc_insn.hのワーニング(CM3専用)
61行、istkにchar_t *のキャストが必要だと思う。
**org
#define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((istk) + (istksz)))
**update
#define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char_t *)(istk) +
(istksz)))
397行、void *の加算になっている。カッコを入れるべき。
**org
sil_wrw_mem((void *)NVIC_CLRENA0 + (tmp >> 5), (1 << (tmp & 0x1f)));
sil_wrw_mem((void *)(NVIC_CLRENA0 + (tmp >> 5)), (1 << (tmp & 0x1f)));
8 target_config.cのワーニング(CM3専用)
set_port_pull()は未使用なので削除すべきか。
9 sample1.cとselial.cで同じ名前のマクロ(SVC)が使われている
問題なく動作しているが、良いサンプルソースと言えないと思う。
また、selial.cではSVCはワーニングになっている。
別なマクロ名にすべきだと思う。
10 アプリケーションとカーネルを別々に構築出来ていない(未解決)
extension
部はライブラリになるべきだと思うが、オブジェクトがライブラリに入っていない。コンパイルスイッチでオブジェクトを分ける処理も必要だと思ている。
-------------------------------------------
10については何かコメントが頂けることを願っています。
追伸
起動処理のキュー機能が追加され嬉しく思っています。SSPの最大タスク数は16に制限されていますが32bitワンチップマイコンが増えている昨今、最大タスク数を16から32に増す案は如何でしょうか。タスク数が増えても、増やしたタスク分のメモリを別にすればタスク番号<->bitイメージ変換が変わるだけなのでメモリサイズへの影響は少ないと思っています。タスク数の増加に伴う誤りは100%チェックされる(増やしたタスクの起動確認)はずでしょう。
タスク番号<->bitイメージ変換命令を持つCPUでは性能もメモリサイズも性能も変わらないでしょう。
以上
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.toppers.jp/pipermail/users/attachments/20130919/e9818e4f/attachment.html>