Где живёт uint32_t?

Начал писать заголовочные файлы для SmartFusion. Работа предполагается в SoftConsole. Есть несколько поименованных областей памяти, с которыми надо будет работать. Описаны они примерно следующим образом:

typedef struct
{
volatile uint32_t    TSW[16];
volatile uint32_t    SA[30][16];
}MKORX_TypeDef;

#define        MKORX_BASE        (0x40050000)
#define        MKORX            ((MKORX_TypeDef *) MKORX_BASE)

Дальнейшее использование, соответственно, стандартным образом: MKORX->SA[4][2] = 0xDEADBEEF;

Дык вот здесь есть малюсенькая такая тонкость, которая заключается в том, что тип uint32_t описан в файле stdint.h и его надо хотя бы единожды в проект включить. Иначе, возникает ошибка компилятора, которая в принципе не гуглится и по этому описанию понять – а в чём собственно ошибка? – не получится:

expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘TSW’

Указатель ошибки показывает почему-то на название переменной, а не на то, что перед ней тип данных неопределен. Вообще-то, в этом случае должна возникать ошибка на отсутствие зарезервированного слова и предварительного описания типа. Очень хочется кого-нибудь стукнуть за это.

Лень и пыль

Дорешивал домашку к четвёртой неделе MITx 6.002x (да, дедлайн 8 апреля, а сегодня уже 7 – ну не было у меня возможности раньше заняться). И столкнулся с непонятностью.

По задаче нужно вычислить ток зависимого источника тока – мосфета, причём довольно хитро расположенного. Забудем про то, что ЭТО с моей точки зрения не цепь нифига – слева я имею ввиду. В смысле – ну там же разрыв!!! А вот с их точки зрения цепь. Потому что “воспользуйтесь законом Кирхгоффа о напряжении в контуре”. НУ ВЕДЬ НЕТУ КОНТУРА!!! Ладно, фиг с ними, предположим, что он есть. Едем дальше, загвоздка дальше. Ток мосфета вычисляется по формуле (K*(Vgs-Vt)^2)/2, где Vgs – напряжение, приложенное к затвору относительно истока, а Vt – напряжение срабатывания (threshold) (работаем мы типа в режиме сатурации насыщения!). Плюс надо вычислить напряжение Vout. Формула опять же по Кирхгоффу: Vout = Vdd-Rl*Id. Ток мы узнали на прошлом этапе, причём ток через транзистор вместе с резистором, поэтому нам резистор Rs второй раз учитывать не нужно.

Дык вот, решаю я квадратное уравнение. Получаю два корня, весьма близкие, но всё же. Выбираю меньший. Высчитываю по нему Vout. Ввожу оба ответа. И опаньки, Vout подходит, а Id, с помощью которого я Vout высчитал – нет. Ыыыы. Крыша едет.

Разгадка проблемы кроется в том, что я купил новые батарейки для своего инженерного калькулятора и когда менял их занёс под экран пылинку. Решив, что она мне и не мешает вовсе, я не стал разбирать калькулятор заново. А когда решал задачу эта пылинка мне обошлась привидевшейся точкой между целой и децимальной частью детерминанта. Разница между моим и правильным значением тока составила пятнадцать тысячных. Для расчета напряжения такая погрешность не вызвала проблем, а значение тока у меня не приняли…