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

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

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

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

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

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


 
Опции темы
Непрочитано 25.02.2010, 17:19  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от SasaVitebsk Посмотреть сообщение
Чтож в этом случае применение указателей на функцию оправданное и классическое решение.
Использование константного указателя на такой же неизменный массив указателей явно не стандартное решение. Зачем вообще эти указатели, если их нельзя изменять? Чем это лучше стандартного вызова функции по имени? ИМХО - ничем, только запутаться в собственном исходнике помогает.
Реклама:
kison вне форума  
Непрочитано 26.02.2010, 01:11  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

+1
Именно по этому я немного и "поулыбался".
И именно поэтому предположил, что автору немного рано в этой области экспериментировать.

С другой стороны, возможно мы ещё малы, чтобы знать всю правду. А автор, выполняя поставленную задачу накачает мускулы, отточит знания и отработает концепцию. Так сказать отделит зёрна от плевел.
SasaVitebsk вне форума  
Непрочитано 26.02.2010, 03:31  
DrunyaRuma
Временная регистрация
 
Регистрация: 13.02.2008
Сообщений: 60
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DrunyaRuma на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Здравствуйте уважаемые, спасибо всем за ответы.
Вроде бы что-то получилось(прикрепил проект),но есть темные моменты:
1)вот например строка
__regvar __no_init uint8_t crc @10;
у меня так и не заработала,компилятор потребовал, я так понял зарезер-
вировать регистр r10 опцией --lock_regs, прописал в командной строке
--lock_regs 10, но все равно вылазили ошибки; насколько я понял таким
образом можно запретить компилятору использовать эти регистры (выделить под глобальную переменную) или мы указываем ему в какой регистр загружать переменную при обращении к ней?
2)команда @ xxxxx говорит компилятору,что переменная должна находится по адресу ххххх ,(char a @ 0x0140)?
3)как же все таки в Си коде сделать так,чтобы локальная переменная
загрузилась в нужный мне регистр,например в область локальных регистров r4-r15,r24-r27.Чтобы я потом вставляя ассемблерные вставки
не гадал куда он захочет в этот раз ее записать.
4)Чисто теоретический вопрос.Как я понял судя из документа AVR034: Mixing C and Assembly Code with IAR Embedded Workbench for AVR (весь винт перерыл,забыл что это аппнот)в подпрограммах в область локальных регистров (r4-r15,r24-r27) напрямую обращаться нельзя,исходя из этого получается что выполнять диспетчер задач как
подпрограмму будет не корректно в плане того, что вызываемая задача будет вложенной подпрограммой для логики IARa,что может повлечь за собой плохую оптимизацию.Так ли это?
5)В проекте у меня не получилось в ассемблерных вставках,например
инструкцию ldi, выполнить с использованием символьного имени,в чем беда?

В начале я и хотел адреса хранить в ОЗУ, но потом мне стало очень жалко ОЗУ,да и стартануть такую функцию на мой взгляд очень долго,
слишком много sts,lds;со статической таблицей куда быстрее и flesh
не нак жалко,все таки 1 адрес = 1 инструкция всего то.
Но основная задача изучить тонкости IARa,и кодирования C+Asm,для
написания более оптимального кода,этот проект больше как тренинг
инженерной мысли,чем как чтот-то серьезное.
Для отработки алгоритмов, при переходе на Си, я вначале пытался
писать на Си,а потом переводить в Асм,но обычно у меня выходит новый алгоритм,который все равно нужно отлаживать,так что я это дело бросил.Я люблю Асм,но вернутся в АврСудио даже не тянет,уж очень долго все нужно делать,а писать на чистом Си я оптимально не умею,да и наверное все таки нет оптимальнее Асма, не разу не видел чтобы компилятор выдавал инструкцию LDD,STD например при инициализации
переферии,а мог бы,сколько бы памяти было сэкономлено.Поэтому решил
углубить свои знания.
Всем еще раз спасибо за помощь.

