Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
19.04.2006, 00:05
|
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Несколько вопросов по IAR AVR
1) Пытаюсь создать глобальную переменную в r14
__regvar __no_init volatile unsigned int i @14;
получаю сообщение о необходимом ключике --lock-regs, но не смог найти куда его засунуть. Подскажите, плиз, куда его вписать.
2) Для сравнения размеров проектов на C и ASM написал две очень простенькие прогрыммки.
После поиска разницы, заметил, что все вектора прерываний заменены на RETI в откомпилированном проекте IAR. Можно как-нить начать программу с адреса 0x01, если мне не нужны остальные прерывания? Пробовал прописать прерывание по вектору RESET, получил сообщение о том, что там уже что-то есть. С адреса 0x00 начинается по умолчанию main?
|
|
|
|
19.04.2006, 00:45
|
|
Гражданин KAZUS.RU
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
|
Всё это делается в опциях проекта (или вручную в дополнительных опциях компилятора, если IDE не используем - в этом случае читайте Help)
1) в IARAVR 3.xx - ProjectSetting-›ICCAVR-›Code-›Register utilization-›Number of register to locked for global variables (выбираем в выпадающем меню)
в IARAVR 4.xx - ProjectSetting-›C/C++ Compiler-›Code-›Register utilization-›Number of register to locked for global variables (выбираем в выпадающем меню)
2) в IARAVR 3.xx - ProjectSetting-›General-›System-›Initialize unsed interrupt vectors with RETI instructions(снимаем галку, чтобы избавиться от RETI)
в IARAVR 4.xx - ProjectSetting-›General Options-›System-›Initialize unsed interrupt vectors with RETI instructions(снимаем галку, чтобы избавиться от RETI)
|
|
|
|
19.04.2006, 08:15
|
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от NemoCut32
|
Всё это делается в опциях проекта (или вручную в дополнительных опциях компилятора, если IDE не используем - в этом случае читайте Help)
|
Спасибо, все нашел, неправильно пользовался поиском
|
|
|
|
19.04.2006, 21:30
|
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Несколько вопросов по IAR AVR
Продолжаю разбираться с разницей в компилировании. Два идентичных проекта по выполняемым действиям. Но IAR дописал избыточный код (на мой взгляд). Вот итог компиляции.
Код сгенерированный AVR Studio (asm)
Код:
|
7: rjmp init
+00000000: RJMP PC+0x0001
@00000001: init
10: ldi temp, low(RAMEND)
+00000001: LDI R16,0x5F
11: out SPL, temp
+00000002: OUT 0x3D,R16
12: ldi temp, high(RAMEND)
+00000003: LDI R16,0x04
13: out SPH, temp
+00000004: OUT 0x3E,R16
15: ldi temp, 0xFF
+00000005: SER R16
16: out PORTD,temp
+00000006: OUT 0x12,R16
18: ldi temp, 0xF0
+00000007: LDI R16,0xF0
19: out DDRD, temp
+00000008: OUT 0x11,R16
21: sei
+00000009: SEI
@0000000A: main
25: rjmp main
+0000000A: RJMP PC-0x0000 |
Код сгенерированный в IAR
Код:
|
+00000000: RJMP PC+0x0009
+00000001: SER R16
+00000002: OUT 0x12,R16
+00000003: LDI R16,0xF0
+00000004: OUT 0x11,R16
+00000005: RJMP PC-0x0000
+00000006: NOP
+00000007: SLEEP
+00000008: RJMP PC-0x0001
+00000009: LDI R16,0x9F
+0000000A: OUT 0x3D,R16
+0000000B: LDI R16,0x00
+0000000C: OUT 0x3E,R16
+0000000D: LDI R28,0x80
+0000000E: LDI R29,0x00
+0000000F: RCALL PC+0x0004
+00000010: RCALL PC-0x000F
+00000011: RCALL PC-0x000B
+00000012: RJMP PC-0x000C
+00000013: LDI R16,0x01 |
То, что код начинается с перехода на по адресу PC+$09 и происходит инициализация стека, это понятно, в программе я сам этого не делал, т.к. пока не знаю как.
А вот зачем строки по адресам $0f-$13? Подскажите как от этого избавиться, а то привычка писать на асме тянет за собой привычку убирать все лишнее.
|
|
|
|
21.04.2006, 21:54
|
|
Гражданин KAZUS.RU
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
|
После инициализации области векторов прерываний IAR вставляет свой cstartup, который инициализирует стеки, переменные, константные данные и т.д. Всё это по ходу находится в cstartup.s и библиотеках (правда исходники находятся только в полной версии IAR C). Это необходимо для нормальной работы C(C++).
Вопрос: а зачем нужно это сравнение? Памяти не хватает? Или ради спортивного интереса. Скажу сразу программа на ассемблере будет короче, если её размер не превышает 1000 строк, или Вы гений. Далее размер кода при включенной оптимизации обычно сравнивается или опять таки за счёт оптимизации меньше у сишного кода. Почему? Да потому, что при оптимизации, которую нельзя применять к ассемблеру одинаковые куски программы объединяются в функции и т.д.
Года три назад я полностью перешёл на Си, почему?
1) Размер кода не так уж сильно отличается
2) Меньше времени занимает писать программу
3) В следствии контроля Си, меньше ошибок, легче отлаживать программу (существенно меньше)
4) Портируемость проектов для разных платформ
5) Исходник более читаемый, значит более ориентированный на совместную работу нескольких программистов.
У меня есть знакомый, который всё спорит, что надо всё писать на ассемблере (он когда то написал пару программ на "компьютере" с TTL микросхемами, программа вгонялась установкой тумблеров и нажатием капы, и теперь мнит себя великим прграммистом, а вокруг него одни идиоты), т.к. ассемблерные программы ведут себя адекватно, "полностью понятны" и меньше по размеру, а я по собственному опыту знаю, что программу на ассемблере я буду писать в 4 раза дольше и отлаживать дольше раз в десять. И на хрена мне такая понятность, если у меня есть проекты которые год на Си пишутся, а на ассемблере это уже потеряло бы свою актуальность (128K ATMEGA128 не хватало). Вот и решайте кто прав в этом споре.
|
|
|
|
21.04.2006, 22:23
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Полностью согласен.
Я если не вмоготу , пусть в "критичных" местах
вгоняет куски на асме.
|
|
|
|
21.04.2006, 22:35
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Помнится в давнии ,спектрумовские,времена . Инфорком,
на своих страницах, обсуждал проблему психологического
барьера при переходе с бэйсика на асм.
Здесь мы наблюдаем аналогичный диагноз .
|
|
|
|
21.04.2006, 22:40
|
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от NemoCut32
|
После инициализации области векторов прерываний IAR вставляет свой cstartup, который инициализирует стеки, переменные, константные данные и т.д. Всё это по ходу находится в cstartup.s и библиотеках (правда исходники находятся только в полной версии IAR C). Это необходимо для нормальной работы C(C++).
|
Спасибо, посмотрю на досуге. Просто не нравится вот эта глупость:
Код:
|
+0000000F: RCALL PC+0x0004
+00000010: RCALL PC-0x000F
+00000011: RCALL PC-0x000B
+00000012: RJMP PC-0x000C |
Сообщение от NemoCut32
|
Вопрос: а зачем нужно это сравнение? Памяти не хватает? Или ради спортивного интереса.
|
Сравнение для того, чтобы посмотреть на разницу в полученном коде, и в каких ситуациях использовать асм, в каких С. Т.е. делать вставки на асме в критических ко времени выполнения местах программы или можно все доверить С.
|
|
|
|
21.04.2006, 23:01
|
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от dosikus
|
Помнится в давнии ,спектрумовские,времена . Инфорком,
на своих страницах, обсуждал проблему психологического
барьера при переходе с бэйсика на асм.
Здесь мы наблюдаем аналогичный диагноз .
|
Т.е. у меня психологический барьер перехода с асма на С?
|
|
|
|
21.04.2006, 23:42
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Угу типа того , без обид. ![Валяюсь от смеха](images/smilies/icon_biggrin.gif)
Сам такой был.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
IAR for AVR
|
kassiopay |
Микроконтроллеры, АЦП, память и т.д |
5 |
27.03.2009 17:20 |
IAR AVR 5.11B Wanted
|
Kabron |
Микроконтроллеры, АЦП, память и т.д |
30 |
08.02.2009 01:43 |
IAR for AVR & Assembler
|
GLVlad |
Микроконтроллеры, АЦП, память и т.д |
3 |
04.06.2008 16:46 |
IAR for AVR
|
vasilij-kursikov |
Микроконтроллеры, АЦП, память и т.д |
29 |
28.09.2006 18:14 |
[Решено] Ошибка в IAR C for AVR
|
Lean |
Коллекция глюков |
0 |
15.05.2003 10:34 |
Часовой пояс GMT +4, время: 19:00.
|
|