|
|
  |
Вопросы по scmRTOS |
|
|
|
Jun 23 2009, 10:19
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(ReAl @ Jun 23 2009, 12:42)  Хм. В коде всё нормально. Версия avr-gcc - значение опции MAKE_SMALLEST_HEX в makefile - размер кода/данных - работа в макете с atmega168@intRC8MHz (опция MAKE_SMALLEST_HEX для 20060421 работает, так как у себя я заменил этой версии ldscripts на более новые с KEEP() для нужных секций). Именно 20080610 у меня на компьютере нет и лень ставить. Прикладываю всё кучей аж с листингами, архив всё равно небольшой. Попробуйте сверить ключи компилятора, хотя у меня ничего такого особого не прописано. Спасибо. Ваш hex попробуем. Посмотрим на мейк. Скомпилировал в 2007. Вечером проверю. Доложу. Кстати, а оптимизация не может негативно влиять? У вас, я смотрю, оптимизация совсем никакая: опция OPT = -Os  И ещё по поводу стандарта. У вас -std=c++98, у меня не знаю что Code::Blocks компилятору подсовывает
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 23 2009, 10:44
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(n_bogoyavlensky @ Jun 23 2009, 13:19)  Кстати, а оптимизация не может негативно влиять? У вас, я смотрю, оптимизация совсем никакая: опция OPT = -Os  Самая правильная оптимизация для AVR Вот за всякие дополнительные ручки по поводу лимита размера для inline и тому подобное - да, не дёргаю. И так не плохо. Не думаю, что -O2 должна сильно поменять ситуацию. Цитата(n_bogoyavlensky @ Jun 23 2009, 13:19)  И ещё по поводу стандарта. У вас -std=c++98, у меня не знаю что Code::Blocks компилятору подсовывает  Там оно вроде бы закомментировано, так что будет использоваться умолчание (gnu++98 для С++)
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 23 2009, 12:03
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(ReAl @ Jun 23 2009, 14:44)  Самая правильная оптимизация для AVR Вот за всякие дополнительные ручки по поводу лимита размера для inline и тому подобное - да, не дёргаю. И так не плохо. Не думаю, что -O2 должна сильно поменять ситуацию. Виноват, буковку "s" не заметил. Я сегодня совсем сплю  Кстати, посмотрел на описание оптимизации (перевод книги по GCC), там, вроде бы, часть флагов компилятора для разных режимов оптимизации смешивается... Допустим, -Os включает -O3 и добавляет свои флаги... -O3 включает -O2 и добавляет свои флаги... -O2 включает -O и добавляет свои флаги... А -O1 и -O вообще одно и то же... Т. е., получается, что совместно использовать, например -O2 и -Os смысла никакого нет, т. к., -Os включает -O2 и добавляет свои флаги? Кстати, опции -Oi фактически являются "обёртками", которые указывают на включение других дополнительных опций, как я понял? Цитата Там оно вроде бы закомментировано, так что будет использоваться умолчание (gnu++98 для С++) Ага, этого я тоже не заметил... Ещё вопросы... ISR вызывается в контексте того процесса, который выполнялся при возникновении прерывания? Как я понимаю, оптимальное содержимое ISR - инструкция перевода какого-либо эвента в сигнальное состояние? А если в ISR модифицируются глобальные объекты, которые модифицируются так же в одном из процессов (или в нескольких), то необходимо использовать средства синхронизации для доступа к этим объектам (критические секции, семафоры)? Причём, внутри ISR прерывания запрещены всегда и получается, что критические секции в ISR использовать бессмысленно, а семафоры вообще противопоказано... и средства синхронизации нужно использовать вне ISR в процессах, работающих с нашим глобальным объектом? Помогите разобраться, пожалуйста, а то в голове каша
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 23 2009, 19:16
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Откомпилировал в WinAVR 2007 - не работает. Откомпилировал в WinAVR 20090313 - не работает. То, что Вы прислали - тоже не работает!  Может, конечно, Proteus глючит... нету сейчас железки под руками проверить... Странно. Займусь сверкой ключей... А Вы в выложенной мною программе ничего не меняли? В протеусе я вижу на PC1 сигнал со скважностью отличной от двух... очень отличной. А на PC2 - вообще нуль... А Вы когда смотрели осциллографом видели на обоих выводах какие сигналы?
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 23 2009, 20:21
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Огромная просьба, если Вас не затруднит, то проверьте, пожалуйста, на своём макете работу той же программы, откомпилированной у меня (файл Prob.elf.hex). Так мы и моё компилирование проверим и протеус... ATmega168. 8000000 MHz. WinAVR20090313.
Сообщение отредактировал n_bogoyavlensky - Jun 23 2009, 20:22
Прикрепленные файлы
Prob2.zip ( 7.92 килобайт )
Кол-во скачиваний: 24
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 24 2009, 16:43
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(n_bogoyavlensky @ Jun 23 2009, 22:16)  То, что Вы прислали - тоже не работает!  Ну не знаю... Цитата(n_bogoyavlensky @ Jun 23 2009, 22:16)  А Вы в выложенной мною программе ничего не меняли? Я же прицепил полный проект, который я собирал. Не менял ничего, только приложил рядом сам scmRTOS и свои make-файлы Цитата(n_bogoyavlensky @ Jun 23 2009, 22:16)  А Вы когда смотрели осциллографом видели на обоих выводах какие сигналы?  Меандры около 20мс и 60мс длительности уровня. 8MHz int RC в качестве тактирования. На время прошивки очередного варианта они пропадали :-) Цитата(n_bogoyavlensky @ Jun 23 2009, 23:21)  Огромная просьба, если Вас не затруднит, то проверьте, пожалуйста, на своём макете работу той же программы, откомпилированной у меня (файл Prob.elf.hex). Ой, а это нескоро. С выходных до следующих выходных я уезжаю, а до этого не до того.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 24 2009, 16:54
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(ReAl @ Jun 24 2009, 20:43)  Ой, а это нескоро. С выходных до следующих выходных я уезжаю, а до этого не до того. Спасибо Вам большое за помощь!  Нашёл железку. В четверг обязательно на ней сам проверю. Скорее всего это глюки протеуса. О результатах напишу...
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 25 2009, 07:06
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Проверил в железе. ATmega48P, 20 МГц, оба способа передачи управления. Работает замечательно. Обидно, что Proteus меня подвёл...  Побегу жаловаться ReAL, это опции линкера, как я понял (из вашего мейка)? Цитата LDFLAGS += -Wl,--gc-sections LDFLAGS += -Wl,--relax А зачем -Wl два раза указан?
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 25 2009, 07:22
|

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

