STM32F100RB@Keil VS AtMega8@CVAVR
- Zheleznjakov
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Сб июн 12, 2010 16:19:17
- Откуда: Россия, Томск
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
Нет ни каких резкостей, обычная беседа.
Чудеса бывают, но очень редко, нужно посмотреть ваш код, и попытаться найти причину.
К сожалению я могу проверить ваш код только с gcc.
Извините если обидел.
Чудеса бывают, но очень редко, нужно посмотреть ваш код, и попытаться найти причину.
К сожалению я могу проверить ваш код только с gcc.
Извините если обидел.
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Мой блог: http://ziblog.ru
- Реклама
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
у меня эти задержки как-бы пока не используются!
я просто так как говорил и Left Radio - выкидывает условие проверки порта! иза этого экран и колбасит....
я не спорю что это всё обходится разными обходными путями НО....наличие отладчика это большой плюс кейла...компактный код - это плюс иара....я пока остаюсь с кейлом...
я просто так как говорил и Left Radio - выкидывает условие проверки порта! иза этого экран и колбасит....
я не спорю что это всё обходится разными обходными путями НО....наличие отладчика это большой плюс кейла...компактный код - это плюс иара....я пока остаюсь с кейлом...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
Re: STM32F100RB@Keil VS AtMega8@CVAVR
clawham писал(а):наличие отладчика это большой плюс кейла...компактный код - это плюс иара....я пока остаюсь с кейлом...
наличие отладчика это не плюс кейла, это то, в чем он наравне с ИАРом.
рекомендую всетаки разобраться в теме поглубже, сенсаций станет поменьше.
Re: STM32F100RB@Keil VS AtMega8@CVAVR
используются или нет, но после таких ляпов дальше смотреть код и удивляться, на что ушло 20к флеша на моргание светодиода дело не благодарное.clawham писал(а):у меня эти задержки как-бы пока не используются!
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
@но после таких ляпов@
вы уж меня конечно извините но ..если мне надо поднимать систему таймеров прерыванаия настраивать и ДМА и везде писать прагма pop push и прагма но опт ради какой-то хреновенькой необязательной нерпинципиальной задержки - то мне нафик такое не надо...вот и всё эт просто моё личное предпочтение...не по моим задачам-потребностям-умениям-возможностям-времени это дело...
да и потом иар на выключенной оптимизации делает код Нерабочий туля на экран чтото лишнее! но код получается МЕНЬШЕ чем у кейла с максимлаьной оптимизацией...наверное чтото там внутрях не то...наверное в кейле-то тот же самый код один-в-один работает на любой оптимизации ВСЕГДА даже не смотря на такие пипец какие грубейшие ошибки
по сути получается что на арме нельзя поморгать светодиодом потому что deevysq компилер решил что это бесполезное дело и выкинул нахрен это бесполезное программо....помоему эт бред...
мне достаточно изучения самого процессора .... а чтоб ещё и с компилером воевать и его недокументированными особенностями....эт для меня лично перебор...
вот как ВЫ предлогаете в ИАРЕ написать правильно программу которая выдерживаент 1-9 микросекунд задержки и на любой оптимизации ПРАВИЛЬНО выполняетсЯ?
прошу код в студию...
точной нормальной задержки на 24 такта проца * на заданное число ...
я лично такой оптимизации не понимаю...это бред...ладно там посторяющиеся куски выносить в процедуру, ладно пустые циклы выкидывать....ладно параметры не сохранять при вызове процедуры...но...выкинуть ожидание поднятия ноги....каким таким правом? флаговые автоматы получается бесполезное дело? сравнение переменных изменяемых хардварно тоже херня? а чё ж тогда в проце не херня? и почему даже повыбрасывав эту всю херню неправильную он всёравно МЕЕЕДЛЕЕЕНННЕЕЕЕЕе на 10% чем такой же код так же само хреново написанный на том же железе исполняемый в кейле? почему кейл НИКОГДА не выбрасывает тупление в цикле ожидания поднятия ножки? почему пустые циклы когда выбрасывает - предупреждает?
что логичнее?
что из этих жвух вещею более юзер-френдли? помоему вполне очевидно...
вы уж меня конечно извините но ..если мне надо поднимать систему таймеров прерыванаия настраивать и ДМА и везде писать прагма pop push и прагма но опт ради какой-то хреновенькой необязательной нерпинципиальной задержки - то мне нафик такое не надо...вот и всё эт просто моё личное предпочтение...не по моим задачам-потребностям-умениям-возможностям-времени это дело...
да и потом иар на выключенной оптимизации делает код Нерабочий туля на экран чтото лишнее! но код получается МЕНЬШЕ чем у кейла с максимлаьной оптимизацией...наверное чтото там внутрях не то...наверное в кейле-то тот же самый код один-в-один работает на любой оптимизации ВСЕГДА даже не смотря на такие пипец какие грубейшие ошибки
по сути получается что на арме нельзя поморгать светодиодом потому что deevysq компилер решил что это бесполезное дело и выкинул нахрен это бесполезное программо....помоему эт бред...
мне достаточно изучения самого процессора .... а чтоб ещё и с компилером воевать и его недокументированными особенностями....эт для меня лично перебор...
вот как ВЫ предлогаете в ИАРЕ написать правильно программу которая выдерживаент 1-9 микросекунд задержки и на любой оптимизации ПРАВИЛЬНО выполняетсЯ?
прошу код в студию...
точной нормальной задержки на 24 такта проца * на заданное число ...
я лично такой оптимизации не понимаю...это бред...ладно там посторяющиеся куски выносить в процедуру, ладно пустые циклы выкидывать....ладно параметры не сохранять при вызове процедуры...но...выкинуть ожидание поднятия ноги....каким таким правом? флаговые автоматы получается бесполезное дело? сравнение переменных изменяемых хардварно тоже херня? а чё ж тогда в проце не херня? и почему даже повыбрасывав эту всю херню неправильную он всёравно МЕЕЕДЛЕЕЕНННЕЕЕЕЕе на 10% чем такой же код так же само хреново написанный на том же железе исполняемый в кейле? почему кейл НИКОГДА не выбрасывает тупление в цикле ожидания поднятия ножки? почему пустые циклы когда выбрасывает - предупреждает?
что логичнее?
что из этих жвух вещею более юзер-френдли? помоему вполне очевидно...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Реклама
Re: STM32F100RB@Keil VS AtMega8@CVAVR
С таким подходом целесообразно ставить BASIC, благо они есть, и не париться.
по сути - ключевое слово 'volatile' тебе чтото говорит ? одно слово заставило бы твои функции работать.
про 'вставить чтото не нужное' - вобще не понял что это и о чем.
далее, косая это задержка, не учитывающая время в прерываниях. Я бы задержки сделал используя кортексовский SysTick
просто кодить надо грамотно и все будет работать под любым компилером.
еще раз - учиться, учиться, учиться и практиковаться, а не пенять на компиляторы.
по сути - ключевое слово 'volatile' тебе чтото говорит ? одно слово заставило бы твои функции работать.
про 'вставить чтото не нужное' - вобще не понял что это и о чем.
далее, косая это задержка, не учитывающая время в прерываниях. Я бы задержки сделал используя кортексовский SysTick
просто кодить надо грамотно и все будет работать под любым компилером.
еще раз - учиться, учиться, учиться и практиковаться, а не пенять на компиляторы.
Re: STM32F100RB@Keil VS AtMega8@CVAVR
Покажи хоть одну недокументированную возможность ?clawham писал(а):. а чтоб ещё и с компилером воевать и его недокументированными особенностями....эт для меня лично перебор...
Пользуюсь 4 года каждый день IARовскими компиляторами под AVR, AVR32, ARM (ARM7TDMI, Cortex-M3) - чтото ни разу не обнаружил недокументированного. Чтоб не было того, что есть в документации бывало. Списывался со шведами - признавались в раздолбайстве. А вот что б было то, чего не обещано...
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
1)
ни в одной спецификации языка СИ нет упоминания про запрет использования пустых циклов!
2) ни в одной документации и спецификации языка не расписаны полезные и бесполезные действия которые не несут смысловой нагрузки и из результирующего файла будут выкинуты
3) нигде я не нашел в доках описалово того что именно будет выкинуто из программы и как этого избежать(кроме временного отключения оптимизации для кода прагмой)
4) я нигде не нашел описания механизма инициализации объявленных перемненых типа
int a=0;
точнее не нашел того что =0 может искоренняться а в переменной быть мусор из непроинициализированного регистра/памяти!!!
написал =0 значит ОНО ДОЛЖНО БЫТЬ РАВНО нулю ВВСЕГДА ... помоему это не подлежит сомнению вообще...
в с++ в вижуал студии есть на это дело варнинги что код не имеет смысла НО он его не исключает на любой оптимизации
думается что максрософтовцы всётаки стандарта придерживаются...в отличие от некоей группы человеков которые ради выделиться как классно экономится размер немного по-своему переосмыслили значения тех или иных конструкций языка!
на крайняк могли бы просто типа контроля MISRA всунуть которая бы просто браковала пустые циклы и т.д. но не втихаря ж выкинуть кусок кода!
и почему он медленнее?
ни в одной спецификации языка СИ нет упоминания про запрет использования пустых циклов!
2) ни в одной документации и спецификации языка не расписаны полезные и бесполезные действия которые не несут смысловой нагрузки и из результирующего файла будут выкинуты
3) нигде я не нашел в доках описалово того что именно будет выкинуто из программы и как этого избежать(кроме временного отключения оптимизации для кода прагмой)
4) я нигде не нашел описания механизма инициализации объявленных перемненых типа
int a=0;
точнее не нашел того что =0 может искоренняться а в переменной быть мусор из непроинициализированного регистра/памяти!!!
написал =0 значит ОНО ДОЛЖНО БЫТЬ РАВНО нулю ВВСЕГДА ... помоему это не подлежит сомнению вообще...
в с++ в вижуал студии есть на это дело варнинги что код не имеет смысла НО он его не исключает на любой оптимизации
думается что максрософтовцы всётаки стандарта придерживаются...в отличие от некоей группы человеков которые ради выделиться как классно экономится размер немного по-своему переосмыслили значения тех или иных конструкций языка!
на крайняк могли бы просто типа контроля MISRA всунуть которая бы просто браковала пустые циклы и т.д. но не втихаря ж выкинуть кусок кода!
и почему он медленнее?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
ну, похоже, под "ни одной" вы понимаете "я где-то немножко читал - там нету". ибо на самом деле все определено стандартом Си.clawham писал(а):1)
ни в одной спецификации языка СИ нет упоминания про запрет использования пустых циклов!
2) ни в одной документации и спецификации языка не расписаны полезные и бесполезные действия которые не несут смысловой нагрузки и из результирующего файла будут выкинуты
3) нигде я не нашел в доках описалово того что именно будет выкинуто из программы и как этого избежать(кроме временного отключения оптимизации для кода прагмой)
4) я нигде не нашел описания механизма инициализации объявленных перемненых типа
int a=0;
точнее не нашел того что =0 может искоренняться а в переменной быть мусор из непроинициализированного регистра/памяти!!!
написал =0 значит ОНО ДОЛЖНО БЫТЬ РАВНО нулю ВВСЕГДА ... помоему это не подлежит сомнению вообще...
1. пустые циклы и ничего не делающие участки кода удаляются ОПТИМИЗАТОРОМ - стандарт говорит, что ОПТИМИЗАТОР МОЖЕТ это делать - а делает или нет, это уже к докам на ОПТИМИЗАТОР. GCC делает однозначно.
2. см. п.1
3. volatile - волшебное слово, определено СТАНДАРТОМ Си, во всех мало-мальски нормальных книжках описано - как вы читали\, что не видели этого?
4. на сколько я в курсе, =0 может не работать для регистровых переменных. но по идее об этом должен быть варнинг или даже еррор. может, речь идет наоборот о неинициализированных переменных? вот с ними могут быть нюансы - но они все четко определены стандартом, и к чудесам обычно не приводят.
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: STM32F100RB@Keil VS AtMega8@CVAVR
Так никто ж не запрещает - делай пустые циклы.clawham писал(а):1)
ни в одной спецификации языка СИ нет упоминания про запрет использования пустых циклов!
язык тут непричем. оптимизатор, как правило, с описанием на языке высокого уровня не работает. оптимизирует либо промежутчный код, либо уже после буквальной трансляции в машинный код.2) ни в одной документации и спецификации языка не расписаны полезные и бесполезные действия которые не несут смысловой нагрузки и из результирующего файла будут выкинуты
выкидывает неиспользумый код, до которого не возможно дойти по ходу программы. Если действия кода статически определимы независимо от каких либо переменных и хода выполнения программы - вычисляющий кусок сразу заменяется результатов вычисления, что и произошло в твоем случае.
будет выкинуто все, что лишнее. прагмы это совсем крайнее средство которое ну ооочень редко когда нужно. все решается куда проще3) нигде я не нашел в доках описалово того что именно будет выкинуто из программы и как этого избежать(кроме временного отключения оптимизации для кода прагмой)
устал я писать общеизвестные истины.4) я нигде не нашел описания механизма инициализации объявленных перемненых типа
int a=0;
точнее не нашел того что =0 может искоренняться а в переменной быть мусор из непроинициализированного регистра/памяти!!!
написал =0 значит ОНО ДОЛЖНО БЫТЬ РАВНО нулю ВВСЕГДА ... помоему это не подлежит сомнению вообще...
почитай сначала какие нибудь самые азы темы - http://ru.wikipedia.org/wiki/%D0%9E%D0% ... %BA%D0%B0)
не в тему, но микрософтовцы стандарта как раз не придерживаются. Если почитаешь документацию - там много "ms vc specific". есть отдельная опция включения строго следования ANSI C. по умолчанию выключена.в с++ в вижуал студии есть на это дело варнинги что код не имеет смысла НО он его не исключает на любой оптимизации
думается что максрософтовцы всётаки стандарта придерживаются...
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
?))
не ну я не против конечно всего...
НО
какова ... после
в буффере МУСОР? и только при первом вызове..как вроде оно не вызывается вообще....
другой вопрос
откуда на 4-й строке "появляются" символы с кодом 0х00 и 0х01 сразу после кода
если очистка экрана это аппаратная функция самого экрана!
причём появляются только при выключенной оптимизации...
П.С. хочу увидеть правильный код задержки на 24 такта проца * на переданный параметр работающий на всех оптимизациях
хочу потому что я перепробывал всё что было в сети в т.ч. ассемблерные вставки и только прагмой я могу заставить их хоть как-то мало-мальски отрабатывать но это ж и вправду радикальная мера....
помоему чем учить архитектуру я буду изучать компилер и его тараканы....вместо проца и написания прошивки....тогда уж на асм идти..но для арма эт не актуально помоему вообще ниразу...
п.с. я не спорю что иар можно заставить нормально работать....впрочем запорожец тоже может бехи обгонять(при правильном моторе) ... но...мож как-то бэха таки сразу будет лючче...?
не ну я не против конечно всего...
НО
какова ... после
Код: Выделить всё
void bufinit()
{
char x;
char y;
unsigned char z;
z=0;
for(y=0; y<MAX_Height;y++)
{
for(x=0;x<MAX_X;x++)
{
DispBuf[y][x] = 0;
}
}
}другой вопрос
откуда на 4-й строке "появляются" символы с кодом 0х00 и 0х01 сразу после кода
Код: Выделить всё
lcd_clear();
for(x = 0;x<20;x++)
{
lcd_gotoxy(x, 2);
lcd_putchar(x);
}
причём появляются только при выключенной оптимизации...
П.С. хочу увидеть правильный код задержки на 24 такта проца * на переданный параметр работающий на всех оптимизациях
хочу потому что я перепробывал всё что было в сети в т.ч. ассемблерные вставки и только прагмой я могу заставить их хоть как-то мало-мальски отрабатывать но это ж и вправду радикальная мера....
помоему чем учить архитектуру я буду изучать компилер и его тараканы....вместо проца и написания прошивки....тогда уж на асм идти..но для арма эт не актуально помоему вообще ниразу...
п.с. я не спорю что иар можно заставить нормально работать....впрочем запорожец тоже может бехи обгонять(при правильном моторе) ... но...мож как-то бэха таки сразу будет лючче...?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
Re: STM32F100RB@Keil VS AtMega8@CVAVR
Сравнение не верное.clawham писал(а): п.с. я не спорю что иар можно заставить нормально работать....впрочем запорожец тоже может бехи обгонять(при правильном моторе) ... но...мож как-то бэха таки сразу будет лючче...?
Не надо иар заставлять работать. в данном случае то, что работает хоть под кейлом - это чудо как результат удачного стечения обстоятельств.
только сменой водителя, как в случае с компилерами, запор беху обгонять не начнет -))
твоя эта функция заработает (кстати. нафига a=0 два раза подряд ?) как ты планировал.
void delay_us(int Dly)
{
int a=0;
for(a=0;a<Dly;a++)
{
}
}
просто сделать так;
void delay_us(int Dly)
{
volatile int a;
for(a=0;a<Dly;a++)
{
}
}
или лучше всего так:
void delay_us(int Dly)
{
volatile int a = Dly+1;
while(--a) ;
}
тут цикл выполняется за 4 такта, а твой за 6.
Последний раз редактировалось Satyr Ср июн 29, 2011 12:40:47, всего редактировалось 3 раза.
Re: STM32F100RB@Keil VS AtMega8@CVAVR
Где какие тараканы ?clawham писал(а): помоему чем учить архитектуру я буду изучать компилер и его тараканы....вместо проца и написания прошивки....тогда уж на асм идти..но для арма эт не актуально помоему вообще ниразу...
Тут пока проблема в не знании самых азов языка C и представления как работают компиляторы. БЕЗ каких либо особенностей какого то конкретного компилятора.
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
а я ужо дома и волатилы расставлял и просто 14 циклов вайлом ждал и не инициализировал два раза подряд..ну эта что на серваке версия таковой полцучилась..так он на макс оптимизации не всё выбрасывает и в переменной не мусор!
а на волатилу он тож плюёть...
а на волатилу он тож плюёть...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
я так понимаю, volatile для локальной переменной - это нонсенс, т.к. локальная переменная вне контекста функции не существует и не может быть изменена "непредвиденно". поэтому volatile надо ставить для глобальных переменных.clawham писал(а):а на волатилу он тож плюёть...
ну а если компилятор и глобальные volatile будет игнорировать - фтопку такой компилятор, имхо!
задержки на нужное число машинных тактов надо делать на ассемблере и подключать затем к проекту, имхо. тогда никаких "выкидываний пустых циклов" не будет однозначно.
P.S. беру свои слова на счет нонсенса обратно - ошибался. проверка в GCC показала, что отнюдь не нонсенс: видимо, volatile уже обозначает не "элемент, который может быть изменен неизвестным компилятору способом", а просто "элемент, который игнорировать оптимизитором". правда, это поять же мои личные домыслы.
Последний раз редактировалось Мастер Ломастер Ср июн 29, 2011 13:00:10, всего редактировалось 1 раз.
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: STM32F100RB@Keil VS AtMega8@CVAVR
Несовсем так. Посмотри описание функции longjmp(), там есть намек.Мастер Ломастер писал(а):я так понимаю, volatile для локальной переменной - это нонсенс, т.к. локальная переменная вне контекста функции не существует и не может быть изменена "непредвиденно".clawham писал(а):а на волатилу он тож плюёть...
Re: STM32F100RB@Keil VS AtMega8@CVAVR
Для начала, пусть кто-нибудь покажет такой компилятор из более менее распространенных и не первый год существующих -))Мастер Ломастер писал(а): ну а если компилятор и глобальные volatile будет игнорировать - фтопку такой компилятор, имхо!
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
и всёже могу я попросить правильно написанную функцию задержки на 1 микросекунду не на таймерах!
мне нужно МИНИМУМ 1 микросекунду...дольше - ради бога хоть в два раза....
это не точная функция выдержки для 1wire например .... эт просто для экрана...она впринципе и не нужна...на 24 мегагерцах экран успевает....а на 48-ми - уже нет....
мне нужно МИНИМУМ 1 микросекунду...дольше - ради бога хоть в два раза....
это не точная функция выдержки для 1wire например .... эт просто для экрана...она впринципе и не нужна...на 24 мегагерцах экран успевает....а на 48-ми - уже нет....
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
Re: STM32F100RB@Keil VS AtMega8@CVAVR
при 24мхз это будет, видимо, так. чуть чуть больше 1мксclawham писал(а):и всёже могу я попросить правильно написанную функцию задержки на 1 микросекунду не на таймерах!
void delay_1us()
{
volatile int a = 7;
while(--a) ;
}
при 48 соотв не 7, а 13
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: STM32F100RB@Keil VS AtMega8@CVAVR
я делал не так(ибо мне надоть ещё и задавать кол-во мкс.....но....посути вроде и атк делал...попробую ещё один-в-один как Вы написали....посмотри 
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.


