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

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

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

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

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

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

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

 
Опции темы

Структура приложения?

Непрочитано 06.04.2010, 00:57  
di_halt
Прописка
 
Аватар для di_halt
 
Регистрация: 17.10.2006
Сообщений: 147
Сказал спасибо: 2
Сказали Спасибо 22 раз(а) в 11 сообщении(ях)
di_halt на пути к лучшему
По умолчанию Re: Структура приложения?

Пример? Ну, в общем, вот такой вызов
====GCC-RTOS.с
ISR(ADC_vect)
{
SetTask(Convert_OUT);
}

Это дало:
+000000E9: 921F PUSH R1 Push register on stack
+000000EA: 920F PUSH R0 Push register on stack
+000000EB: B60F IN R0,0x3F In from I/O location
+000000EC: 920F PUSH R0 Push register on stack
+000000ED: 2411 CLR R1 Clear Register
+000000EE: 932F PUSH R18 Push register on stack
+000000EF: 933F PUSH R19 Push register on stack
+000000F0: 934F PUSH R20 Push register on stack
+000000F1: 935F PUSH R21 Push register on stack
+000000F2: 936F PUSH R22 Push register on stack
+000000F3: 937F PUSH R23 Push register on stack
+000000F4: 938F PUSH R24 Push register on stack
+000000F5: 939F PUSH R25 Push register on stack
+000000F6: 93AF PUSH R26 Push register on stack
+000000F7: 93BF PUSH R27 Push register on stack
+000000F8: 93EF PUSH R30 Push register on stack
+000000F9: 93FF PUSH R31 Push register on stack
72: SetTask(Convert_OUT);
+000000FA: EF8D LDI R24,0xFD Load immediate
+000000FB: E091 LDI R25,0x01 Load immediate
+000000FC: 940E02F2 CALL 0x000002F2 Call subroutine
73: }
+000000FE: 91FF POP R31 Pop register from stack
+000000FF: 91EF POP R30 Pop register from stack
+00000100: 91BF POP R27 Pop register from stack
+00000101: 91AF POP R26 Pop register from stack
+00000102: 919F POP R25 Pop register from stack
+00000103: 918F POP R24 Pop register from stack
+00000104: 917F POP R23 Pop register from stack
+00000105: 916F POP R22 Pop register from stack
+00000106: 915F POP R21 Pop register from stack
+00000107: 914F POP R20 Pop register from stack
+00000108: 913F POP R19 Pop register from stack
+00000109: 912F POP R18 Pop register from stack
+0000010A: 900F POP R0 Pop register from stack
+0000010B: BE0F OUT 0x3F,R0 Out to I/O location
+0000010C: 900F POP R0 Pop register from stack
+0000010D: 901F POP R1 Pop register from stack
+0000010E: 9518 RETI Interrupt return

Забросило дааалеко не все регистры ,а только те что активно юзаются по ходу пьессы.

SetTask находится
в EERTOS.c которая подключена просто к проекту (AVR Studio сама сделала мейк, я лишь подцепил исходник прям через среду, добавив в дерево проекта.)

Хидеры это хидеры, сорцы это сорцы. Кода в хидерах нет. Про инклюд я криво выразился. Эт ассемблерные привычки


Вот кусочек мейка:

## Include Directories
INCLUDES = -I"D:\Coding\AVR\GCC-RTOS\."

## Objects that must be built in order to link
OBJECTS = GCC-RTOS.o EERTOS.o HAL.o EERTOSHAL.o VM.o

## Objects explicitly added by the user
LINKONLYOBJECTS =

## Build
all: $(TARGET) GCC-RTOS.hex GCC-RTOS.eep GCC-RTOS.lss size

## Compile
GCC-RTOS.o: ../GCC-RTOS.c
$(CC) $(INCLUDES) $(CFLAGS) -c $‹

EERTOS.o: ../EERTOS.c
$(CC) $(INCLUDES) $(CFLAGS) -c $‹

HAL.o: ../HAL.c
$(CC) $(INCLUDES) $(CFLAGS) -c $‹

EERTOSHAL.o: ../EERTOSHAL.c
$(CC) $(INCLUDES) $(CFLAGS) -c $‹

VM.o: ../VM.c
$(CC) $(INCLUDES) $(CFLAGS) -c $‹
Реклама:
__________________
Мой блог по электронике - www.easyelectronics.ru

Последний раз редактировалось di_halt; 06.04.2010 в 01:00.
di_halt вне форума  
Непрочитано 06.04.2010, 01:37  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Структура приложения?

Сообщение от di_halt Посмотреть сообщение
Пример? Ну, в общем, вот такой вызов
Давайте проще, что б проблема вылезла во всей красе.
Итак main.c:
Код:
#include ‹avr/io.h›
#include ‹avr/interrupt.h›


void ExtFunc(void);

ISR(INT0_vect)
{
PORTD |= 0x01;
ExtFunc();
}

int main(void)
{
while(1){};
}
Доп. файл с одной функцией:
Код:
#include ‹avr/io.h›

