Help - глюки с float в Keil?

Jul 12, 2003 24 Replies

Thu Jul 17 2003 16:53, Yuri Kopylov wrote to Ilja Vlaskin:

YK> Поскольку портящиеся процедуры main были типа 'перевод float YK> в строку,

Это типа sprintf() ? Если так, то надо перед именем переменной явно указать формат:

sprintf("format string",.....(float)my_float);

Это баг (фича ?) строковой библиотеки Кейла.

Tadas

"Yuri Kopylov" snipped-for-privacy@mtu-net.ru сообщил/сообщила в новостях следующее:

(Bank0

float

Извиняюсь - погорячился! Компилятор честно делает PUSH-POP всех 8 регистров банка 0 при входе в ISR, так что это (DATA overlay процедур, вызываемых из ISR и main) не могло быть причиной глюков программы. Надо искать дальше.

С уважением, Юрий Копылов snipped-for-privacy@mtu-net.ru

"Tadas" snipped-for-privacy@takas.lt сообщил/сообщила в новостях следующее:

Буду иметь ввиду, спасибо. Но обычно (как и в данном случае) я пишу свои процедуры. Типа того как ниже. Очень давно замерял размеры кода, и с тех пор считаю, что так короче и быстрее при моем фиксированном формате выдачи.

k = (int)f.fl; c = k/1000; que[qlen++] = c | 0x30; // Тысячи k -= c*1000; c = k/100; que[qlen++] = c | 0x30; // Сотни k -= c*100; que[qlen++] = ','; // Десятичная точка c = k/10; que[qlen++] = c | 0x30; // Десятки c = k-c*10; que[qlen++] = c | 0x30; // Единицы

WBR Юрий Копылов snipped-for-privacy@mtu-net.ru

Долгих лет , Yuri.

Wednesday July 16 2003 18:47, you wrote to Sergey Davydov: YK> я сам (своим кодом) хотел бы проверить валидность RAM. Hапример, не YK> хотелось бы при WDT-RESET обнулять длинные цифровые фильтры и PID, YK> чтобы они опять долго входили в режим и т.д. Я бы просто проверил YK> критические переменные в RAM на свои лимиты, а не начинал с обнуленных YK> величин. Разве не логично? Hе логично, если у твоего ПИДа после глюкавого pестаpта будет офигенная(ну ошибочно записалось) интегpальная составляющая, то ты долго и нудно будешь pасхлебывать получившуюся колебательность, а если система в некотоpых пpеделах неустойчива, то и вpазнос можно пойти, а с нулевой интегpальной частью ты получишь лишь легкое затягивание пеpеходного пpоцесса. Та же баня с фильтpом, пpи глюке он может дооооооооооооолго пpиходить в себя :)))

Bye, Dmitry.

Hello Yuri,

YK> Да, это я уже понял. Попробую перенести часть глобальных YK> переменных в другой (новый) сегмент (файл), равный размеру текущей YK> дырки в RAM. Хотя поначалу мне казалось, что линкер мог бы и рвать YK> сегменты сам.

Линкер не знает как их рвать, чтобы ничего не испортить, например массивы или структуры, которые должны лежать в памяти неразрывно. Конечно, компилятор мог бы создавать свой сегмент на каждую переменную, но видимо Keil решил не делать излишних усложнений.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required