|
Keil, отладчик показывает непойми что |
|
|
|
Dec 22 2006, 04:06
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
Вот тест-прграмма: #include <string.h> #include <stdio.h> #include <LPC214x.H> Код volatile int rc=0; volatile float A0 = 15.2, B0 = 0.152; int tst(const int iprivod,int id0, float iV0) { int iS0, iS2, it0, idx1, idt, iS_m=0x1234, it_m; [b] iS_m = (int)(A0 * A0 /B0); //Locals window show here 0x40000468 for iS_m //and 0x000005F0 if next line is commented [/b] iS_m = A0 * A0; it_m = A0/B0+0.5; id0 = iS_m; if(iV0 < 0.) { it0 = iV0/B0+0.5; } else { iS0 = iV0*iV0/(B0*2.); } if(id0 <= iS0) { if(iprivod > 0) { idx1 = 123; } else idt = 321;//it_m; return 0; }
iS2 = (id0 + iS0);
if(0x1235 > iS_m) { return iS_m; } return 2;
}
int main (void) { while(1) { rc= tst(1,1520, 0.); } } оптимизаю, всю, какую смог найти - отключил Собственно, что фигню показывает еще и можно б было пережить, но чем-то подобном у меня виснет. Причем только, если звать из прерывания... Куды бежать ?
|
|
|
|
|
 |
Ответов
|
Dec 22 2006, 18:15
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата как оценить размер стека Найти, где устанавливается размер стека для режима IRQ (какой-нибудь стартап), и убедиться, что он не слишком мал (не меньше 64-х байт, по крайней мере) Цитата All corrupted registers exept float-point registers are reserved Здесь имеются в виду регистры VFP, которого у LPC нет.
|
|
|
|
|
Dec 22 2006, 18:46
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
Цитата(aaarrr @ Dec 22 2006, 20:15)  Найти, где устанавливается размер стека для режима IRQ (какой-нибудь стартап), и убедиться, что он не слишком мал (не меньше 64-х байт, по крайней мере) Если evgen2 будет там флоаты пользовать то ИМХО 16 слов это мало! А если ещё и прочих функций повызывать с вложенностью Х и с некоторым кол-вом локальных переменных то ..... Кстати довольно часто можно обойтись целочисленными вычислениями, в том числе с фиксированной точкой. (Только время на разработку оно может больше занять) Цитата(evgen2 @ Dec 22 2006, 20:38)  ааааа!!!! Во, похоже на то.... по дефолту там 0x80 стоит, поставил 0x100 - те же яйцы, только на 5ом вызове. 0x200 - заработало! по краенй мере в эмуляторе... балин, я тут чуть не издох от тоски.... А где стек-то смотреть можно - "сколько я сейчас отъел" ? Не кисло для прерывания! Мож Вы там ещё и printf-ы/scanf-ы пользуете и т.д. типа массивов локальных переменных?
|
|
|
|
|
Dec 22 2006, 20:12
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
[quote name='Alex03' date='Dec 22 2006, 19:46' post='190116']
Кстати довольно часто можно обойтись целочисленными вычислениями, в том числе с фиксированной точкой. (Только время на разработку оно может больше занять) [/quote] так за что спрашивается боролись - я этим целочисленным онанизмом сыт по горло на 16 битах, решил тут не экономить на своем здоровье ;-) Т.е. обойтись-то можно, но минусов при целочисленых вычислениях тоже немало
[quote name='evgen2' post='190114' date='Dec 22 2006, 20:38'] ааааа!!!! Во, похоже на то.... по дефолту там 0x80 стоит, поставил 0x100 - те же яйцы, только на 5ом вызове. 0x200 - заработало! по краенй мере в эмуляторе... балин, я тут чуть не издох от тоски.... А где стек-то смотреть можно - "сколько я сейчас отъел" ? [/quote] Не кисло для прерывания! Мож Вы там ещё и printf-ы/scanf-ы пользуете и т.д. типа массивов локальных переменных? [/quote] неа, чиста умножить-разделить-сложить, да пару раз sqrt
[quote name='aaarrr' post='190127' date='Dec 22 2006, 20:28'] [quote name='Alex03' post='190116' date='Dec 22 2006, 18:46'] Кстати довольно часто можно обойтись целочисленными вычислениями, в том числе с фиксированной точкой. (Только время на разработку оно может больше занять) [/quote] Лучше вообще обойтись без вычислений в прерывании. Но в данном случае, по-моему, следует сначала разобраться, в чем дело, и заставить работать, а потом уже менять идеологию. [/quote] Ну вот тут Reinhard Keil написал - There are no limitiations in using Floating arithmetic in interrupts.
[quote name='aaarrr' post='190127' date='Dec 22 2006, 20:28'] [quote name='evgen2' post='190114' date='Dec 22 2006, 20:38'] А где стек-то смотреть можно - "сколько я сейчас отъел" ? [/quote] Можно смотреть в отладчике регистр SP(R13). Еще можно заполнить область стека константой, а потом посмотреть, насколько глубоко эта область затерлась.
Да, еще в RVCT должна быть опция Software Stack Check. [/quote] А как это Software Stack Check себя проявлет при отладке и в боевой программе ?
Да, и в любом лучае большое спасибо за помощь - сам бы еще месяц допирол
|
|
|
|
|
Dec 25 2006, 18:22
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
мда, опять стою на этих граблях  ft0 should be -0.5, but is shown as 2.001436 in locals window and as "0" in flying window (not shown), it0 should be = (int) -0.5,i.e 0 but is shown in locals as 1073747848 and as zero in flying window. No interrups are called.
|
|
|
|
Сообщений в этой теме
evgen2 Keil, отладчик показывает непойми что Dec 22 2006, 04:06 aaarrr Цитата(evgen2 @ Dec 22 2006, 04:06) Собст... Dec 22 2006, 04:17 evgen2 Цитата(aaarrr @ Dec 22 2006, 05:17) Цитат... Dec 22 2006, 05:10  aaarrr Цитата(evgen2 @ Dec 22 2006, 05:10) С рее... Dec 22 2006, 05:26   evgen2 Цитата(aaarrr @ Dec 22 2006, 06:26) Цитат... Dec 22 2006, 06:22    evgen2 Кстати - а что тогда в прерываниях можно с float p... Dec 22 2006, 06:36    aaarrr Цитата(evgen2 @ Dec 22 2006, 06:22) хммм.... Dec 22 2006, 06:41     evgen2 Цитата(aaarrr @ Dec 22 2006, 07:41) Должн... Dec 22 2006, 12:53      evgen2 Цитата(evgen2 @ Dec 22 2006, 13:53) то ка... Dec 22 2006, 15:39       aaarrr Цитата(evgen2 @ Dec 22 2006, 15:39) кое ч... Dec 22 2006, 15:53        evgen2 Цитата(aaarrr @ Dec 22 2006, 16:53) Цитат... Dec 22 2006, 17:59 evgen2 Цитата(aaarrr @ Dec 22 2006, 19:15) Цитат... Dec 22 2006, 18:38  aaarrr Цитата(Alex03 @ Dec 22 2006, 18:46) Кстат... Dec 22 2006, 19:28 aaarrr Вообще-то 1073747848 это и есть 2.001436, только в... Dec 25 2006, 20:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|