void ExtFunc(void)
{
PORTD |= 0x02;
}
И что из этого вышло:
Код:
@00000030: __vector_1
8:        {
+00000030:   921F        PUSH    R1               Push register on stack
+00000031:   920F        PUSH    R0               Push register on stack
+00000032:   B60F        IN      R0,0x3F          In from I/O location
+00000033:   920F        PUSH    R0               Push register on stack
+00000034:   2411        CLR     R1               Clear Register
+00000035:   932F        PUSH    R18              Push register on stack
+00000036:   933F        PUSH    R19              Push register on stack
+00000037:   934F        PUSH    R20              Push register on stack
+00000038:   935F        PUSH    R21              Push register on stack
+00000039:   936F        PUSH    R22              Push register on stack
+0000003A:   937F        PUSH    R23              Push register on stack
+0000003B:   938F        PUSH    R24              Push register on stack
+0000003C:   939F        PUSH    R25              Push register on stack
+0000003D:   93AF        PUSH    R26              Push register on stack
+0000003E:   93BF        PUSH    R27              Push register on stack
+0000003F:   93EF        PUSH    R30              Push register on stack
+00000040:   93FF        PUSH    R31              Push register on stack
9:        PORTD |= 0x01;
+00000041:   9A90        SBI     0x12,0           Set bit in I/O register
10:       ExtFunc();
+00000042:   D011        RCALL   PC+0x0012        Relative call subroutine
+00000043:   91FF        POP     R31              Pop register from stack
+00000044:   91EF        POP     R30              Pop register from stack
+00000045:   91BF        POP     R27              Pop register from stack
+00000046:   91AF        POP     R26              Pop register from stack
+00000047:   919F        POP     R25              Pop register from stack
+00000048:   918F        POP     R24              Pop register from stack
+00000049:   917F        POP     R23              Pop register from stack
+0000004A:   916F        POP     R22              Pop register from stack
+0000004B:   915F        POP     R21              Pop register from stack
+0000004C:   914F        POP     R20              Pop register from stack
+0000004D:   913F        POP     R19              Pop register from stack
+0000004E:   912F        POP     R18              Pop register from stack
+0000004F:   900F        POP     R0               Pop register from stack
+00000050:   BE0F        OUT     0x3F,R0          Out to I/O location
+00000051:   900F        POP     R0               Pop register from stack
+00000052:   901F        POP     R1               Pop register from stack
+00000053:   9518        RETI                     Interrupt return
А теперь перенесем функцию:
Код:
#include ‹avr/io.h›
#include ‹avr/interrupt.h›


void ExtFunc(void);

ISR(INT0_vect)
{
PORTD |= 0x01;
ExtFunc();
}

void ExtFunc(void)
{
PORTD |= 0x02;
}

int main(void)
{
while(1){};
}
И получим:
Код:
@00000032: __vector_1
8:        {
+00000032:   921F        PUSH    R1               Push register on stack
+00000033:   920F        PUSH    R0               Push register on stack
+00000034:   B60F        IN      R0,0x3F          In from I/O location
+00000035:   920F        PUSH    R0               Push register on stack
+00000036:   2411        CLR     R1               Clear Register
9:        PORTD |= 0x01;
+00000037:   9A90        SBI     0x12,0           Set bit in I/O register
+00000038:   9A91        SBI     0x12,1           Set bit in I/O register
+00000039:   900F        POP     R0               Pop register from stack
+0000003A:   BE0F        OUT     0x3F,R0          Out to I/O location
+0000003B:   900F        POP     R0               Pop register from stack
+0000003C:   901F        POP     R1               Pop register from stack
+0000003D:   9518        RETI                     Interrupt return
Не совсем одно и то же - не находите?
kison вне форума  
Непрочитано 06.04.2010, 18:44  
neiver
Временная регистрация
 
Регистрация: 30.07.2007
Сообщений: 51
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
neiver на пути к лучшему
По умолчанию Re: Структура приложения?

Вставлю свои 5 копеек.
Я вообще отказался от принципов раздельной компиляции на 8-ми контроллерах. Пишу на С++. Библиотечный код реализую в виде шаблонов классов, которые естественно находятся в заголовках. В программе часто (не всегда) всего одна единица трансляции. У комилятора всегда есть необходимая для оптимизации информация. И проблем, подобных той, что привел kison не возникает.

По теме:
Кольцевой буфер
Диспетчер
Пример использования диспетчера
neiver вне форума  
Непрочитано 17.04.2010, 02:45  
Markusha
Временная регистрация
 
Регистрация: 18.07.2006
Сообщений: 90
Сказал спасибо: 8
Сказали Спасибо 13 раз(а) в 9 сообщении(ях)
Markusha на пути к лучшему
По умолчанию Re: Структура приложения?

Сообщение от di_halt Посмотреть сообщение
Вложенные флаги? Или проверяете только первый же встретившийся, а там на следующую итерацию главного цикла? Легко получить блокировку нижестоящих задач.
Вставлю свои три копейки.. Для задач средней сложности, флаговый автомат - самое то А чтобы задачи, выстреливающие раз в сутки, не задвигались, стОит (даже при применении вложенных флагов) их в самый верх очереди ставить. Потеря десяти тактов, погоды не сделает. И какбэ разумно, вообще, задачи в очереди проверки расставлять.
Markusha вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка приложения Splan 7 Talisman45 Proteus, KiCAD и другие ECAD 2 07.02.2010 18:22


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


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