
Распологается там, где обычно прописаны вызываемые процедуры. В этом
отношении ничего не поменялось. В принципе, вызывать можно код и из
внешнего файла, главное правильно прописать все это в таблице переходов.
В тестовом примере это выглядит так:
Расположение: Trash-rtos.asm - главный файл программы
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
;=========================================================
;Tasks
;=========================================================
Idle: RET ; Задача пустого цикла, но ничего
; не мешает сунуть сюда любой код.
; Он будет выполнен. В последнюю очередь.
;-------------------------------------------------------
Fire: LDS OSRG,U_B ; Это код задачи "Fire"
OUTI UDR,'A' ; Выдрано из реального проекта
; Суть данного кода не важна
CBI PORTD,7 ; Поэтому можешь не вникать. Тут
NOP ; Может быть абсолютно любой
NOP ; код -- код твоей задачи!
SBI PORTD,7
; Если любопытно, то тут обычное
LDS Counter,PovCT ; заполнение сдвигового регистра
LDPA Lines ; из трех микросхем 74HC164
; средствами SPI передатчика
CLR OSRG ; Оставил его лишь для примера.
; Чтобы наглядно показать, что
ADD ZL,Counter ; Из себя представляет задача.
ADC ZH,OSRG
LPM OSRG,Z+
OUT SPDR,OSRG
Wait0: SBIS SPSR,SPIF
RJMP Wait0
INC Counter
CPI Counter,150
BRSH Clear
STS PovCT,Counter
RET
Clear: CLR Counter
STS PovCT,Counter
RET ; Выход из задачи только по RET!!!
;-------------------------------------------------------
Task2: RET ; Это пустые заглушки. На этом месте
; могла бы быть ваша задача! :)
;-------------------------------------------------------
Task3: RET ; Аналогично, надо будет задействую.
;-------------------------------------------------------
Task4
: RET ; Названия в стиле Task4 тоже живут
; недолго. Обычно переименовываю
;-------------------------------------------------------