|
|
  |
Непонятки со 128 мегой |
|
|
|
Jan 28 2011, 10:18
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(XVR @ Jan 28 2011, 13:01)  Разницу между операциями '!' и '~' представляете? Делая Y &= !(1<<x) вы сбрасываете в 0 все биты Y вне зависимости от значения x Понимаю, именно поэтому написано не != а &= !_BV В конце концов он делает именно то что нужно - ВЫКЛЮЧАЕТ, а все биты или нет не важно, ибо больше ничего полезного на этом порту не висит Лан, с этим проехали, я попробовал так как "положено" делать, ничего не изменилось Цитата(XVR @ Jan 28 2011, 13:01)  А вы в курсе, что произойдет, когда завершится main()? Нет, не в курсе, с МК я действительно не очень близок, но выше уже писал, что если есть while(1) то перезапуск при любом вызове изнутри него Цитата(XVR @ Jan 28 2011, 13:01)  Не тех, кто задает вопросы, а тех, кто игнорирует ответы с указаниями на банальнейшие и очевидные ошибки с аргументацией - 'всегда так пишу и у меня всегда это работает'. Я попробовал ваши советы, прежде чем отрицать, положительного результата нет к сожалению Цитата(XVR @ Jan 28 2011, 13:01)  И это сильно подрывает веру в заявления типа 'Я свободно пишу на c++, c#, delphi, sh, perl и php' (а в совокупности с фразой 'Может я конечно действительно неправильно применяю то что знаю, именно к микроконтроллерам,' применительно к разнице между '!' и '~' вообще вызывает сомнения в профпригодности это написавшего как программиста, если он конечно не Индус и пишет не на Java) А я и не говорил что я профессиональный программист, я вообще нач.тех. отдела и работаю в основном с людьми и с бумажками, но пишу на каждом из этих языков уже лет 7 как минимум, но это тоже в общем не решает проблему (((
|
|
|
|
|
Jan 28 2011, 11:14
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(zltigo @ Jan 28 2011, 13:56)  Вы тогда видимо еще и "свободно пишите" на нескольких десятках языков народов мира, только это "не решает проблему" того, что Вас никто при этом не понимает  . Придется Вам начинать с азов. Еще один учитель выискался, дорогуша, персонально для вас повторяю, я попробовал все те варианты и советы которые мне уже дали на форуме. Проблема осталась. Лично ваши глубокомысленные каменты можете оставить при себе, а в топик только по существу пожалуйста. У меня все в порядке с головой и с программирование, я не хочу выпендриваться, но это я первый человек в снг и второй в мире который в 2000 лохматом году хакнул все ресурсные файлы от HMM IV и дал возможность писать моды. Конструктив пожалуйста, куда ткнуть, что замерить, какой код для теста попробовать.
Сообщение отредактировал AlexTech - Jan 28 2011, 11:21
|
|
|
|
|
Jan 28 2011, 11:39
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Палыч @ Jan 28 2011, 13:17)  Интересно: что по Вашему мнению произойдёт? Неизвестно что. Целиком зависит от примененного компилятора и библиотек (точнее от стартапа). Стандарта на это нет, так что и полагаться на это нельзя. Цитата Во всех известных мне трансляторов с языка Си: после выхода из main выполняется бесконечный цикл. Бывают и другие. Могут зациклить main, могут сбросить процессор, могут позвать какой нибудь trap. Вот прямо сейчас смотрю на newlib для ARM - зовет Angel монитор (аппаратный), или выполняет swi (Software Interrupt) Цитата(AlexTech @ Jan 27 2011, 21:43)  Мега 128 16MOU, между ногами РА2(AD2) и PA3(AD3) и минусом подключены светодиоды, делаю так: DDRA |= _BV(PA2); PORTA |= _BV(PA2); зажигается один светодиод, потом в течении секунд примерно 15 плавно разгорается второй, сбросом и выключением питания не лечится - горят оба. А что стоит в 3м бите DDRA ? Он случайно не на ввод запрограммирован?
|
|
|
|
|
Jan 28 2011, 11:53
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(zltigo @ Jan 28 2011, 14:34)  Без наличия головы на плечах даже "первому человеку в снг" не поможет  . Тут думать И ХОТЬ ЧЕГО-ТО ЗНАТЬ надо, а не бездумно битики подбирать. Я пытаюсь, читаю и спрашиваю совета(кстати) Цитата(Палыч @ Jan 28 2011, 14:36)  Ну, так вроде, - "мяч на вашей стороне". Или предлагаете заняться телепатией? Попробую "протелепатировать": напряжение на AVCC не забыли подвести? Не забыл )) и AREF через конденсатор не забыл на минус посадить Цитата(XVR @ Jan 28 2011, 14:39)  А что стоит в 3м бите DDRA ? Он случайно не на ввод запрограммирован? Ну во всяком случае я его не программировал, вот весь код который сейчас есть, ну куда проще то (( Соответственно три состояния: 1. while(1) нету - лед мигает, видимо перезапуск main() 2. while(1) есть, но пустой, лед гаснет, все ок 3. while(1) есть, но в нем вызавается любая процедура - лед мигает, перезапуск или МК или main() #include <avr/io.h> #include <util/delay.h> int main(void) { DDRA |= _BV(PA2); _delay_ms(2000); PORTA |= _BV(PA2); _delay_ms(2000); PORTA &= ~_BV(PA2); поставил тильду как сказали //while(1){ asm volatile ("NOP" :  ; } return 0; } В случае когда разгорается второй лед он еще проще, выключение выкинуто
Сообщение отредактировал AlexTech - Jan 28 2011, 11:58
|
|
|
|
|
Jan 28 2011, 12:31
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (AlexTech @ Jan 28 2011, 13:53)  1. while(1) нету - лед мигает, видимо перезапуск main() Вероятно по собаке. QUOTE (AlexTech @ Jan 28 2011, 13:53)  3. while(1) есть, но в нем вызавается любая процедура - лед мигает, перезапуск или МК или main() Фуз M103C - ОЗУ расположено по другим адресам, стек в него не попадает, со стека читается мусор. QUOTE (AlexTech @ Jan 28 2011, 12:18)  В конце концов он делает именно то что нужно - ВЫКЛЮЧАЕТ, а все биты или нет не важно, ибо больше ничего полезного на этом порту не висит А второй светодиод?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 28 2011, 13:10
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(Сергей Борщ @ Jan 28 2011, 15:31)  А второй светодиод? Да фиг с ним, с одним бы разобраться, кстати надо заметить что моя неправильная "&= !_BV" не мешает управлять силовиками на другой плате абсолютно раздельно, так что нифига не 0 туда пишется, напутали что то знайки, правда там тинка26 Цитата(Палыч @ Jan 28 2011, 15:42)  От fuse M103C изменяется распределение памяти (memory map, см. рис. 9 в DS). Компилятор распределяет стек в несуществующую память - поэтому без бесконечного цикла (при выходе из процедуры main) идёт перезапуск (стека то - нет реально: выбирется адрес возврата со значением = единицы во всех разрядах и после выполнения команды по этому адресу - следующая команда = 0 - переполнение указателя команд); то же происходит и при вызове процедуры из while(1){} (точнее при возврате из процедуры). Да я прочитал что это за фьюэ, спасибо, надо обязательно проверить, но вечером... вот схемка если что...
Сообщение отредактировал AlexTech - Jan 28 2011, 13:14
Эскизы прикрепленных изображений
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|