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

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

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

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

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

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


 
Опции темы
Непрочитано 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.RU
 
Регистрация: 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.RU
 
Регистрация: 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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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, время: 22:36.


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