PIC12F683でアナログ回路の検証を行ってますが、まぁ何でもかんでもコンデンサ入れたらエエというもんでもないで、という事をよく理解しました。

ノイズ除去の為のコンデンサが逆に発振の契機になったりします。

例えばコンデンサ無しだと発振しないのに、取り付けた途端に、収まり悪くモーターがエライ動きをします。
無題

実際問題、あのクソ重たいワイヤー繋いだら、こんなに発振することは無いと思いますけれども、定常状態でもあんまり気分が良い訳でもないですね。

さて組込みC言語の話。

色々なフェイルセーフを入れて行くと、だんだんメモリの上限が見えてきました。

少し試してみたところ、floatはムサクサメモリを食うという事がわかり、可能な限り整数に直しています。
例えば、
float ax = ((gPotTable[index+1] - gPotTable[index]) * (float)((rpm%1000)/1000)));
というコードはfloatを避けて
unsigned int ax = ((((gPotTable[index+1] - gPotTable[index]) * ((rpm%1000)/100)))/10)
これだけで結構サイズが減ります。

他には「へ〜」と思ったのですが、テーブルの初期化です。

unsigned int pot_ave[POT_AVE_NUM] = {0};

というコードを書いたらメモリが足りませんというエラーが発生しましたが、

unsigned int pot_ave[POT_AVE_NUM];
memset(pot_ave, 0, sizeof(int)*POT_AVE_NUM); 
というコードに直したらメモリが足りました。

初期化{0}がデータメモリを圧迫している様です。

へ〜
です。
例えば、int x[5] = {0}; というコードを入れてコンパイルすると
    Data space           used    5Dh (    93) of    80h bytes   ( 72.7%)
となり、int x[5];だけですと
    Data space           used    48h (    72) of    80h bytes   ( 56.3%)
となります。

最適化されない無料版だからでしょうか。流石にこの辺は有料化されると、もっとよくなる気がします。

この調子で領域を増やして100%を超えると、次のようなエラーが出ます。
Error   [1360] C:\Users\xxx\PIC\rpvs12F\main.c; 292. no space for auto/param main@x
 
このエラーから、Data spaceとは、自動変数領域らしいと言う事がわかります。
試しに、int x[5] = {0}; をグローバル領域に書くと
    Program space        used   3FFh (  1023) of   800h words   ( 50.0%)
    Data space           used    52h (    82) of    80h bytes   ( 64.1%)

main()内部に書くと、
    Program space        used   416h (  1046) of   800h words   ( 51.1%)
    Data space           used    5Dh (    93) of    80h bytes   ( 72.7%)
となりました。

スタックが不足しているって事ですね。
ならばリンカでスタックサイズを増やせれば、と思ったのですが、変更出来ないみたいです。
つまり有料版を買えって事なのかも知れませんな。
 
ついでに言えばProgram spaceも増えてたり。
どんどんグローバル変数にしろってゆー事ですかね。

なんとなくiアプリ作ってた頃を思い出しますね。

WindowsとMFCの開発はとことんパワープレイだった事を思い知らされますな。