Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Народ! Это какой-то бред, help! Почему следующая программа для LPC2148 работает, а если убрать закомментаренный код в конце, перестает работать. Никак не могу врубиться, плата становится как мертвая, светодиоды не загораются (+)
Отправлено
mayn
10 июня 2007 г. 13:34
int main()
{
unsigned long i;
MAMTIM=0x03;
MAMCR=0x02;
PLL0CFG=0x24;
PLL0CON=0x01;
PLL0FEED=0xAA;
PLL0FEED=0x55;
while(!(PLL0STAT&0x400));
PLL0CON=0x03;
PLL0FEED=0xAA;
PLL0FEED=0x55;
while(!(PLL0STAT&0x400));
VPBDIV=0x01;
IO0DIR=0x00000C00;
IO0SET=0x00000800;
IO0CLR=0x00000400;
for(i=0;i<15000000;i++);
IO0SET=0x00000400;
IO0CLR=0x00000800;
IO0DIR=0x00003C00;
/*for(i=0;1;i++)
{
if((i%0x80)==0)
{
IO0SET=0x00001000;
IO0CLR=0x00002000;
DACR=(DACR+0x00000040)&0x0000FFC0;
IO0SET=0x00002000;
IO0CLR=0x00001000;
}
}*/
}
Составить ответ
|
Вернуться на конференцию
Ответы
ТЕМА ЗАКРЫТА (до новых глюков, шутка :) Если кому еще интересно, ниже указан ящик, где лежит неработающий проект
—
mayn
(10.06.2007 16:25:47
87.245.133.8
,
пустое
)
Насчет глючит.. Как компилятор должен понять i%0x80, если i - unsigned long? Как i % 0x80000000 или как i% 0x00000080?
—
=L.A.=
(10.06.2007 15:24:40
213.134.214.10
, 183 байт,
ссылка
)
Ты, видать, глянул на уличный термометр, увидел там +18, решил, что это +180 и срочно перегрелся. КАКОЙНАХ 0х80000000, если написано 0х80???? Кто тебе дал право добавлять нули ПОСЛЕ значащих цифр?
—
=AVR=
(10.06.2007 15:29:56
80.92.96.19
,
пустое
)
Хе... Я про компилятор, а этот - про термометр.... Я умею читать цифры и буквы, так штаа меня не лечи.
—
=L.A.=
(10.06.2007 15:35:42
213.134.214.10
,
пустое
)
Не, ну 0x01 или 0x1 это всегда 1, в любых примерах, хоть от Keil, хоть от кого, так
—
mayn
(10.06.2007 15:39:9
87.245.133.8
,
пустое
)
Зато в примерах от =L.A.= - это две большие разницы :) :) :))
—
=AVR=
(10.06.2007 15:42:9
80.92.96.19
,
пустое
)
повторяю - ты стек настроил ?
—
DASM
(10.06.2007 15:40:26
212.58.192.14
,
пустое
)
Не настраивал. Скажи, плиз, как. Быстро у меня самого не получится разобраться
—
mayn
(10.06.2007 15:52:2
87.245.133.8
,
пустое
)
см ниже
—
DASM
(10.06.2007 15:56:6
212.58.192.14
,
пустое
)
Все равно пока не работает. Заменил % на аналогичную запись с & - тоже не работает
—
mayn
(10.06.2007 16:04:19
87.245.133.8
,
пустое
)
Если закомментированый кусок и его наличие влияет на работу программы то это ОДНОЗНАЧНО глюк компилятора
—
avr123.nm.ru
(10.06.2007 15:11:6
83.167.116.97
,
пустое
)
Хотя действительно, только щас перепроверил: с циклом ничего не загорается(загораться должно до цикла), без цикла все работает
—
mayn
(10.06.2007 15:17:57
87.245.133.8
,
пустое
)
а ты отладочное средство купил ? ;-) Глянул бы, где вылетаешь. % стека кушает - он у тебя настроен ?
—
DASM
(10.06.2007 15:21:13
212.58.192.14
,
пустое
)
Пока у меня еще нет отладочного средства :), загружаю flash через COM с помощью филипсовской проги.
—
mayn
(10.06.2007 15:37:27
87.245.133.8
,
пустое
)
это скучно, JTAG на первых порах очень полезная вещь. Да и не на первых очень полезная :-)
—
DASM
(10.06.2007 15:38:37
212.58.192.14
,
пустое
)
Да я плату купил только в четверг :-), причем по работе, не за свои деньги, чтобы перейти на новый уровень, так сказать :) Раньше программировал (не по работе) плату с AT89C5131, загружал во флеш через USB, все нормально было. Думал, что поначалу и с этой платой так буду делать. Да и JTAG эмулятор, хоть и небольших, но денег стоит(не своих :)
—
mayn
(10.06.2007 15:43:18
87.245.133.8
,
пустое
)
ну смотри, 70 баксов дешевле нервов и времени
—
DASM
(10.06.2007 15:43:55
212.58.192.14
,
пустое
)
Согласен. Но не всегда удается это объяснить начальнику
—
mayn
(10.06.2007 15:52:44
87.245.133.8
,
пустое
)
вообще делай не так. Открывай примеры в Кейле есть, запускай готовое, потом выкидывай из них все ненужное и вставляй свой код. Вернее будет
—
DASM
(10.06.2007 15:23:3
212.58.192.14
,
пустое
)
глюки тут вы все
—
DASM
(10.06.2007 15:12:44
212.58.192.14
,
пустое
)
Ужас нах, за такое "произведение" пожизненно запретить программить.
—
_ARM_
(10.06.2007 14:16:20
83.237.10.87
,
пустое
)
Имею большой опыт программирования, только не для микроконтроллеров. Программа тестовая, когда вдруг перестала работать, стал вносить изменения, чтобы разобраться, стала немного корявой. И дураку ясно, что это даже не каркас для нормальной программы.
—
mayn
(10.06.2007 14:56:34
87.245.133.8
,
пустое
)
да не слушай ты пердунов, скажи лучше чего не работает и что хотел получить ?
—
DASM
(10.06.2007 14:58:29
212.58.192.14
,
пустое
)
Ну, вообще, у меня в последнем цикле подается сигнал на пищалку, а на ЦАП должна подаваться пила(только я не изменил конфигурацию пина, как я понимаю). Строчкой if((i%n)==0) я хотел сделать выборку только каждого n-го шага цикла. Немного коряво конечно, но я думал заработает. А дело наверно в том, как Keil транслирует операцию %, да?
—
mayn
(10.06.2007 15:08:43
87.245.133.8
,
пустое
)
Так может просто добавить дополнительный каунтер который считает до 128? Всякие хитрые записи как раз и есть почва для глюков. Вот недавно был вопрос по приращению индекса в команде типа a = b[c++];
—
=L.A.=
(10.06.2007 15:41:57
213.134.214.10
,
пустое
)
не надо дополнительных каунтеров, не парьте мозги нормальному сишнику
—
DASM
(10.06.2007 15:43:13
212.58.192.14
,
пустое
)
Да у него мозги сами парятся, я тут ни при чем.
—
=L.A.=
(10.06.2007 15:46:29
213.134.214.10
,
пустое
)
в первые дни с процем неудивительно
—
DASM
(10.06.2007 15:47:10
212.58.192.14
,
пустое
)
вот я и предлагаю безграбельный вариант, компиляторонезависимый. А когда всё зафункционирует, можно и поизвращать прогу.
—
=L.A.=
(10.06.2007 15:50:31
213.134.214.10
,
пустое
)
во-во, DAC включить вначале надо, через PINSEL
—
DASM
(10.06.2007 15:11:56
212.58.192.14
,
пустое
)
Хотя нет, что я говорю, в том то и проблема, что у меня до этого цикла (при его наличии) не загораются светодиоды
—
mayn
(10.06.2007 15:14:10
87.245.133.8
,
пустое
)
тогда исправь всякие 0x8fc0 на (1<<X) | (1 << Y) ибо программер я хреновый, и в голве hex бинарно не вижу. И заоодно глянь, на каких пинах у тебя светодиоды - может ты на i2C ноги попал ?
—
DASM
(10.06.2007 15:17:30
212.58.192.14
,
пустое
)
И тебе жид пархатый здрастье :)
—
_ARM_
(10.06.2007 15:05:2
83.237.10.87
,
пустое
)
пшел нахуй придурок
—
DASM
(10.06.2007 15:06:39
212.58.192.14
,
пустое
)
В честь светлого праздничка туесосов из дурдомов на побывку выпустили
—
=AVR=
(10.06.2007 15:26:39
80.92.96.19
,
пустое
)
Много чести для птиц залетных :)
—
_ARM_
(10.06.2007 15:33:11
83.237.10.87
,
пустое
)
это ведь три дня только, а что в НГ будет ? А билетов на НГ уже тю-тю :-( Вернее есть, но выше 2 K :-(
—
DASM
(10.06.2007 15:29:31
212.58.192.14
,
пустое
)
Ничего, зато к выборам нового Путина их всех опять закроют - будут резерв электората создавать на всякий случай :)) А билеты - ерунда, поищи кривые, с пересадками - может выйти весьма бюджетно
—
=AVR=
(10.06.2007 15:33:9
80.92.96.19
,
пустое
)
Ты первый начал нац. меньшинство :)
—
_ARM_
(10.06.2007 15:07:21
83.237.10.87
,
пустое
)
Патамушта точку с запятой надо было ставить и в конце for, и в конце if
—
=AVR=
(10.06.2007 13:44:53
80.92.96.19
,
пустое
)
На кой? :-)
—
-=ВН=-
(10.06.2007 14:02:9
193.125.71.140
,
пустое
)
Вот и я думаю - а на кой, если все равно не работает :))
—
=AVR=
(10.06.2007 14:04:41
80.92.96.19
,
пустое
)
Почему? Это так что ли??? Повторюсь, что если здесь не 0x80, а 0x1000, то все работает(+)
—
mayn
(10.06.2007 13:50:46
87.245.133.8
, 181 байт)
Кстати, с любыми точками с запятой не работает:(
—
mayn
(10.06.2007 13:59:0
87.245.133.8
,
пустое
)
Причем до закомментаренного цикла есть момент включения светодиода на длительное время: непосредственно перед for(i=0;i<15000000;i++);
—
mayn
(10.06.2007 13:41:31
87.245.133.8
,
пустое
)
А если в последнем цикле заменить строчку if((i%0x80)==0) на if((i%0x1000)==0), то все работает!! Начинаю думать, что Keil глючит, но пока в машинных командах разбираться еще неохота
—
mayn
(10.06.2007 13:48:20
87.245.133.8
,
пустое
)
Просто вопрос. Эти знаком процента % вы каких действий хотели добиться от программы?
—
Elektronik
(10.06.2007 14:18:55
89.110.10.45
,
пустое
)
Что непонятно то?? i%0x80 - остаток от деления на 0x80. Чтобы делать то, что в if, только при каждом 128м повторении цикла. Это только тестовая программа, смысла особого она не имеет. Я задаю конкретный вопрос. Не в % же здесь дело.
—
mayn
(10.06.2007 14:48:9
87.245.133.8
,
пустое
)
В Бордюрии этим значком выклянчивают остаток от деления на. А в Поребрии что - порцию шавермы?
—
=AVR=
(10.06.2007 14:25:31
80.92.96.19
,
пустое
)
Я это прекрасно знаю. Такие команды компилятор може запросто заоптимизировать. Если есть такая переменная в долгоживущем алгоритме, то ее обязательно надо объявлять volatile
—
Elektronik
(10.06.2007 15:11:51
89.110.10.45
,
пустое
)
Заменил if((i%0x80)==0) на if((i&0x7F)==0) (что должно быть то же самое), тоже не работает
—
mayn
(10.06.2007 16:02:10
87.245.133.8
,
пустое
)
Да и много почему еще может заоптимизировать, например если внешний цикл короче условия. Да и менять может где-то еще эта i. Так что я думаю здесь не глюк компилятора, а банальный глюк программиста, который всего текста программы не привел.
—
Elektronik
(10.06.2007 15:14:17
89.110.10.45
,
пустое
)
Это и есть вся программа. Урезал, чтобы понять почему не работает. !!Что самое интересное, щас кое-что закомментарил, загрузил, снял комментарии, снова откомпилил, снова загрузил: ЗАРАБОТАЛО !?! Это компилятор, по-моему, глючит. Поскольку у меня Keil ARM не было, я скачал с keil.com последнюю версию. Может она и глючная...
—
mayn
(10.06.2007 15:27:17
87.245.133.8
,
пустое
)
нет. не верю. Проверяй стек и подобные вещи. А лучше пример готовый правь
—
DASM
(10.06.2007 15:28:21
212.58.192.14
,
пустое
)
А, нет, пардон. Это у меня с 0х1000 заработало, а с 0х80 так и не работает. Не буду катить на Keil. Единственное, он может чуть переоптимизировал :), буду разбираться с машинными командами. А насчет примера - полезный совет, я так частенько и делаю, только такие вот мелочи, как эта, все равно будут всплывать в своей, довольно большой, программе
—
mayn
(10.06.2007 15:34:50
87.245.133.8
,
пустое
)
пришли - выложи проект куда-нить, гляну 20 мин есть
—
DASM
(10.06.2007 15:36:7
212.58.192.14
,
пустое
)
Щас выложу. Смотри на ящике mayn_svalka@mail.ru с паролем qwerty в черновиках
—
mayn
(10.06.2007 15:48:18
87.245.133.8
,
пустое
)
в строке SVC_Stack_Size EQU 0x00000008 поставь 0x800 например вместо 8 =))
—
DASM
(10.06.2007 15:54:15
212.58.192.14
,
пустое
)
Да уж, что-то маленький у меня был размер стека:) Только пока все равно не работает еще
—
mayn
(10.06.2007 15:58:27
87.245.133.8
,
пустое
)
поставь в опциях проекта галкку Use memory layout from dialog - у тебя сейчас стартап вообще игнорируется
—
DASM
(10.06.2007 16:06:18
212.58.192.14
,
пустое
)
Точно! Все заработало. Правильно я понимаю, что startup - это код в младших адресах, в котором выполняется загрузка, а у меня был тот, который был еще при покупке платы?
—
mayn
(10.06.2007 16:17:37
87.245.133.8
,
пустое
)
тот который был ты уже давно стер. А при загрузке там по одному из векторов прошивалка ставит контрольную сумму, в итоге нужный код портится. Иногда может и работать, если после кучи абортов таки попадет на нужный адрес
—
DASM
(10.06.2007 16:20:8
212.58.192.14
,
пустое
)
Пока я это только приблизительно понял, потом обязательно разберусь. СПАСИБО ОГРОМНОЕ за реальную помощь! :)
—
mayn
(10.06.2007 16:23:20
87.245.133.8
,
пустое
)
Или во входящих
—
mayn
(10.06.2007 15:49:50
87.245.133.8
,
пустое
)
эта переменная входит в управление циклом с переменными IO - они и так volatile. Компилятор такое оптимизировать не будет
—
DASM
(10.06.2007 15:13:59
212.58.192.14
,
пустое
)
Вот когда вы будете думать что компилятор глючит после того, как разберетесть в машинных командах - тогда и программы ваши будут работать без мистики.
—
Сергей Борщ
(10.06.2007 14:07:44
217.198.224.239
,
пустое
)
Не проблема разобраться, только на первый взгляд программа правильная. Все надеюсь услышать конкретный ответ, в связи с чем она может не работать.
—
mayn
(10.06.2007 14:51:3
87.245.133.8
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 234:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru