Перейти к содержанию
    

lamerok

Свой
  • Постов

    130
  • Зарегистрирован

  • Посещение

Весь контент lamerok


  1. 33 команда HART протокола до 250 динамических праметров можете прочитать... правда долго :)
  2. Имел дело с камерами WT120, WT11, Espec и Sigma Weiss WT(1..2 градуса/мин) самые неприхотливые, с GPIB и RS232, Espec тоже нормальная, но медленная и только c GPIB. Sigma - Хрень еще та, но быстрая 5 град/мин. Рекомендую WT. http://www.wut.com/en/schunk01.c.11575.de/...productsarticle
  3. Что-то мало народу....В Ебург... получилось 3 чела?
  4. MSP + IAR + STACK

    Это сообщение показывается, когда за время работы ИАР обнаружил что указатель стека ВЫВАЛИВАЛСЯ за пределы..Т.е. В тот момент когда вы смотрите указатель может быть в пределах нормы, а до этого момента он когда-то был вне предела. Увеличьте стек. Предупреждение можно поставить и на меньшее количество, например на 90% или 80 % размера стека.
  5. Выбираю третье... Насчет кафе, мне по-барабану, лишь бы музыка сильно громко не играла, а то вас не слышно будет.. Еще похоже погода будет не очень.... предварительно прогноз посмотрел. ИМХО, Так что лучше внутри здания.. Кафе выбирете пожалуйста... если на этой неделе договримся,... то хорошо, если нет, то по опыту не собиремся никогда :)
  6. Добавлю DEBUG, включает поддержку макроса ASSERT
  7. Предлагаю 8 июня... в каком кафе? Я в Ебургских кафе не силен...
  8. А мне понравилась :) все очень просто и не запутанно :)
  9. После кучи экспериментов пришел к выводу: 1. Можно получить код с подстановкой непосредственно числа 2. Но трудно так как: а) Обращение к static const члену должно быть в одном *.cpp файле б) Зависит от кода.... Т.е., например, я обращаюсь к static const члену в конструкторе, в теле конструктора, перед обращение, куча условий. Если эти условия заремить или часть из них, или изменить порядок, то компилятор подставляет число, иначе Подставляется адрес static const члена. в) Если обращаться к static const члену в двух и более *.cpp файлах, то в том файле в котором прошла инициализация члена идет подстановка числа в зависимоти от пункта б), в других тупое чтение с адреса члена. 3. Компилятор всегда располагает static const член в одном из сегментов памяти, либо NEAR_I, либо NEAR_C в зависимости от настроек компилятора. 4. Линкер, если не видит, что компилятор где то еще(кроме как в объявлении) использует ссылку на этот член, не резервируте под него память. 5. Если NEAR_C находится в сегменте CODE, то компилятор об этом не знает и читает с ОЗУ (как была сказано Сергеем) 6 Так лучше не делать :) Можно тупо воспользоваться #define, либо как было сказано, использовать __flash (но тогда будет команда чтения из флеша). Спасибо всем за помощь. Да все это касательно floating point.
  10. Цена 3999 зеленых за локальную лицензию, и около 10000 за сетевую... На сколько я понял из знакомнства с Rational Software Architect - Java Там поддерживается не плохо, но я не специалист в Java, поэтому со 100% увереностью сказать не могу... Вы можете скачать триальную версию с сайта IBM - Это примерно 4 Гига :) Кстати сделана она на движке Eclipse Про разваливаются, вы совершенно правы, поэтому мы стараемся: 1. Для каждого проекта стандарт названия классов, методов, атрибутов, стандарт кодирования. 2. После каждого чиха (например, часть архитектуры, класс или несколько классов) устраиваем ревью, все программеры просматривют архитектуру персонально, делают замечания. Автор собирает все замечания, потом уже командой по каждому замечанию проходимся... и в итоге в 95% случаев, проблем с поздним переименовыванием уже нет. Есть небольшие проблемы с доработкой. В основном вначале правиться UML, потом уже код. 3. Соответственно, также просматривается код (все в команде просматривют код другого программериста) на соответствие стандрату кодирования, UML диаграмме и спецификации функции.
  11. Выглядит это примерно так:
  12. Поддерживаю, можно в июне... где? Кандидатура: Челябинск, Екатеринбург, Миасс :)
  13. Проверил на 4.21А - Правда ваша. На 4.12А, о чудо - работает так как я хочу... т.е. подставка числа, не резервирует память под static const член класса. В map файле ни слова про них (initialVoltValueRange и т.д.).
  14. В данный момент используем MS Visio... но есть одна проблема с мерджем Visio файла в ClearCase (получается что править диаграмму в один момент времени может только один человек), попробывали Rational Software Architect, так как продукты ClearCase и Rational Software Architect от одной конторы (IBM Rational Rose), то таких проблем там нет и можно одновременно работать над одним документом. Пока попробывали триальную версию на 1 месяц. Немного непревычно после Visio, но думаю привыкнуть можно... Есть еще Visual UML, говорят неплохая штука. Дело в том, что из-за особенностей встроенного С++, не всегда можно из UML диаграммы сделать заготовку класса (для использования). Поэтому вначале разрабатывается архитектура, затем детальная архитектура (Все классы, все функции, статические диаграммы, диаграммы взаимодействия, описываются все функции), а затем по ним пишется код, Для этой задачи Visio подходит очень хорошо.. Повторюсь проблема только с мерджем...
  15. Используем Для контроля версий и совместной разработки Rational ClearCase (UCM) для отслеживания багов (bag tracking) ClearQuest. Документация на UML. Планируем на Ration Software Architect перейти. Используем только C++ Это для встроенного ПО (AVR, PIC, MSP430). ДЛя верхнего ПО клинеты- MS Visual Studio Team Suite SW Architect 2005, MS Visual Studio Team Suite Developer 2005, MS Visual Studio Team Suite Tester 2005, Сервер MS Visual Studio Team Suite.
  16. Вот есть еще такой вариант (для ИАРа в остальных средах я не работал): 1. Слинковать библиотеку типа rtos.d90. 2. Подключить её к проекту 3. Сделать класс сRTOS - C++ обертку библиотеки. И использовать его во всех своих С++ проектах.
  17. Чвободное место заполняю нулями для 1. Как вы и сказали, чтобы и ИАР и я 0 принимали за 0.... 2. Косвенная проверка что вся флеш не битая.... Ну и контрольная сумма проверяется постоянно в Идле задаче, поэтому, время при загрузке не отнимает... т.е. проверяется вся память FLASH все время во время работы устройства..
  18. Дак как раз это я почти пойму..... Компилятор (IAR 4.21A)этого не поймет. Побробуйте скомпилить вот это... и проверить размер класса сClassDirector // Class.h class cClass { public: float getInternalVoltRange(void) const { return internalVoltRange; } float getInternalCurRange(void) const { return internalCurRange; } float getInternalTest(void) const { return internalTest; } private: float internalVoltRange; float internalCurRange; float internalTest; const float initialVoltValueRange = 800.0f; // Что за вата??? Почему так можно вообще делать??? const float initialCurValueRange = 0.40f; const float initialTestValue = 0.0f; }; а потом вот это // ClassDirtector.h class cClassDirector { public: float getInternalVoltRange(void) const { return internalVoltRange; } float getInternalCurRange(void) const { return internalCurRange; } float getInternalTest(void) const { return internalTest; } private: float internalVoltRange; float internalCurRange; float internalTest; static const float initialVoltValueRange; static const float initialCurValueRange; static const float initialTestValue; }; Размер класса одинаковый в обоих случаях. Согласен, но только, если статический член - константа не floating point. Что выяснилось сегодня :) (Спасибо IgorKossak) Хммм... Почти согласен ... проведу еще пару экперементов.... подумаю... Согласен, компилятор просто не позволяет этого сделать. Пишет что он уже проинициализирован. Ну специально задал -Z(CODE)NEAR_C=_..X_INTVEC_SIZE-_..X_FLASH_END Чтобы все константы сувались в CODE
  19. Именно поэтому делаем в *.xcl вот так // fill empty code space with 0x00 -H00 // generate a 2-byte crc16 checksum -J2,crc16
  20. Хочу чтобы константы лежали во ФЛЕШЕ. Но компилятор сам расположил в КОДЕ сегменте(ФЛЕШЕ), а читает из ОЗУ.. непорядок... Согласен, я могу добиться, чтобы все было во флеше, поставив keyword __flash. Перед объявлением константных членов класса. И компилятор верно прочитает из ФЛЕШ. Код приводить не буду.. но читает из флеш по адресу статических констант членов класса. Могу добится чтобы они были в ОЗУ. Просто убрал в настройках компилятора --string_literals_in_flash и компилятор верно расположил все в ОЗУ и прочитал из ОЗУ. Но не пойму что мешает компилятору заменить все на просто число..???.Зачем нужно выделять под static const память, не важно где(в ОЗУ или флеше)...Для каких целей??? Ведь он позволяет сделать это для nonstatic constant (подставить число). (Что запрещено стандартом (проинициализировать их в декларации класса)) Это многое объясняет... Все верно... получается флоат нельзя инициализировать в объявление класса. Спасибо, в споре рождается истина.
  21. Явно в стандарте не указано что так делать нельзя... нельзя значит можно... См картинку раздел 4........ Ну опять в разных файлах можно завадать разные значения const float cClass::initialTestValue = 8.0f; в одном скажем и const float cClass::initialTestValue = 10.0f; в другом, если они объявлены статиком И... Так как мы в каждом *.cpp файле подключаем один и тот же хидер, то компилятор должен увидеть что initialTestValue это статический член, да еще и константа, и никакой не external - память под него выделяТь не надо!!!!!!.
  22. Вот что получается... в мар файле Мои переменные лежат в коде сегменте NEAR_C Relative segment, address: CODE 00000406 - 00000411 (0xc bytes), align: 0 Segment part 9. Intra module refs: cClassDirector::cClassDirector() ENTRY ADDRESS REF BY ===== ======= ====== cClassDirector::initialVoltValueRange 0000040A cClassDirector::initialCurValueRange 0000040E cClassDirector::initialTestValue 00000406 а в ассемблере берутся из ОЗУ.... internalVolt = initialUSLValue; \ 000000D8 .... LDI R30, LOW(??initialVoltValueRange) \ 000000DA .... LDI R31, (??initialVoltValueRange) >> 8 \ 000000DC 8100 LD R16, Z \ 000000DE 8111 LDD R17, Z+1 \ 000000E0 8122 LDD R18, Z+2 \ 000000E2 8133 LDD R19, Z+3 \ 000000E4 01FC MOVW R31:R30, R25:R24 \ 000000E6 5AE6 SUBI R30, 166 \ 000000E8 4FFF SBCI R31, 255 \ 000000EA 8300 ST Z, R16 \ 000000EC 8311 STD Z+1, R17 \ 000000EE 8322 STD Z+2, R18 \ 000000F0 8333 STD Z+3, R19 И что это ИАР сделал, то что я ему написал:)
  23. Почему в одном месте???? Стандарт не воспрещает этого... Проверил на других компиляторах, везде один и тот же результат, подстановка конктретного числа. Например, на 4.12А лицензионном прокатило... Может быть опции у компилятора, какие нибудь нужно поставить???? ЧТобы он воспринимал это как надо??? Полностью согласен, тогда чего же ИАР мне позволил инициализацию (не статика) сделать не в конструкторе??? И заменл все это числом???? Когда я инициализирую константу в хидере класса... не савля статик (Такого делать вообще нельзя) ИАР делает то чтоя задумал сделать со статиком..... ТОгда какого хрена он не делает тоже самое со статиком???? Самое интересное другое... Все это не работает только с флоатом... с интом16, инт8, инт 32 все прекрасно канает на всех компиляторах. И кстати в любом случае результат действия: internalVoltRange = initialVoltValueRange; в internalVoltRange должнен стать 800.0f верно??? А в случае когда статик инициализируется в *.cpp такого не происхит... так как
  24. Логично, если компилер должен в одном *.cpp файле подставить значение которе определено в том *.сpp, а в другом *.cpp которое в том *.cpp. Так как компилер компилт последовательно все *.cpp файлы. Если ИАР не причем,тогда встречный вопрос. ИАР вот такую конструкцию (опять повторюсь): // Class.h class cClass { public: float getInternalVoltRange(void) const { return internalVoltRange; } float getInternalCurRange(void) const { return internalCurRange; } float getInternalTest(void) const { return internalTest; } private: float internalVoltRange; float internalCurRange; float internalTest; const float initialVoltValueRange = 800.0f; // Что за вата??? Почему так можно вообще делать??? const float initialCurValueRange = 0.40f; const float initialTestValue = 0.0f; }; // Class.cpp ... //const float cClassDirector::initialVoltValueRange = 800.0f; //const float cClassDirector::initialCurValueRange = 0.5f; //const float cClassDirector::initialTestValue = 8.0f; cClass::cClass(void) { internalVoltRange = initialVoltValueRange; internalCurRange = initialCurValueRange; internalTest = initialTestValue; } воспринимает как я и задумал, но только почемуто без static И делает подставку числа: internalVoltRange = initialVoltValueRange; \ 000000C0 E000 LDI R16, 0 //00h 00h 73h 68h = 800.0f \ 000000C2 E428 LDI R18, 72 \ 000000C4 E434 LDI R19, 68 Класс у меня синглтон. Но что будет делать ИАР, если я сделаю класс не синглтон, а создам потом два экземпляра этого класса. ЧТО будет подставлять ИАР вместо атрибута const tF32 initialVoltValueRange?????? ОН не статик и по сути они различаться у разных объектов. На сколько я понимаю, ИАР как раз в этом случае должен создавать атрибуты у каждого объекта, которые будут занимать память, т.е. что я получил когда сделал их static ...... . Таким образом ИАР делает все наоборот. (Кстати инициализировать, не статические атрибуты можно только в консрукторе, но только не для ИАР!!!) А если они конст (но не статик), то ИАР должен следить за тем, чтобы я их не поменял потом, но уж точно не делать подмену на число. Кстати к вопросу о ИАР багах... Синглетон у меня сделан макросом только из-за того, что вот такая конструкция компилируется в ИАР 4.21А, но убивает симулятор. А в 4.12А убивает компилятор. //singleton.h #include <new> template <class T> class cSingleton { public: _Pragma("inline=forced") inline static T* getInstance(void) { return pInstance; } protected: static void create(void) { pInstance = new(nothrow) cSingleton(); } cSingleton(void); private: cSingleton(const T& other); const T& operator=(const T& other); static T* pInstance; }; //singleclass.h #include "singleton.h" class cSingleClass : public cSingleton<cSingleClass> { public: static void runTest() {}; private: tF32 test; }; //main.cpp #include "singleclass.h" int main() { cSingleClass::runTest(); return 0; } Если убрать new, то все хорошо.
  25. Работает, никаких проблем замечено не было..... CAN стек реализован на С++.... связь до 7 устройств.
×
×
  • Создать...