Цитата Сообщение от SBorovkov Посмотреть сообщение
Только что по приколу попробовал оба вида расчета.

Подключение библиотеки math.h и расчет экспоненты съедает 4к флеша и порядка 250 байт оперативной памяти.

Код:
#include <math.h>
...

	uint8_t i;
	double d;
	double volatile p=0;
	d=1.545444342+i;
	p=p+exp(d);
	if (p==0)
		p=1;
	}
Выполняется примерно 5300 тактов процессора. А там еще наверняка надо будет выполнить кучу действий, кроме вычисления экспоненты (умножения, деления..).

Код с аппроксимацией 16-битных значений

Код:
#define Temp1Count 5

uint16_t Temp1[Temp1Count][2] PROGMEM = 
// первое значение - абсцисса, второе - ордината
{
	{0,40},
	{5,80},
	{26,200},
	{42,300},
	{70,400},
};
...
	uint16_t InTemp;
	uint16_t RealTemp;

	uint16_t InLeftTemp;
	InTemp=5;

	
	i=Temp1Count;
	do
	{
		i--;
		InLeftTemp=pgm_read_word(&Temp1[i][0]);
	}
	while ((i>=0)&&(InTemp<InLeftTemp));
	uint16_t InRightTemp=pgm_read_word(&Temp1[i+1][0]);
	uint16_t OutLeftTemp=pgm_read_word(&Temp1[i][1]);
	uint16_t OutRightTemp=pgm_read_word(&Temp1[i+1][1]);

	RealTemp=OutLeftTemp+(OutRightTemp-OutLeftTemp)*(InTemp-InLeftTemp)/(InRightTemp-InLeftTemp);
	if (RealTemp==81)
...
Основное затраченное время - выполнение умножений и делений. Выполняется порядка 350 тактов при 4х попаданиях в цикл (20 тактов на цикл). Съедает порядка 160 байт флеш-памяти, не ест оперативную память.
Тут правда надо четко просчитать, чтобы не было переполнений при умножении, либо вычисление RealTemp делать в int32.

В общем все зависит от необходимой точности и наличия ресурсов.
Спасибо огромнейшее! Вечером буду пробовать. Отпишусь о результатах.