P.S.За проект сильно не бодайте,я только учусь.
Вложения:
Тип файла: rar Disp.rar (17.9 Кб, 68 просмотров)

Последний раз редактировалось DrunyaRuma; 26.02.2010 в 03:34.
DrunyaRuma вне форума  
Непрочитано 26.02.2010, 08:09  
oleg110592
Гражданин KAZUS.RU
 
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
oleg110592 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

в меню Project\Options
Category:
C/C++ Compiler
вкладка Code
Number of registers to lock for global variables
можно использовать R4-R15
__regvar __no_init uint8_t crc @10; - используем регистр R10
http://microsin.ru/content/view/35/44/
oleg110592 вне форума  
Эти 2 пользователя(ей) сказали Спасибо oleg110592 за это сообщение:
DrunyaRuma (26.02.2010), YagVlad (27.02.2010)
Непрочитано 26.02.2010, 08:59  
DrunyaRuma
Временная регистрация
 
Регистрация: 13.02.2008
Сообщений: 60
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DrunyaRuma на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Спасибо за ссылочку на хороший сайт и за помощь, пункт 1) решен.
DrunyaRuma вне форума  
Непрочитано 26.02.2010, 13:00  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

2) - да. Только зачем это? Зачем вы упорно пытаетесь мешать компилятору (линкеру) исполнять свою задачу. Какая вам разница где именно лежит переменная - работайте с ней по её непосредственному адресу.

На мой текст не смотрите. Это я так кусок выдрал. Это кусок bootloader-а с шифрацией 32-умя битами с протоколом WakeUp с ответом о версии софта-платы, виде процессора - всунутое в 1к. Для малых процов типа atmega8. Причём всё написано на С. На асме только дешифрация и CRC. Вылизано. Запас - 2 байта. То есть тютелька в тютельку.

3) Никак. И слава богу.
4) Честно говоря не понял вопроса. Но вообще, вы можете в ASM использовать всё что хочете, только надо сохранять те регистры из используемых компилятором, которые вы портите.
5) Ассемблерные вставки - не основной режим работы компилятора. Соответственно там есть ограничения, которые описаны.
Цитата:
Для отработки алгоритмов, при переходе на Си, я вначале пытался
писать на Си,а потом переводить в Асм,но обычно у меня выходит новый алгоритм,который все равно нужно отлаживать,так что я это дело бросил.
И правильно. Надо писать на С и ASM просматривать лишь в клинических случаях.
Цитата:
Я люблю Асм,но вернутся в АврСудио даже не тянет,уж очень долго все нужно делать,а писать на чистом Си я оптимально не умею,да и наверное все таки нет оптимальнее Асма, не разу не видел чтобы компилятор выдавал инструкцию LDD,STD например при инициализации
переферии,а мог бы,сколько бы памяти было сэкономлено.Поэтому решил
углубить свои знания.
1) Не надо по одной каккой-то конструкции делать глобальные выводы. Вы возмите банально напишите 1 проект там и там и гляньте результат.
2) Никто не спорит, что "нет оптимальнее ASMа". И в этом смысле применение OS или диспетчера задач - ещё более неоптимально! Но вы же почему-то применяете?
Преимущество Си не в эффективности генерируемого кода, и даже не в скорости написания проекта. Преимущество в возможности обслуживания проекта. То есть внесение изменения в проект в разы легче сделать на Си, чем на ASM. И чем эффективнее ASM прога, тем сложнее туда внести изменения. А на С всё делается на раз.
SasaVitebsk вне форума  
Непрочитано 26.02.2010, 14:28  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от DrunyaRuma Посмотреть сообщение
1)вот например строка
__regvar __no_init uint8_t crc @10;
у меня так и не заработала,компилятор потребовал, я так понял зарезер-
вировать регистр r10 опцией --lock_regs, прописал в командной строке
--lock_regs 10, но все равно вылазили ошибки; насколько я понял таким
образом можно запретить компилятору использовать эти регистры (выделить под глобальную переменную)
Выделять регистры под переменные следует с большой осторожностью. Это чревато самыми удивительными глюками. Попробую объяснить почему. На примере ГЦЦ, но подозреваю что в ИАР схожий механизм.
Зарезервировали мы регистр. Обычно это делается для того, что бы в прерывании не надо было подгружать его из памяти, т.е. для экономии времени. Именно в прерывании, в других случаях можно просто завести локальную копию переменной и компилятор сам разместит ее в регистрах. Проект растет и потребовалась нам плавучая арифметика. Нет проблем - линкер встроит библиотечные, УЖЕ ОТКОМПИЛИРОВАННЫЕ нужные функции. Вроде все хорошо. Но функции эти для работы с плавающей точкой требуют чуть ли не всех регистров, а так как они уже откомпилированы ( или вообще изначально на ассемблере написаны),то велика вероятность, что зарезервированный регистр будет в них использован. Компилятор конечно попытается не допустить трабл - сохранит регистр в стеке перед вызовом плавучей функции и восстановит его при выходе. На первый взгляд все хорошо. Но на самом деле в процессе выполнения такой функции может придти прерывание использующее эту регистровую переменную. А что сейчас в ней - абсолютно непредсказуемо. Оборачивать функции для работы с плавающей точкой в критические секции? Так функции эти очень небыстрые, можно полностью нарушить работоспособность системы. Описанный "глюк" кстати может здорово подпортить жизнь, его не так и просто обнаружить. Так что не стоит без КРАЙНЕЙ необходимости раскладывать грабли вокруг тропинки. Вдруг потребуется на шаг с нее сойти?