|
Цитата(n_bogoyavlensky @ Jun 25 2009, 10:06)  ReAL, это опции линкера, как я понял (из вашего мейка)? Это опции, которые gcc передаст линкеру (ld). Цитата(n_bogoyavlensky @ Jun 25 2009, 10:06)  А зачем -Wl два раза указан? Об этом можно прочитать в документации на gcc. -Wl "действует" до ближайшего пробела.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 25 2009, 07:25
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
По поводу нашего давнего разговора в этой ветке о сокращении размера кода при компиляции... Разобрался... Для линкера надо было писать -Wl,-Map=$(TARGET_OUTPUT_FILE).map,--cref,--gc-sections,--relaxЯ писал: -Wl,-Map=$(TARGET_OUTPUT_FILE).map,--cref --gc-sections --relax
Поэтому и не работало... Цитата(Сергей Борщ @ Jun 25 2009, 11:22)  Это опции, которые gcc передаст линкеру (ld). Это понятно. Я имею ввиду зачем две строчки с -Wl, если можно обойтись одной...
Сообщение отредактировал n_bogoyavlensky - Jun 25 2009, 07:23
--------------------
Благодарю заранее!
|
|
|
|
|
Oct 4 2009, 07:40
|

Знающий
   
Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910

|
Хотел попробовать запустить примеры для BF533. К сожалению проект скомилировать не удаётся, ошибка такого плана: ".\Src\main.cpp", line 112: cc0167: error: argument of type "void (*)(int, int, int)" is incompatible with parameter of type "ex_handler_fn" register_handler_ex(ik_timer, OS::SystemTimer_ISR, 1); ^
".\Src\main.cpp", line 113: cc0167: error: argument of type "void (*)(int, int, int) C" is incompatible with parameter of type "ex_handler_fn" register_handler_ex(ik_ivg14, ContextSwitcher_ISR, 1); ^
2 errors detected in the compilation of ".\Src\main.cpp". cc3089: fatal error: Compilation failed
--------------------
|
|
|
|
|
Oct 5 2009, 08:16
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(sevstels @ Oct 4 2009, 20:19)  уже решил заменой файлов из snapshot мне только одно не понятно, почему-бы сразу не выкладывать корректную версию для скачивания или надо чтоб народ для начала немного помучился? Дело в том, что в релизе лежит версия для VDSP 4.5 (и более старых), там прототип обработчика прерывания описывался с тремя аргументами типа int. Зачем так было сделано, не знаю. В версии VDSP 5.0 они, видимо, и сами это поняли, и убрали эти инты из прототипа. В соответствии с этим были внесены изменения, которые оперативно отразились в репе и в снапах. Но поскольку релиз еще не выпускался, то в архивах лежит версия для VDSP 4.5. Видимо, надо придумать какую-то простую схему, указывающую для какой версии тулчейна предназначена та или иная версия порта. Кстати, раньше название и версия используемого тулчейна были прямо забиты в пути порта (например, директория порта прямо так и называлась /BF533/VDSP4.0, но это оказалось неудобным - каждый раз переименовывать директории в путях. Поэтому перешли к общему названию (BF533/VDSP). Самое простое писать в сопроводиловке, какой версии тулчейна соответствует порт.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 5 2009, 13:41
|

Знающий
   
Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910

|
Это конечно удивительно, автор работает ещё 4.0 версией VDSP! Надо иметь железные нервы... был в шоке. Кстати потестил на BF561 (600/150) - всё аж летает  При компиляции есть предупреждение: ".\scmRTOS\BF533\OS_Target_cpp.cpp", line 61 (col. 5): cc1746: {D} warning: Externally defined variable Kernel, possibly used in constructor before it has been constructed Дык что тут думать? Проще не бывает. scmRTOS BF533 vdsp 4.0scmRTOS BF533 vdsp 4.5scmRTOS BF533 vdsp 5.0Или на php простенький скрипт, по какой ссылке кликнули, сервер соответствующие файлы в архив и закатал. -
Сообщение отредактировал sevstels - Oct 5 2009, 14:14
--------------------
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|