マイコン(AVR)で、ある式を記述すると hex データが跳ね上がってしまう
サインカーブを算出するために以下の質問をし、計算式を回答していただきました
http://okwave.jp/qa4751105.html
ですが、別の問題にあたってしまいました
上記回答の計算式をプログラムに書き込むと、コンパイル後の容量が跳ね上がってしまいます
同様の計算式で、x y に直接数字を指定すると容量が跳ね上がることはなさそうです
ですが、変数を指定できなければ意味がありません
なぜこのようなことが起こるのでしょうか?
また、解決方法はありますか?
#define F_CPU 800000UL
#include <avr/io.h>
#define sbi(BYTE,BIT) BYTE|=_BV(BIT)
#define cbi(BYTE,BIT) BYTE&=~_BV(BIT)
#include <math.h>
const int sin_max1 = 127,
sin_max2 = 255;
int main(void)
{
DDRA = 0b111;
DDRB = 0b11111111;
DDRD = 0b1111100;
PORTA = 0;
PORTB = 0;
cbi(PORTD, PD2);
cbi(PORTD, PD3);
cbi(PORTD, PD4);
cbi(PORTD, PD5);
cbi(PORTD, PD6);
int i = 0;
while (1)
{
sin_get(sin_max1, i);
i++;
if (i > sin_max1) i = 0;
}
}
void sin_get(const int x, const int y)
{
int z;
z = 127.5 * sin(2 * M_PI * y / x) + 127.5; // y x を直接数字に置き換えると容量は跳ね上がらない
PORTB = z;
}
お礼
お世話になりありがとうございました