Сообщение от DrunyaRuma Посмотреть сообщение
как же все таки в Си коде сделать так,чтобы локальная переменная
загрузилась в нужный мне регистр,например в область локальных регистров r4-r15,r24-r27.Чтобы я потом вставляя ассемблерные вставки
не гадал куда он захочет в этот раз ее записать
Переходить в мир свободного софта - ГЦЦ позволяет это. Более того он позволяет задавать не конкретный регистр, а его тип - любой, из верхних 16, из нижних 16, регистровую пару-указатель и т.п. И работать с ними в дальнейшем не зная конретно номер регистра. И имена переменных/функций в асме использовать можно.
kison вне форума  
Непрочитано 26.02.2010, 17:27  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Да не надо это вообще трогать. Ни на GCC ни на IAR. То что вы написали на ASM делается парой операторов на С. При компиляции займет то-же места и времени. Что вы такого сделали в ASM, что не реализуется в C.

Я понимаю с разделением времени. Но тогда делается всё на Си и только прерывание таймерное пишется на ASM. Причём полностью. Что, в общем-то прекрасно реализуется.

Последний раз редактировалось SasaVitebsk; 26.02.2010 в 17:31.
SasaVitebsk вне форума  
Непрочитано 26.02.2010, 17:46  
peter123_123
Частый гость
 
Регистрация: 30.08.2008
Сообщений: 38
Сказал спасибо: 43
Сказали Спасибо 1 раз в 1 сообщении
peter123_123 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Имеется вот такой код
d-›sens.gas = GET_GAS_VALVE_STATE();
Прочитал,что знак "-›" это структурный указатель что это значит? Писал проги на ВASICe .Хотел бы разобраться
peter123_123 вне форума  
Непрочитано 26.02.2010, 17:57  
DrunyaRuma
Временная регистрация
 
Регистрация: 13.02.2008
Сообщений: 60
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DrunyaRuma на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Спасибо всем за ответы,в голове все упорядочилось,благодаря Вам я
многое узнал.Вопросов пока больше нет.
DrunyaRuma вне форума  
 

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

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подниму тему WinAVR vs IAR oleg110592 Микроконтроллеры, АЦП, память и т.д 5 24.10.2015 14:06


Часовой пояс GMT +4, время: 22:08.


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