|
Ошибка IAR или чтото еще? |
|
|
|
 |
Ответов
|
Dec 20 2006, 17:54
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(prottoss @ Dec 20 2006, 17:32)  Мда... Умные речи о значимости скобок не помогли... Финал - стоны зрителей, аншлаг, занавес закрывается Уличили А дизассемблер привести сложно? Или мы должны все бросить и посвятить вечер изучению ? Сами то смотрели?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Dec 20 2006, 18:05
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Dog Pawlowa @ Dec 20 2006, 21:54)  А дизассемблер привести сложно? Или мы должны все бросить и посвятить вечер изучению ? Сами то смотрели? Я смотрел, и не раз, пожалуйста, c чуйством глубокохо удовлетворения привожу листинг, смотрите: Код 218 /***************************************************************************** 219 Коррекция значения времени 220 Корректирует время в зависимости от значения TIFR и младшего слова (ТС1) 221 *************************************************************************** ***/ 222 //UINT32 PULSE_SENS_CorrectTime(Pulse_Time_t *Pulse)
\ In segment CODE, align 2, keep-with-next 223 void PULSE_SENS_CorrectTime(Pulse_Time_t *Pulse) \ PULSE_SENS_CorrectTime: 224 { \ 00000000 2F79 MOV R23, R25 \ 00000002 2E28 MOV R2, R24 \ 00000004 01F8 MOVW R31:R30, R17:R16 225 UINT32 time = Pulse->Time; \ 00000006 8100 LD R16, Z \ 00000008 8111 LDD R17, Z+1 \ 0000000A 8122 LDD R18, Z+2 \ 0000000C 8133 LDD R19, Z+3 226 227 /* корректируем результат по состоянию флага OCF1A 228 на момент считывания значений времени */ 229 if(Pulse->TIFR_reg & (1 << OCF1A)) \ 0000000E 8144 LDD R20, Z+4 \ 00000010 FF44 SBRS R20, 4 \ 00000012 C00A RJMP ??PULSE_SENS_CorrectTime_0 230 { 231 time += 0x00010000; /* если флаг установлен, инкрементируем значение милисекунд */ \ 00000014 5000 SUBI R16, 0 \ 00000016 4010 SBCI R17, 0 \ 00000018 4F2F SBCI R18, 255 \ 0000001A 4F3F SBCI R19, 255 232 if(SYSTIMER_COMPARE_VAL == LOWORD(time)) \ 0000001C 2F51 MOV R21, R17 \ 0000001E 3C0F CPI R16, 207 \ 00000020 4057 SBCI R21, 7 \ 00000022 F411 BRNE ??PULSE_SENS_CorrectTime_0 233 234 /* если значение счетчика равно константе в регистре сравнения, то мы это 235 значение должны обнулить */ 236 time &= 0xffff0000; \ 00000024 E000 LDI R16, 0 \ 00000026 E010 LDI R17, 0 237 } 238 239 /* преобразуем в мкс */ 240 Pulse->Time = ((UINT32)(LOWORD(time) >> 1) + (UINT32)(HIWORD(time)) * 1000); \ ??PULSE_SENS_CorrectTime_0: \ 00000028 01A8 MOVW R21:R20, R17:R16 \ 0000002A 9556 LSR R21 \ 0000002C 9547 ROR R20 \ 0000002E E060 LDI R22, 0 \ 00000030 0189 MOVW R17:R16, R19:R18 \ 00000032 01C8 MOVW R25:R24, R17:R16 \ 00000034 EE08 LDI R16, 232 \ 00000036 E013 LDI R17, 3 \ 00000038 E020 LDI R18, 0 \ 0000003A E030 LDI R19, 0 \ 0000003C 9F19 MUL R17, R25 \ 0000003E 0D20 ADD R18, R0 \ 00000040 1D31 ADC R19, R1 \ 00000042 9F18 MUL R17, R24 \ 00000044 2D10 MOV R17, R0 \ 00000046 0D21 ADD R18, R1 \ 00000048 1F36 ADC R19, R22 \ 0000004A 9F09 MUL R16, R25 \ 0000004C 0D10 ADD R17, R0 \ 0000004E 1D21 ADC R18, R1 \ 00000050 1F36 ADC R19, R22 \ 00000052 9F08 MUL R16, R24 \ 00000054 2D00 MOV R16, R0 \ 00000056 0D11 ADD R17, R1 \ 00000058 1F26 ADC R18, R22 \ 0000005A 1F36 ADC R19, R22 \ 0000005C 0F04 ADD R16, R20 \ 0000005E 1F15 ADC R17, R21 \ 00000060 1F26 ADC R18, R22 \ 00000062 1F36 ADC R19, R22 \ 00000064 8300 ST Z, R16 \ 00000066 8311 STD Z+1, R17 \ 00000068 8322 STD Z+2, R18 \ 0000006A 8333 STD Z+3, R19 241 //return ((UINT32)(LOWORD(time) >> 1) + (UINT32)(HIWORD(time)) * 1000); 242 } \ 0000006C 2D82 MOV R24, R2 \ 0000006E 2F97 MOV R25, R23 \ 00000070 9508 RET Что бы не напрягать попусту Ваши глаза и мозговые извилины, сделаю два замечания: В начале кода компилятор послушно берет адрес и формирует переменную time из регистров r16-19 Код 00000000 2F79 MOV R23, R25 \ 00000002 2E28 MOV R2, R24 \ 00000004 01F8 MOVW R31:R30, R17:R16 225 UINT32 time = Pulse->Time; \ 00000006 8100 LD R16, Z \ 00000008 8111 LDD R17, Z+1 \ 0000000A 8122 LDD R18, Z+2 \ 0000000C 8133 LDD R19, Z+3 В конце, так же послушно запихивает то, что пережевал обратно: Код \ 00000064 8300 ST Z, R16 \ 00000066 8311 STD Z+1, R17 \ 00000068 8322 STD Z+2, R18 \ 0000006A 8333 STD Z+3, R19 Что и как он там насчитал, меня мало интересует, но факт остается фактом, насчитал он не правильно
--------------------
|
|
|
|
|
Dec 20 2006, 19:29
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(prottoss @ Dec 20 2006, 18:05)  Я смотрел, и не раз, пожалуйста, c чуйством глубокохо удовлетворения привожу листинг, смотрите: Код \ ??PULSE_SENS_CorrectTime_0: \ 00000028 01A8 MOVW R21:R20, R17:R16 \ 0000002A 9556 LSR R21 \ 0000002C 9547 ROR R20 \ 0000002E E060 LDI R22, 0 \ 00000030 0189 MOVW R17:R16, R19:R18 \ 00000032 01C8 MOVW R25:R24, R17:R16 \ 00000034 EE08 LDI R16, 232 \ 00000036 E013 LDI R17, 3 \ 00000038 E020 LDI R18, 0 \ 0000003A E030 LDI R19, 0 \ 0000003C 9F19 MUL R17, R25 \ 0000003E 0D20 ADD R18, R0 \ 00000040 1D31 ADC R19, R1 \ 00000042 9F18 MUL R17, R24 \ 00000044 2D10 MOV R17, R0 \ 00000046 0D21 ADD R18, R1 \ 00000048 1F36 ADC R19, R22 \ 0000004A 9F09 MUL R16, R25 \ 0000004C 0D10 ADD R17, R0 \ 0000004E 1D21 ADC R18, R1 \ 00000050 1F36 ADC R19, R22 \ 00000052 9F08 MUL R16, R24 \ 00000054 2D00 MOV R16, R0 \ 00000056 0D11 ADD R17, R1 \ 00000058 1F26 ADC R18, R22 \ 0000005A 1F36 ADC R19, R22 \ 0000005C 0F04 ADD R16, R20 \ 0000005E 1F15 ADC R17, R21 \ 00000060 1F26 ADC R18, R22 \ 00000062 1F36 ADC R19, R22 ProttossНе поленился, проверил Ваш код сначала в голове, затем на симуляторе Так вот: Компилятор сделал РОВНО ТО, ЧТО ВЫ У НЕГО ПОПРОСИЛИ !!! Так что исчите апщибку в логике работы программы. Да, кстати, присоединяюсь к Цитата И, кстати, это так ведь задумано - при каждом вызове функции портить Pulse->Time? скорее всего именно здесь собака порылась
|
|
|
|
|
Dec 20 2006, 20:04
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(singlskv @ Dec 20 2006, 23:29)  ProttossНе поленился, проверил Ваш код сначала в голове, затем на симуляторе Так вот: Компилятор сделал РОВНО ТО, ЧТО ВЫ У НЕГО ПОПРОСИЛИ !!! Так что исчите апщибку в логике работы программы. Да, кстати, присоединяюсь к Цитата И, кстати, это так ведь задумано - при каждом вызове функции портить Pulse->Time?
скорее всего именно здесь собака порылась Какая все же ошибка? Объясните не разумному? 2 Oldring - функция вызывается после того, как прерывания запрещены. После всех вычислений прерывания разрешаются. В первом случае я возвращаю результат из функции и он правильный, во втором случае я возвращаю результат в указатель и результат, в итоге, не правильный
--------------------
|
|
|
|
Сообщений в этой теме
Sergio66 Ошибка IAR или чтото еще? Dec 18 2006, 12:47 aesok Показывайте код. Dec 18 2006, 13:06 Sergio66 Цитата(aesok @ Dec 18 2006, 13:06) Показы... Dec 18 2006, 13:15  _Bill Цитата(Sergio66 @ Dec 18 2006, 13:15) Вот... Dec 18 2006, 14:48   Sergio66 Цитата(_Bill @ Dec 18 2006, 14:48) Цитата... Dec 18 2006, 15:01    aesok Опишите проблемму полностью:
Как переменые и стру... Dec 18 2006, 15:18    Dog Pawlowa Цитата(Sergio66 @ Dec 18 2006, 15:01) А ч... Dec 18 2006, 15:28     Sergio66 Цитата(Dog Pawlowa @ Dec 18 2006, 15:28) ... Dec 18 2006, 15:44     prottoss Цитата(Dog Pawlowa @ Dec 18 2006, 19:28) ... Dec 18 2006, 15:45      Dog Pawlowa Цитата(prottoss @ Dec 18 2006, 15:45) Ска... Dec 18 2006, 16:46       prottoss Цитата(Dog Pawlowa @ Dec 18 2006, 20:46) ... Dec 18 2006, 17:08        Dog Pawlowa Цитата(prottoss @ Dec 18 2006, 17:08) Цит... Dec 18 2006, 18:48         Oldring Цитата(Dog Pawlowa @ Dec 18 2006, 18:48) ... Dec 18 2006, 19:08          singlskv Цитата(Oldring @ Dec 18 2006, 19:08) Дело... Dec 18 2006, 19:31          _Bill Цитата(Oldring @ Dec 18 2006, 19:08) Цита... Dec 20 2006, 15:06           Oldring Цитата(_Bill @ Dec 20 2006, 15:06) Код b ... Dec 20 2006, 16:30   Oldring Цитата(_Bill @ Dec 18 2006, 14:48) Ну, та... Dec 18 2006, 17:27 singlskv Цитата(Sergio66 @ Dec 18 2006, 12:47) Сто... Dec 18 2006, 16:11 Oldring Ответ прост. До тех пор, пока результат вычисления... Dec 18 2006, 19:38 singlskv Цитата(Oldring @ Dec 18 2006, 19:38) Отве... Dec 18 2006, 19:53 Dog Pawlowa Цитата(Oldring @ Dec 18 2006, 19:38) Отве... Dec 18 2006, 20:31  Oldring Цитата(Dog Pawlowa @ Dec 18 2006, 20:23) ... Dec 18 2006, 20:37  prottoss Цитата(Dog Pawlowa @ Dec 19 2006, 00:31) ... Dec 18 2006, 20:43   Oldring Цитата(prottoss @ Dec 18 2006, 20:43) Выр... Dec 18 2006, 21:14   singlskv Цитата(prottoss @ Dec 18 2006, 20:43) Выр... Dec 18 2006, 21:18   Dog Pawlowa Цитата(prottoss @ Dec 18 2006, 20:43) Вы ... Dec 19 2006, 09:49    Sergio66 [/quote]
Дуру? Отчасти
А на конкретный вопрос -... Dec 19 2006, 11:57     Oldring Цитата(Sergio66 @ Dec 19 2006, 11:57) Рез... Dec 19 2006, 14:44      Sergio66 Цитата(Oldring @ Dec 19 2006, 15:44) Цита... Dec 19 2006, 15:15       Dog Pawlowa Цитата(Sergio66 @ Dec 19 2006, 15:15) Да ... Dec 19 2006, 19:10     Dog Pawlowa Цитата(Sergio66 @ Dec 19 2006, 11:57) Был... Dec 19 2006, 19:24 Oldring Не совсем.
1. Включение оптимизации самой по себе... Dec 18 2006, 20:08 GDI Была у меня похожая проблема, правда, у меня порти... Dec 19 2006, 13:32 singlskv автар
продемонстрируйте свое искуство, так сказать... Dec 19 2006, 19:18 Oldring int расширяется до long до умножения. Потом должна... Dec 19 2006, 19:50 Sergio66 Цитата(Oldring @ Dec 19 2006, 19:50) int ... Dec 20 2006, 13:33  Oldring Цитата(Sergio66 @ Dec 20 2006, 13:33) 1. ... Dec 20 2006, 14:13 Serg79 Sergio66 Ты сдесь воду то не баламуть а приведи но... Dec 20 2006, 15:22 prottoss Пока Sergio66 молчит, задам я свой вопрос, потому ... Dec 20 2006, 16:15      prottoss Цитата(Oldring @ Dec 21 2006, 00:09) Ключ... Dec 20 2006, 20:23 Oldring Чтобы не напрягать попусту наши извилины скомпилир... Dec 20 2006, 18:57 prottoss Цитата(Oldring @ Dec 20 2006, 22:57) Чтоб... Dec 20 2006, 19:12 Oldring Замечательно, где еще прописывается значение Pulse... Dec 20 2006, 19:19 prottoss Цитата(Oldring @ Dec 20 2006, 23:19) Заме... Dec 20 2006, 19:26 Oldring Я конечно имел в виду дизассемблер, в котором изме... Dec 20 2006, 19:28 Oldring Да, не забудьте убедиться, что функция после преры... Dec 20 2006, 19:34 Oldring Пожалуйста, приведите два варианта кода отдельно -... Dec 20 2006, 20:28 prottoss Цитата(Oldring @ Dec 21 2006, 00:28) Пожа... Dec 20 2006, 20:43 Oldring Ну так а когда в нерабочем варианте вызывается фун... Dec 20 2006, 20:45 prottoss Цитата(Oldring @ Dec 21 2006, 00:45) Ну т... Dec 20 2006, 20:53 Oldring Только этот вариант все равно не должен компилиров... Dec 20 2006, 21:02 prottoss Цитата(Oldring @ Dec 21 2006, 01:02) Толь... Dec 21 2006, 17:09  Dog Pawlowa Цитата(prottoss @ Dec 21 2006, 17:09) Все... Dec 21 2006, 17:39   prottoss Цитата(Dog Pawlowa @ Dec 21 2006, 21:39) ... Dec 21 2006, 18:04    Dog Pawlowa Цитата(prottoss @ Dec 21 2006, 18:04) А в... Dec 21 2006, 18:44     prottoss Цитата(Dog Pawlowa @ Dec 21 2006, 22:44) ... Dec 21 2006, 19:02      defunct Цитата(prottoss @ Dec 21 2006, 19:02) Да ... Dec 21 2006, 20:33       Serg79 Цитата(defunct @ Dec 21 2006, 20:33) Насч... Dec 22 2006, 13:29       prottoss Цитата(defunct @ Dec 22 2006, 00:33) Цита... Dec 22 2006, 14:57        defunct Цитата(prottoss @ Dec 22 2006, 14:57) Что... Dec 22 2006, 16:20         Wild007 2 defunct
ЦитатаВы ставите в противовес JTAG... Dec 22 2006, 17:02         prottoss Цитата(defunct @ Dec 22 2006, 20:20) Цита... Dec 22 2006, 17:05          defunct Цитата(prottoss @ Dec 22 2006, 17:05) Чит... Dec 22 2006, 17:25  singlskv Цитата(prottoss @ Dec 21 2006, 17:09) Уве... Dec 21 2006, 19:47 WHALE [/quote]
В начале программы забивайте весь отведен... Dec 21 2006, 22:05 singlskv Цитата(WHALE @ Dec 21 2006, 22:05) Цитата... Dec 21 2006, 22:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|