Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 19.04.2006, 00:05  
graham
Прописка
 
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
graham на пути к лучшему
По умолчанию Несколько вопросов по IAR AVR

1) Пытаюсь создать глобальную переменную в r14
__regvar __no_init volatile unsigned int i @14;
получаю сообщение о необходимом ключике --lock-regs, но не смог найти куда его засунуть. Подскажите, плиз, куда его вписать.
2) Для сравнения размеров проектов на C и ASM написал две очень простенькие прогрыммки.
После поиска разницы, заметил, что все вектора прерываний заменены на RETI в откомпилированном проекте IAR. Можно как-нить начать программу с адреса 0x01, если мне не нужны остальные прерывания? Пробовал прописать прерывание по вектору RESET, получил сообщение о том, что там уже что-то есть. С адреса 0x00 начинается по умолчанию main?
Реклама:
graham вне форума  
Непрочитано 19.04.2006, 00:45  
NemoCut32
Гражданин KAZUS.RU
 
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
NemoCut32 на пути к лучшему
По умолчанию

Всё это делается в опциях проекта (или вручную в дополнительных опциях компилятора, если 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)
NemoCut32 вне форума  
Непрочитано 19.04.2006, 08:15  
graham
Прописка
 
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
graham на пути к лучшему
По умолчанию

Сообщение от NemoCut32
Всё это делается в опциях проекта (или вручную в дополнительных опциях компилятора, если IDE не используем - в этом случае читайте Help)
Спасибо, все нашел, неправильно пользовался поиском
graham вне форума  
Непрочитано 19.04.2006, 21:30  
graham
Прописка
 
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
graham на пути к лучшему
По умолчанию 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? Подскажите как от этого избавиться, а то привычка писать на асме тянет за собой привычку убирать все лишнее.
graham вне форума  
Непрочитано 21.04.2006, 21:54  
NemoCut32
Гражданин KAZUS.RU
 
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
NemoCut32 на пути к лучшему
По умолчанию

После инициализации области векторов прерываний IAR вставляет свой cstartup, который инициализирует стеки, переменные, константные данные и т.д. Всё это по ходу находится в cstartup.s и библиотеках (правда исходники находятся только в полной версии IAR C). Это необходимо для нормальной работы C(C++).
Вопрос: а зачем нужно это сравнение? Памяти не хватает? Или ради спортивного интереса. Скажу сразу программа на ассемблере будет короче, если её размер не превышает 1000 строк, или Вы гений. Далее размер кода при включенной оптимизации обычно сравнивается или опять таки за счёт оптимизации меньше у сишного кода. Почему? Да потому, что при оптимизации, которую нельзя применять к ассемблеру одинаковые куски программы объединяются в функции и т.д.
Года три назад я полностью перешёл на Си, почему?
1) Размер кода не так уж сильно отличается
2) Меньше времени занимает писать программу
3) В следствии контроля Си, меньше ошибок, легче отлаживать программу (существенно меньше)
4) Портируемость проектов для разных платформ
5) Исходник более читаемый, значит более ориентированный на совместную работу нескольких программистов.
У меня есть знакомый, который всё спорит, что надо всё писать на ассемблере (он когда то написал пару программ на "компьютере" с TTL микросхемами, программа вгонялась установкой тумблеров и нажатием капы, и теперь мнит себя великим прграммистом, а вокруг него одни идиоты), т.к. ассемблерные программы ведут себя адекватно, "полностью понятны" и меньше по размеру, а я по собственному опыту знаю, что программу на ассемблере я буду писать в 4 раза дольше и отлаживать дольше раз в десять. И на хрена мне такая понятность, если у меня есть проекты которые год на Си пишутся, а на ассемблере это уже потеряло бы свою актуальность (128K ATMEGA128 не хватало). Вот и решайте кто прав в этом споре.
NemoCut32 вне форума  
Непрочитано 21.04.2006, 22:23  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Полностью согласен.
Я если не вмоготу , пусть в "критичных" местах
вгоняет куски на асме.
dosikus вне форума  
Непрочитано 21.04.2006, 22:35  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Помнится в давнии ,спектрумовские,времена . Инфорком,
на своих страницах, обсуждал проблему психологического
барьера при переходе с бэйсика на асм.
Здесь мы наблюдаем аналогичный диагноз .
dosikus вне форума  
Непрочитано 21.04.2006, 22:40  
graham
Прописка
 
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
graham на пути к лучшему
По умолчанию

Сообщение от 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
Вопрос: а зачем нужно это сравнение? Памяти не хватает? Или ради спортивного интереса.
Сравнение для того, чтобы посмотреть на разницу в полученном коде, и в каких ситуациях использовать асм, в каких С. Т.е. делать вставки на асме в критических ко времени выполнения местах программы или можно все доверить С.
graham вне форума  
Непрочитано 21.04.2006, 23:01  
graham
Прописка
 
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
graham на пути к лучшему
По умолчанию

Сообщение от dosikus
Помнится в давнии ,спектрумовские,времена . Инфорком,
на своих страницах, обсуждал проблему психологического
барьера при переходе с бэйсика на асм.
Здесь мы наблюдаем аналогичный диагноз .
Т.е. у меня психологический барьер перехода с асма на С?
graham вне форума  
Непрочитано 21.04.2006, 23:42  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Угу типа того , без обид.
Сам такой был.
dosikus вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot