Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Причем до закомментаренного цикла есть момент включения светодиода на длительное время: непосредственно перед for(i=0;i<15000000;i++);
Отправлено
mayn
10 июня 2007 г. 13:41
В ответ на:
Народ! Это какой-то бред, help! Почему следующая программа для LPC2148 работает, а если убрать закомментаренный код в конце, перестает работать. Никак не могу врубиться, плата становится как мертвая, светодиоды не загораются (+)
отправлено <font color=gray>mayn</font> 10 июня 2007 г. 13:34
Составить ответ
|
Вернуться на конференцию
Ответы
А если в последнем цикле заменить строчку 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 изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите 6 на два:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru