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

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

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

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

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

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


 
Опции темы

IAR Embedded Workbench

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

Сообщение от kison Посмотреть сообщение
Учитывая что d-›sens.gas = GET_GAS_VALVE_STATE(); это часть исходника SECU-3
http://secu-3.narod.ru/
Откуда пример то взяли?
Да разбираю ,хочу понять алгоритм. И заодно освоить ИАР
Реклама:
peter123_123 вне форума  
Непрочитано 26.02.2010, 21:57  
peter123_123
Частый гость
 
Регистрация: 30.08.2008
Сообщений: 38
Сказал спасибо: 43
Сказали Спасибо 1 раз в 1 сообщении
peter123_123 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

интегральные величины


//описывает все входы системы - их производные и



typedef struct
{
unsigned int map; //давление во впускном коллекторе (усредненное)
unsigned int voltage; //напряжение бортовой сети (усредненное)
signed int temperat; //температура охлаждающей жидкости (усредненная)
unsigned int frequen; //частота вращения коленвала (усредненная)
unsigned int inst_frq; //мгновенная частота вращения
unsigned char carb; //состояние концевика карбюратора
unsigned char gas; //состояние газового клапана
unsigned int frequen4; //частота усредненная всего по 4-м выборкам

//сырые значения датчиков (дискреты АЦП с компенсированными погрешностями)
signed int map_raw;
signed int voltage_raw;
signed int temperat_raw;

}sensors;
Привёл ссылку на структуру
Тут пишут "sensors;" a выражение sens.gas
C я занимаюсь недавно работал на АСМЕ и Бейсике
нашёл интересную с моей кочки зрения прграмму
SECU_3 скачал ИАР для этого т.е хочу понять что к чему
peter123_123 вне форума  
Непрочитано 26.02.2010, 23:07  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Нет это только объявление типа.
ниже будет что-нибудь типа

sensors sens;

То есть объявление переменной sens типа sensors;
Далее будет что-нибудь с объявлением "d".
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
peter123_123 (27.02.2010)
Непрочитано 27.02.2010, 02:00  
DrunyaRuma
Временная регистрация
 
Регистрация: 13.02.2008
Сообщений: 60
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DrunyaRuma на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Ура до меня дошло ,даже теперь по-другому стал мыслить.
Для таких как я,примеры загрузки глобальных переменных из Асма:
unsigned char:
Код:
//программа на Си
unsigned char q = 0x01;
--------------------------------
//Асм
PUBLIC DispStart

EXTERN q

RSEG CODE

DispStart:
//загружаем переменную q
  lds   r16,q
//загружаем адрес переменной
  ldi   r16,low(q)
  ldi   r17,high(q)
  ret  
END
long int:
Код:
//программа на Си
long int q = 0x44332211;

--------------------------------
//Асм
PUBLIC DispStart

EXTERN q

RSEG CODE

DispStart:
//загружаем переменную q
  lds   r16,q
  lds   r17,q+1
  lds   r18,q+2
  lds   r19,q+3
//или
  ldi   r30,low(q)
  ldi   r31,high(q)
  ld    r16,Z
  ldd   r17,Z+1
  ldd   r18,Z+2
  ldd   r19,Z+3   
//загружаем адрес переменной
  ldi   r16,low(q)
  ldi   r17,high(q)
  ret  
END
и мой случай загрузка указателя на массив во flesh памяти:
Код:
//программа на Си
typedef void(*TFuncPtr)(void);
__flash TFuncPtr FArray[2] = {&AdrRecFromPC,&AdrCRCRecFromPC};

--------------------------------
//Асм
PUBLIC DispStart

EXTERN FArray

RSEG CODE

DispStart:
//загружаем адрес переменной (FArray[0])
  ldi   r16,low(FArray)
  ldi   r17,high(FArray)
  ret  
END
Спасибо за терпение и всем кто помогал.Вопросов больше нет.
Цель достигнута: загрузка через ldi адресов переменных.

А ответ был буквально перед носом, спасибо Вам SasaVitebsk, (там где пример со структурой),
но я почему-то в упор не увидел решения,неправильная постановка вопроса и задачи приводит
вот к таким долгим въезжаниям, постараюсь исправится,еще раз всем спасибо.

Последний раз редактировалось DrunyaRuma; 27.02.2010 в 02:30.
DrunyaRuma вне форума  
Непрочитано 27.02.2010, 03:01  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench


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

Кстати точно также можно обращаться и к флагам. И работать с ними побитно.

Причём структура выбрана не случайно. Дело в том, что компилятор гарантирует порядок размещения данных внутри структуры.
Это важно! При работе с ARM7, я убедился что объявление, например
uint8_t a[15],b[3],c[10]; не гарантирует, что данные в памяти пойдут подряд. Компилятор может их тусануть. Из-за выравнивания.

А вообще ваша задача в общем-то решается что-то типа

Код:
struct process
{
uint8_t fReady;
void __flash * Name;
};

#define NPROC 2

process tekProc[NPROC] =
{
{TRUE,&Func1},
{FALSE,&Func2}
}

int main(void)
{

  uint8_t i;

  for(i=0;i‹NPROC;i++)
  {
    if(tekProc[i].fReady)
    {
       tekProc[i].fReady = FALSE;
       tekProc[i].Name();
    }
}
SasaVitebsk вне форума  
Непрочитано 27.02.2010, 05:00  
DrunyaRuma
Временная регистрация
 
Регистрация: 13.02.2008
Сообщений: 60
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DrunyaRuma на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Спасибо за примерчик, обязательно отработаю его. Зря я Вас сразу не
послушал, все-таки идея хранить адреса переменных в статическом виде
до ужаса бредовая, ведь функций может быть очень много,памяти сожрет прилично,а "глобальных" задач несколько.Поэтому мой тренировочный проект несколько изменился, в связи с чем у меня родилась еще одна бредовая идея,но об этом завтра (может она и отпадет, а то уже поздно голова совсем не варит,а остановится тяжело).
Я полностью убедился, что у меня неправильное понимание языка Си
с точки зрения методов программирования,спасибо что ставите на путь
истинный.

P.S.
Мне ужасно стыдно за то, что я влез с объяснениями про структуры со своим извращенным понятием о ней. Керниган и Ричи помогли все понять.
DrunyaRuma вне форума  
Непрочитано 30.03.2010, 22:29  
Polite
Прохожий
 
Регистрация: 17.02.2010
Сообщений: 3
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Polite на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Добрый вечер, хотелось бы попросить у вас помощи.

1. как настроить IAR чтобы его hex файл можно было подключить в Proteus 7.6 SP0


данные настройки не подошли, Протеус выдает ошибку.

и в чем может быть дело, IAR через раз выдает ошибка :
User erorr:Illegal opcode found on adress 0x0
Polite вне форума  
Непрочитано 31.03.2010, 00:31  
wer_1
Временная регистрация
 
Регистрация: 13.03.2006
Сообщений: 56
Сказал спасибо: 12
Сказали Спасибо 22 раз(а) в 9 сообщении(ях)
wer_1 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

скрин приложил,но если с hex то в release утановить intel standart
Миниатюры:
Нажмите на изображение для увеличения
Название: iar.jpg
Просмотров: 88
Размер:	70.2 Кб
ID:	6309  
wer_1 вне форума  
Сказали "Спасибо" wer_1
Polite (01.04.2010)
Непрочитано 31.03.2010, 01:17  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Установите в output format - dwarf-2 ( ну или похожее типа dwarf2, я уже не помню как формат точно у IAR называется) Это вместо ubrof 8
Можно конечно и по hex отлаживаться, но это безумно неудобно.
kison вне форума  
Сказали "Спасибо" kison
Polite (01.04.2010)
Непрочитано 01.04.2010, 02:16  
Polite
Прохожий
 
Регистрация: 17.02.2010
Сообщений: 3
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Polite на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от Polite Посмотреть сообщение
User erorr:Illegal opcode found on adress 0x0
в чем может быть проблема?
сама среда выдает в начале процесса дебага.
компилит без ошибок
Polite вне форума  
 
Опции темы

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

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

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

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


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.