Обновить логгер УМП и исправить запуск UART и EEPROM
Перейти на компактные 12-словные записи v4 и сохранять 10 процентов банка после отключения. Добавить трёхсекундное ожидание роста ЗПТ и настраиваемый лимит пусков. Явно инициализировать состояние UART и гарантировать публикацию параметров EEPROM перед запуском Timer2. Сохранить воспроизводимые сборки, регрессионные проверки, документацию и обновлённые результаты сборки; исключить временные артефакты.
This commit is contained in:
34
.gitignore
vendored
34
.gitignore
vendored
@@ -24,3 +24,37 @@
|
||||
/Bin/*.bin.manifest.json
|
||||
# Исключает из Git артефакты по шаблону ниже.
|
||||
/Bin/*.bin.sha256
|
||||
# Кэш Python восстанавливается автоматически и не относится к исходникам прошивки.
|
||||
**/__pycache__/
|
||||
# Загруженные локальные инструменты документации не нужны для хранения изменений проекта.
|
||||
/Doc/.tools/
|
||||
# HTML-документация и диагностические журналы Doxygen создаются из исходных документов.
|
||||
/Doc/build/
|
||||
# Объекты компиляции восстанавливаются скриптами сборки и зависят от локальных инструментов TI.
|
||||
/Bin/**/obj/
|
||||
# Паспорт и заголовок конкретной сборки генерируются перед компиляцией из версии и состояния Git.
|
||||
/Bin/**/generated/
|
||||
# Исполняемые образы TI в экспериментальных каталогах являются результатом компиляции.
|
||||
/Bin/**/*.out
|
||||
# Карты новых сборок воспроизводятся линкером; ранее отслеживаемые карты остаются в Git.
|
||||
/Bin/**/*.map
|
||||
# HEX новых сборок дублирует локальные OUT/BIN; уже отслеживаемые образы сохраняются в истории.
|
||||
/Bin/**/*.hex
|
||||
# Листинги TI создаются из OUT для проверки порядка машинных инструкций EEPROM.
|
||||
/Bin/**/*disassembly*.txt
|
||||
# Кандидат SCI8 предназначен для проверки перед выпуском окончательного образа.
|
||||
/Bin/**/*.candidate
|
||||
# Локальные загрузочные образы пересоздаются из исходников и скриптов соответствующей сборки.
|
||||
/Bin/**/*.bin
|
||||
# Манифест конкретного образа содержит время и состояние локальной сборки.
|
||||
/Bin/**/*.bin.manifest.json
|
||||
# Контрольная сумма создаётся вместе с локальным загрузочным образом.
|
||||
/Bin/**/*.bin.sha256
|
||||
# Журналы компиляции и диагностики зависят от локального запуска инструментов.
|
||||
/Bin/**/*.log
|
||||
# Копии паспорта в каталогах с отметкой времени дублируют генерируемые метаданные сборки.
|
||||
/Bin/**/firmware_identity.json
|
||||
# Снимки интерфейса, использованные для проверки состава каналов, являются локальными артефактами.
|
||||
/Bin/**/logger_channels.png
|
||||
# Снимки предпросмотра защиты используются только при визуальной проверке интерфейса.
|
||||
/Bin/**/gui_preview.png
|
||||
|
||||
41
Bin/EepromPublishFix/rebuild.py
Normal file
41
Bin/EepromPublishFix/rebuild.py
Normal file
File diff suppressed because one or more lines are too long
41
Bin/StartupWait3s/rebuild.py
Normal file
41
Bin/StartupWait3s/rebuild.py
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -12,20 +12,20 @@ PHYSICAL MEMORY PARAMETERS
|
||||
|
||||
BOOT LOADER PARAMETERS
|
||||
Table Type: SERIAL PORT (SCI 8 bit Mode)
|
||||
Entry Point: 0x0000b9b5
|
||||
Entry Point: 0x0000a8d1
|
||||
|
||||
|
||||
OUTPUT TRANSLATION MAP
|
||||
--------------------------------------------------------------------------------
|
||||
00000000..003fffff Page=0 Memory Width=8 ROM Width=8
|
||||
--------------------------------------------------------------------------------
|
||||
OUTPUT FILES: UKSSTMS320F28335_34a95bc5.bin [b0..b7]
|
||||
OUTPUT FILES: UKSSTMS320F28335_c6c91282.bin.pending [b0..b7]
|
||||
|
||||
CONTENTS: 00000000..00007f05 BOOT TABLE
|
||||
.cinit : dest=0000c000 size=0000028b width=00000002
|
||||
.text : dest=00008000 size=00003b73 width=00000002
|
||||
.econst : dest=0000c28c size=00000125 width=00000002
|
||||
.switch : dest=0000c3b2 size=00000048 width=00000002
|
||||
CONTENTS: 00000000..00007ffb BOOT TABLE
|
||||
.cinit : dest=0000c000 size=00000273 width=00000002
|
||||
.text : dest=00008000 size=00003bfc width=00000002
|
||||
.econst : dest=0000c274 size=0000012b width=00000002
|
||||
.switch : dest=0000c3a0 size=0000004c width=00000002
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
00000000..003fffff Page=1 Memory Width=8 ROM Width=8 "*DEFAULT PAGE 1*"
|
||||
|
||||
41
Bin/UartColdStart/rebuild.py
Normal file
41
Bin/UartColdStart/rebuild.py
Normal file
File diff suppressed because one or more lines are too long
@@ -1,15 +1,20 @@
|
||||
# Проверка комментариев и кодировки
|
||||
|
||||
Проверка относится к редактируемым исходникам C/H, ASM, CMD, тестовым INC и Python.
|
||||
Каждая непустая строка кода имеет русское пояснение перед ней или на ней. Пустые строки,
|
||||
текст существующих комментариев и содержимое многострочных строк данных не считаются кодом.
|
||||
Для каждой непустой строки кода проверяется русский текст на ней или непосредственно перед ней.
|
||||
Пустые строки, текст комментариев и содержимое многострочных строк данных не считаются кодом.
|
||||
Качество и достоверность пояснений этой проверкой не устанавливаются; совпадение возможно и в строковом литерале.
|
||||
Охват: исходники из Git-индекса. Сгенерированные файлы и подключённые соседние библиотеки проверяются отдельно.
|
||||
Исходные уведомления TI сохранены. JSON-паспорта, индексы IDE, таблицы XLS и двоичные
|
||||
результаты сборки не допускают исходных комментариев; их назначение описано в документации.
|
||||
|
||||
UTF-8 проверен в 151 текстовых файлах. Строк кода: 18624.
|
||||
UTF-8 проверен в 157 текстовых файлах. Строк кода: 18866.
|
||||
|
||||
| Файл | Строк кода | С русским пояснением |
|
||||
| Файл | Строк кода | С русским текстом рядом |
|
||||
| --- | ---: | ---: |
|
||||
| Bin/EepromPublishFix/rebuild.py | 41 | 41 |
|
||||
| Bin/StartupWait3s/rebuild.py | 41 | 41 |
|
||||
| Bin/UartColdStart/rebuild.py | 41 | 41 |
|
||||
| F28335.cmd | 69 | 69 |
|
||||
| Source/External/v120/DSP2833x_common/include/DSP2833x_DefaultIsr.h | 89 | 89 |
|
||||
| Source/External/v120/DSP2833x_common/include/DSP2833x_Dma_defines.h | 44 | 44 |
|
||||
@@ -52,7 +57,7 @@ UTF-8 проверен в 151 текстовых файлах. Строк код
|
||||
| Source/External/v120/DSP2833x_headers/include/DSP2833x_Xintf.h | 77 | 77 |
|
||||
| Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c | 301 | 301 |
|
||||
| Source/Internal/ADC.c | 244 | 244 |
|
||||
| Source/Internal/DAC.c | 244 | 244 |
|
||||
| Source/Internal/DAC.c | 253 | 253 |
|
||||
| Source/Internal/Include/ADC.h | 4 | 4 |
|
||||
| Source/Internal/Include/DAC.h | 11 | 11 |
|
||||
| Source/Internal/Include/GPIO_table.h | 329 | 329 |
|
||||
@@ -66,27 +71,27 @@ UTF-8 проверен в 151 текстовых файлах. Строк код
|
||||
| Source/Internal/Include/filter_bat2.h | 36 | 36 |
|
||||
| Source/Internal/Include/gas167.h | 17 | 17 |
|
||||
| Source/Internal/Include/kanal.h | 1 | 1 |
|
||||
| Source/Internal/Include/log_to_mem.h | 37 | 37 |
|
||||
| Source/Internal/Include/log_to_mem.h | 36 | 36 |
|
||||
| Source/Internal/Include/measure.h | 90 | 90 |
|
||||
| Source/Internal/Include/message.h | 32 | 32 |
|
||||
| Source/Internal/Include/package.h | 127 | 127 |
|
||||
| Source/Internal/Include/package.h | 128 | 128 |
|
||||
| Source/Internal/Include/peripher.h | 128 | 128 |
|
||||
| Source/Internal/Include/pulto.h | 1 | 1 |
|
||||
| Source/Internal/Include/spise2p.h | 74 | 74 |
|
||||
| Source/Internal/Include/tools.h | 5 | 5 |
|
||||
| Source/Internal/Include/ump_can_protocol.h | 8 | 8 |
|
||||
| Source/Internal/RS485.c | 530 | 530 |
|
||||
| Source/Internal/RS485.c | 534 | 534 |
|
||||
| Source/Internal/bios.c | 236 | 236 |
|
||||
| Source/Internal/cntrl_adr.c | 17 | 17 |
|
||||
| Source/Internal/crc16.c | 158 | 158 |
|
||||
| Source/Internal/ecan.c | 242 | 242 |
|
||||
| Source/Internal/ecan.c | 236 | 236 |
|
||||
| Source/Internal/filter_bat2.c | 12 | 12 |
|
||||
| Source/Internal/gas167.c | 53 | 53 |
|
||||
| Source/Internal/gas167.c | 54 | 54 |
|
||||
| Source/Internal/kanal.c | 153 | 153 |
|
||||
| Source/Internal/log_to_mem.c | 236 | 236 |
|
||||
| Source/Internal/log_to_mem.c | 217 | 217 |
|
||||
| Source/Internal/main.c | 167 | 167 |
|
||||
| Source/Internal/measure.c | 625 | 625 |
|
||||
| Source/Internal/message.c | 289 | 289 |
|
||||
| Source/Internal/message.c | 293 | 293 |
|
||||
| Source/Internal/peripher.c | 227 | 227 |
|
||||
| Source/Internal/pulto.c | 88 | 88 |
|
||||
| Source/Internal/shared_ump.c | 4 | 4 |
|
||||
@@ -95,16 +100,17 @@ UTF-8 проверен в 151 текстовых файлах. Строк код
|
||||
| UKSSTMS320F28335/28335_RAM_lnk.cmd | 58 | 58 |
|
||||
| UKSSTMS320F28335/firmware_version.h | 6 | 6 |
|
||||
| UKSSTMS320F28335/prepare_identity.py | 41 | 41 |
|
||||
| tests/comments/run_test.py | 127 | 127 |
|
||||
| tests/comments/run_test.py | 129 | 129 |
|
||||
| tests/eeprom_profiles/check_publication.py | 18 | 18 |
|
||||
| tests/eeprom_profiles/run_test.py | 20 | 20 |
|
||||
| tests/eeprom_profiles/spi_test.c | 46 | 46 |
|
||||
| tests/eeprom_profiles/stubs/DSP2833x_Device.h | 22 | 22 |
|
||||
| tests/firmware_identity/check_build.py | 35 | 35 |
|
||||
| tests/firmware_identity/port_test.c | 29 | 29 |
|
||||
| tests/gas167/check_image.py | 44 | 44 |
|
||||
| tests/gas167/gas167_test.c | 191 | 191 |
|
||||
| tests/gas167/run_test.py | 45 | 45 |
|
||||
| tests/load_control/load_control_test.c | 93 | 93 |
|
||||
| tests/gas167/gas167_test.c | 213 | 213 |
|
||||
| tests/gas167/run_test.py | 49 | 49 |
|
||||
| tests/load_control/load_control_test.c | 170 | 170 |
|
||||
| tests/load_control/run_test.py | 15 | 15 |
|
||||
| tests/load_control/stubs/DSP2833x_Device.h | 9 | 9 |
|
||||
| tests/load_control/stubs/DSP2833x_SWPrioritizedIsrLevels.h | 0 | 0 |
|
||||
@@ -112,13 +118,13 @@ UTF-8 проверен в 151 текстовых файлах. Строк код
|
||||
| tests/load_control/stubs/filter_bat2.h | 0 | 0 |
|
||||
| tests/load_control/stubs/measure.h | 4 | 4 |
|
||||
| tests/load_control/stubs/message.h | 1 | 1 |
|
||||
| tests/load_control/stubs/package.h | 17 | 17 |
|
||||
| tests/load_control/stubs/package.h | 18 | 18 |
|
||||
| tests/load_control/stubs/peripher.h | 14 | 14 |
|
||||
| tests/load_control/stubs/tools.h | 0 | 0 |
|
||||
| tests/rs232_fifo/model.inc | 113 | 113 |
|
||||
| tests/rs232_fifo/model.inc | 122 | 122 |
|
||||
| tests/rs232_fifo/run_test.py | 53 | 53 |
|
||||
| tests/ump_logger/init_test.c | 52 | 52 |
|
||||
| tests/ump_logger/recorder_test.c | 151 | 151 |
|
||||
| tests/ump_logger/init_test.c | 44 | 44 |
|
||||
| tests/ump_logger/recorder_test.c | 152 | 152 |
|
||||
| tests/ump_logger/run_init_test.py | 30 | 30 |
|
||||
| tests/ump_logger/run_test.py | 34 | 34 |
|
||||
| tests/ump_logger/stubs/ADC.h | 1 | 1 |
|
||||
|
||||
@@ -21,7 +21,7 @@ CLI define EEPROM_M95M02 должен передаваться и компиля
|
||||
| 0x5051 | 0x0051 | Штатный регистр останова | RW |
|
||||
| 0x5052 | 0x0052 | CAN timeout LOAD, мс | RW; для LOAD 1…60000 |
|
||||
| 0x507C | 0x007C | LOAD_STATUS | Только чтение для LOAD |
|
||||
| 0x507D | 0x007D | LOAD_ATTEMPTS | Только чтение для LOAD |
|
||||
| 0x507D | 0x007D | LOAD_MAX_ATTEMPTS, лимит пусков | RW; для LOAD 1…65535, по умолчанию 5 |
|
||||
| 0x507E | 0x007E | LastMode | Как штатный регистр |
|
||||
| 0x507F | 0x007F | Commands, битовая маска | RW; штатная фиксация команды |
|
||||
| 0x5F00…0x5F07 | Константы GAS-профиля | Сигнатура, версия, возможности | Только чтение |
|
||||
@@ -66,7 +66,8 @@ CLI define EEPROM_M95M02 должен передаваться и компиля
|
||||
| Функция отличается от 3/6 | Код 1, illegal function |
|
||||
| Адрес вне региона; блок пересекает границу; запись паспорта GAS | Код 2, illegal address |
|
||||
| FC03 quantity = 0 или >124; нечётное количество CAN | Код 3, illegal value |
|
||||
| LOAD: запись 0x507C или 0x507D | Код 2; значения не меняются |
|
||||
| LOAD: запись 0x507C | Код 2; статус не меняется |
|
||||
| LOAD: запись нуля в 0x507D | Код 3; прежний лимит не меняется |
|
||||
| LOAD: запись timeout 0 или >60000 в 0x5052 | Код 3; значение не меняется |
|
||||
| Запись 0x507F | Штатная запись Commands и вызов ump_log_rs, как при FC06(0x007F) |
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ GAS_ID = номер_узла × 1000 + смещение
|
||||
| `DAC_stop` | `0x0051` | 5081 | 6081 |
|
||||
| `LOAD_CAN_TIMEOUT` | `0x0052` | 5082 | 6082 |
|
||||
| `LOAD_STATUS` | `0x007C` | 5124 | 6124 |
|
||||
| `LOAD_ATTEMPTS` | `0x007D` | 5125 | 6125 |
|
||||
| `LOAD_MAX_ATTEMPTS` | `0x007D` | 5125 | 6125 |
|
||||
| `LastMode` | `0x007E` | 5126 | 6126 |
|
||||
| `Commands` | `0x007F` | 5127 | 6127 |
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,9 +1,10 @@
|
||||
# Назначение исходников Бальзам-167
|
||||
|
||||
Все редактируемые исходники C/H, ASM, CMD и Python используют UTF-8 без BOM.
|
||||
Каждая строка кода снабжена русским пояснением. Существующие уведомления TI
|
||||
и сведения о поставляемых файлах сохранены. Таблица покрытия и воспроизводимая
|
||||
проверка находятся в [COMMENT_AUDIT.md](COMMENT_AUDIT.md) и
|
||||
Русский текст найден рядом с каждой строкой исходников из Git-индекса, однако
|
||||
часть пояснений шаблонная и требует содержательной доработки. Существующие уведомления TI
|
||||
и сведения о поставляемых файлах сохранены. Таблица формального покрытия,
|
||||
ограничения проверки и результаты проверки качества находятся в [COMMENT_AUDIT.md](COMMENT_AUDIT.md) и
|
||||
../tests/comments/run_test.py.
|
||||
|
||||
## Порядок работы
|
||||
@@ -29,7 +30,7 @@ Timer1 задаёт основную частоту READY_FREQ=1000 Гц. Для
|
||||
| ADC.c | Настройка каналов АЦП, обработка преобразований и обновление фильтров. |
|
||||
| measure.c | Типы датчиков, температурные/токовые/мощностные расчёты, диагностика, периодический такт. |
|
||||
| filter_bat2.c | Накопительный фильтр; история и сумма обновляются вместе с новым отсчётом. |
|
||||
| DAC.c | Передача слов ЦАП и автомат нагрузки: свежесть CAN, напряжение, STOP и максимум пять пусков. |
|
||||
| DAC.c | Передача слов ЦАП и автомат нагрузки: свежесть CAN, напряжение, STOP и настраиваемый лимит пусков. |
|
||||
| ecan.c | Штатные CAN-кадры и отдельный служебный обмен УМП/GAS; ISR принимает, главный цикл передаёт ответ. |
|
||||
| RS485.c | SCI-A/SCI-B, разбор кадров и упаковка слов; FIFO используется только первым портом. |
|
||||
| message.c | FC03/FC06, маршрутизация УМП/GAS, заводские и сохраняемые параметры. |
|
||||
@@ -49,10 +50,13 @@ Timer1 задаёт основную частоту READY_FREQ=1000 Гц. Для
|
||||
|
||||
package.h определяет аппаратные адреса и псевдонимы modbus. Стартовый ток
|
||||
находится в 0x50, конечный — в 0x51. Сохраняемый LOAD_CAN_TIMEOUT занимает 0x52:
|
||||
разрешено 1..60000 мс; заводское значение 600 мс устанавливается Default_params.
|
||||
разрешено 1..60000 мс; заводское значение 2000 мс устанавливается Default_params.
|
||||
Setup_DAC_time исправляет недопустимое сохранённое значение на 600 мс.
|
||||
Load_runner дополнительно использует 600 мс для локальной страховки при
|
||||
недопустимом значении. LOAD_STATUS=0x7C и LOAD_ATTEMPTS=0x7D доступны для чтения.
|
||||
недопустимом значении. LOAD_STATUS=0x7C доступен только для чтения.
|
||||
LOAD_MAX_ATTEMPTS=0x7D — сохраняемый лимит 1..65535 пусков, по умолчанию 5;
|
||||
ноль при записи отклоняется. Текущий счётчик остаётся в слове 5 блока
|
||||
FC03(0x1300, 8), а подготовка тактов ЦАП не обнуляет настроенный лимит.
|
||||
|
||||
eeprom_config.h выбирает физическую микросхему при сборке. spise2p.h задаёт
|
||||
ширину адреса, длину страницы и типы задания SPI. gas167.h описывает границы
|
||||
|
||||
@@ -3,29 +3,33 @@
|
||||
## Назначение и работа оператора
|
||||
|
||||
В SetGUI открыть ПМ35 → Настройки, выбрать COM, скорость (обычно 115200)
|
||||
и адрес контроллера (обычно 16). Затем открыть вкладку **Логгер УМП**.
|
||||
и адрес контроллера (для рассматриваемого УМП — 5). Затем открыть вкладку **Логгер УМП**.
|
||||
Подключение используется существующее: прямой RS232/RS485 Modbus RTU.
|
||||
CAN-команды от управляющего контроллера фиксируются самой платой нагрузки.
|
||||
|
||||
1. **Начать запись** включает только регистратор, не пуск УМП.
|
||||
Период снимков по умолчанию 20 мс, диапазон 1–1000 мс.
|
||||
2. Флажки выбирают отображаемые сигналы. Аналоги рисуются линиями,
|
||||
2. Левые флажки выбирают отображаемые сигналы. Аналоги рисуются линиями,
|
||||
дискретные сигналы — отдельными дорожками. Выбор не меняет состав
|
||||
записи на плате: скрытую кривую можно включить после захвата.
|
||||
3. **Онлайн** подключает график к уже идущей записи, в том числе после
|
||||
восстановления соединения. Тайм-аут не посылает плате команду останова.
|
||||
4. Фронт `cUMPreset` (бит 6 команды 0x7F) или спад `cUMPstart` (бит 7)
|
||||
запускает фиксацию отключения. Ещё через 1000 тиков таймера / 1 секунду
|
||||
банк становится архивом. Повторные команды внутри этой секунды
|
||||
не продлевают интервал. Другие изменения команд не служат триггером.
|
||||
4. Фактическое включение STOP при переходе работающей нагрузки к снятому
|
||||
разрешению запускает фиксацию отключения. Постинтервал содержит 10%
|
||||
банка — 76 последующих точек, включая события CAN и I/O. Повторные
|
||||
STOP при уже остановленной нагрузке архив не заменяют.
|
||||
5. **Прочитать отключение** загружает архив, не останавливая запись на плате.
|
||||
На время чтения и просмотра архива онлайн-график приостанавливается;
|
||||
вернуться к нему можно кнопкой **Онлайн**.
|
||||
6. **Остановить и прочитать** останавливает только регистратор и читает
|
||||
текущий банк. При этом существующий архив отключения остаётся доступным.
|
||||
7. **Сохранить CSV** сохраняет все поля загруженного/онлайн-буфера,
|
||||
включая невидимые кривые, время и код события. История GUI ограничена
|
||||
800 последними точками; это не непрерывная запись на диск.
|
||||
7. **Сохранить CSV** сохраняет поля загруженного/онлайн-буфера, выбранные
|
||||
правыми флажками «Запись в лог», а также время и код события. Выбор
|
||||
не зависит от видимости кривой. Множители графика не изменяют значения CSV.
|
||||
**Буфер GUI** задаёт число последних точек: от 800 до 100000, по умолчанию
|
||||
10000. Это отдельный буфер ПК, не ёмкость банка платы и не непрерывная
|
||||
запись на диск. **Сохранить график из GUI** позволяет выгрузить накопленную
|
||||
онлайн-историю после чтения архива платы.
|
||||
|
||||
При разрыве связи журнал на плате продолжает работать. Архив хранится в ОЗУ
|
||||
до следующей фиксации отключения либо перезагрузки/пропадания питания.
|
||||
@@ -35,23 +39,21 @@ EEPROM не используется: под отключением в этой
|
||||
## Память и точность
|
||||
|
||||
Использована существующая секция `.logg` по адресу 0x200000: 64000
|
||||
16-битных слов. Два банка по 760 записей × 42 слова занимают 63840 слов (160 слов свободны).
|
||||
Текущий банк кольцевой. При триггере сохраняются последние до 379 записей,
|
||||
добавляется событие отключения, оставшаяся половина банка отведена
|
||||
постинтервалу. При 20 мс это до примерно 7.6 секунды до отключения и 1 секунды
|
||||
после. Дополнительные события CAN и дискретов сокращают временную глубину.
|
||||
|
||||
При интенсивном потоке событий или периоде 1 мс постинтервал может заполнить
|
||||
свои места раньше секунды. Последнее место зарезервировано под конечный
|
||||
снимок; он помечается `event & 0x200`, и GUI сообщает об усечении.
|
||||
Событие отключения и предыстория при этом не вытесняются.
|
||||
16-битных слов. Два банка по 760 записей × 12 слов занимают 18240 слов.
|
||||
Ёмкость в точках сохранена; сокращённая запись освобождает оставшуюся часть
|
||||
выделенного массива. При триггере сохраняются до 683 предыдущих точек,
|
||||
событие отключения и 76 последующих точек. При периоде 20 мс и отсутствии
|
||||
дополнительных событий постинтервал составляет примерно 1,52 секунды.
|
||||
События CAN и дискретов сокращают его временную длительность, но не число
|
||||
зарезервированных точек. Архив после заполнения постинтервала фиксируется,
|
||||
а запись продолжается в другом банке.
|
||||
|
||||
Время — 32-битный счётчик миллисекунд записи. Он идёт только при включённом
|
||||
регистраторе и не является абсолютным временем. События в одном тике имеют
|
||||
одинаковую отметку; порядок сохраняется порядком записей. На перезапуске
|
||||
регистратора счётчик продолжает прежнюю шкалу, при перезагрузке платы — 0.
|
||||
|
||||
Онлайн-опрос возвращает две последние записи каждые 40 мс. Он не гарантирует
|
||||
Онлайн-опрос возвращает до десяти последних записей каждые 40 мс. Он не гарантирует
|
||||
передачу каждого события при высоком CAN-трафике, медленном UART или паузах
|
||||
GUI. Номера записей позволяют убрать дубликаты и явно показать пропуски.
|
||||
Полный сохранившийся фрагмент следует читать кнопкой архива. Частота 20 мс
|
||||
@@ -63,55 +65,55 @@ GUI. Номера записей позволяют убрать дублика
|
||||
EEPROM, выделения памяти или копирования целого банка. Реальную задержку
|
||||
прерываний и длительность критических секций нужно измерить на F28335.
|
||||
|
||||
## Состав записи v3: 42 слова
|
||||
## Состав записи v4: 12 слов
|
||||
|
||||
Из прошивки и списка графиков удалены 32 неотмеченных канала с двух
|
||||
скриншотов: остатки импульса/инициализации, код и калибровки ЦАП,
|
||||
измерения, ошибки, сырые CAN-слова/счётчики, маска команд, параметры
|
||||
разгона и каналы АЦП. Рабочие калибровочные регистры и сами измерения
|
||||
для управления платой продолжают использоваться по назначению.
|
||||
|
||||
В интерфейсе осталось 15 каналов:
|
||||
|
||||
| Группа | Каналы |
|
||||
|---|---|
|
||||
| Ток и уставки | Расчётное задание тока, начальная уставка, конечная уставка — мА |
|
||||
| Напряжения | ЗПТ1: U1 + U2 (ПМ67, рег. 306); ЗПТ2: U3 + U4 (ПМ67, рег. 9) — В |
|
||||
| Команды | Пуск УМП, сброс УМП |
|
||||
| Входы | OMEGA, Start_1, Res_in |
|
||||
| Выходы | START_DPTB, STOP_DPTB, RES_OUT_2 |
|
||||
| События | Событие отключения, усечение постинтервала |
|
||||
|
||||
«Усечение постинтервала» оставлено для чтения прежних журналов; текущая
|
||||
прошивка v4 бит 9 события не устанавливает. Расчётное задание тока —
|
||||
команда аналоговому выходу, а не измеренный физический ток петли.
|
||||
Для отображения физических единиц у пяти аналоговых каналов нужен
|
||||
множитель ×1,000. Сохранённые пользовательские множители восстанавливаются
|
||||
при запуске GUI; например, ×94,000 меняет только высоту кривой, не ток платы.
|
||||
|
||||
| Слова | Данные | Единицы/смысл |
|
||||
|---|---|---|
|
||||
| 0–1 | Время, младшее/старшее слово | мс записи |
|
||||
| 2 | Событие | 1 период, 2 CAN RX, 3 изменение I/O, 4 RS-команда, 5 конец постинтервала |
|
||||
| 2, бит 8 | Триггер отключения | флаг поверх причины события |
|
||||
| 2, бит 9 | Усечён постинтервал | установлен в конечном снимке |
|
||||
| 3 | Commands / modbus[0x7F] | все 16 бит, в том числе пуск, сброс, инициализация и калибровка ЦАП |
|
||||
| 4 | Входы OMEGA, Start_1, Res_in | биты 0,1,2, активный уровень приведён к 1 |
|
||||
| 5 | START_DPTB, STOP_DPTB, RES_OUT_2 | биты 0,1,2, активный уровень приведён к 1 |
|
||||
| 6 | IMPowse | остаток импульса, мс |
|
||||
| 7 | WAKEpowse | остаток инициализации, тики DAC_FREQ |
|
||||
| 8 | modbus[0x7B] | 12-битный код, переданный функцией dSEND в ЦАП |
|
||||
| 9 | modbus[0x1C] | расчётное задание в 0.1 мА; GUI/CSV переводит в мА |
|
||||
| 10–13 | sens_data[0..3] | измеренные сигналы, знаковое 16-битное значение в исходном масштабе |
|
||||
| 14–17 | modbus[0..3] | маски ошибок измерений |
|
||||
| 18 | CAN заголовок | адрес регистра в младших 13 битах и маска трёх слов в старших |
|
||||
| 19–21 | Три слова последнего принятого CAN-кадра | без преобразования |
|
||||
| 22 | Счётчик записанных CAN RX | младшие 16 бит |
|
||||
| 23 | CanTimeOutErrorTR | младшие 16 бит счётчика тайм-аутов CAN TX |
|
||||
| 24–25 | DAC_go, DAC_stop | исходные начальная/конечная уставки, мА |
|
||||
| 26–28 | DAC_min(), DAC_max(), DAC_cal() | коды калибровки и ручного задания ЦАП |
|
||||
| 29–30 | DAC_04, DAC_20 | значения соответствующих регистров |
|
||||
| 31–32 | count_load, time_dac | положение и длительность разгона в тиках |
|
||||
| 33–34 | эффективные dac_go/dac_stop + 4 | 0.1 мА после ограничений алгоритма; GUI переводит в мА |
|
||||
| 35 | kod | целочисленное положение, используемое Anal_output |
|
||||
| 36–39 | ADC_table[0..3] | значения таблицы АЦП в исходном масштабе прошивки |
|
||||
| 40 | ЗПТ1: U1 + U2, ПМ67 регистр 306 / индекс 305 | исходное 16-битное слово без пересчёта |
|
||||
| 41 | ЗПТ2: U3 + U4, ПМ67 регистр 9 / индекс 8 | исходное 16-битное слово без пересчёта |
|
||||
| 2 | Событие | 1 — период, 2 — CAN, 3 — I/O, 4 — RS, 5 — конец постинтервала |
|
||||
| 2, бит 8 | Событие отключения | флаг поверх причины |
|
||||
| 2, бит 9 | Усечение постинтервала | совместимость со старыми журналами; в текущем v4 равен 0 |
|
||||
| 3 | Команды пуска и сброса | только биты 7 и 6; отдельной кривой маски команд больше нет |
|
||||
| 4 | Входы OMEGA, Start_1, Res_in | биты 0, 1, 2 |
|
||||
| 5 | Выходы START_DPTB, STOP_DPTB, RES_OUT_2 | биты 0, 1, 2 |
|
||||
| 6 | Расчётное задание тока | 0,1 мА; GUI/CSV показывает мА |
|
||||
| 7–8 | Начальная/конечная уставки | целые мА |
|
||||
| 9–10 | ЗПТ1/ЗПТ2 | беззнаковые слова, масштаб 1 В/ед. |
|
||||
| 11 | Нулевой резерв | чётная длина для передачи CAN парами слов |
|
||||
|
||||
Напряжения принимаются из технологических CAN-кадров с нулевыми индексами
|
||||
305 и 8. Учитываются все три позиции и биты маски 0x8000/0x4000/0x2000.
|
||||
Они хранятся отдельно от массива modbus[0..127], обновляются и при выключенном
|
||||
логгере. Запись содержит последние принятые значения; до первого приёма — 0.
|
||||
При потере связи остаётся последнее значение: отдельного признака свежести нет.
|
||||
Масштаб и знаковость физического напряжения не заданы исходной таблицей;
|
||||
SetGUI показывает исходное беззнаковое слово, коэффициент задаётся в интерфейсе.
|
||||
|
||||
**Отправленный код ЦАП не является измеренным током выхода.** В этом проекте
|
||||
не установлено, какой вход аппаратно измеряет ток ЦАП. При включённом
|
||||
`cCalibrDac` отправляется `DAC_cal()`, а расчётное задание 0x1C остаётся
|
||||
результатом алгоритма разгона. Для диагностики это различие сохранено.
|
||||
ADC_table также уже обрабатывается существующим измерительным кодом;
|
||||
это не обязательно необработанный регистр ADCRESULT.
|
||||
|
||||
Управляющая логика не исправлялась. Например, существующая строка
|
||||
`if(dac_stop>16) dac_go=16;` в Load_runner сохранена; журнал показывает
|
||||
фактически получившиеся эффективные уставки, чтобы выявить такое поведение.
|
||||
Клиент не преобразует напряжения в знаковые измерения. Свежесть выбранного
|
||||
ЗПТ и защита роста напряжения описаны отдельно в `UMP_VOLTAGE_PROTECTION.md`.
|
||||
При штатных 6 мА пуск сначала передаёт это задание и получает 3 секунды
|
||||
на рост ЗПТ до 30 В; после этого работает прежняя защита и лимит попыток.
|
||||
|
||||
## Протокол расширения Modbus
|
||||
|
||||
@@ -126,16 +128,16 @@ FC03, 0x1000, 16 слов:
|
||||
|
||||
| Смещение | Значение |
|
||||
|---|---|
|
||||
| 0,1 | 0x554D, версия 3 |
|
||||
| 0,1 | 0x554D, версия 4 |
|
||||
| 2,3 | состояние и число записей выбранного источника |
|
||||
| 4,5 | 42 слова в записи, 760 записей в банке |
|
||||
| 4,5 | 12 слов в записи, 760 записей в банке |
|
||||
| 6 | период периодических снимков, мс |
|
||||
| 7,8 | счётчик времени, младшее/старшее слово |
|
||||
| 9,10 | Desk (требуется 6 / dsk_LOAD), Mode |
|
||||
| 11 | частота временной базы, 1000 Гц |
|
||||
| 12 | поколение архива, mod 65536 |
|
||||
| 13 | число записей архива |
|
||||
| 14 | оставшиеся миллисекунды постинтервала |
|
||||
| 14 | верхняя оценка оставшихся миллисекунд: число точек × период, до 65535 |
|
||||
| 15 | состояние текущего регистратора независимо от выбора источника |
|
||||
|
||||
Состояния: 0 — ещё не запущен, 1 — запись, 3 — остановлен/архив.
|
||||
@@ -146,40 +148,45 @@ FC06:
|
||||
- 0x1002: хронологический индекс первой записи окна 0..759;
|
||||
- 0x1003: источник окна, 0 — текущий остановленный банк, 1 — архив отключения.
|
||||
|
||||
FC03, 0x1010, до 120 слов: окно от установленного индекса; для целых записей v3 читать 42 или 84 слова.
|
||||
CAN допускает 42/84 и прежние размеры 40/80/120; RTU допускает 1..120 слов.
|
||||
FC03, 0x1010, до 120 слов: окно от установленного индекса; для целых записей v4 читать 12, 24, …, 120 слов.
|
||||
CAN допускает кратные 12 до 120 слов и прежние размеры v2/v3; RTU допускает 1..120 слов.
|
||||
Чтение текущего банка этим окном во время записи не выдаёт изменяющиеся
|
||||
данные. GUI сначала останавливает его; архив можно читать при работающем
|
||||
текущем банке. После всех блоков GUI повторно проверяет поколение архива;
|
||||
при замене во время чтения результат не подменяет предыдущий график.
|
||||
|
||||
FC03, 0x1100, ровно 124 слова: онлайн-блок. Слова 0,1 — 32-битный номер
|
||||
первой записи, 2 — число записей 0..2, 3 — поколение архива, далее до двух
|
||||
записей по 42 слова. Неиспользованные слова равны нулю. Окно онлайн не
|
||||
первой записи, 2 — число записей 0..10, 3 — поколение архива, далее до десяти
|
||||
записей по 12 слов. Неиспользованные слова равны нулю. Окно онлайн не
|
||||
зависит от курсора/выбора архива. Разделение 0x1010 и 0x1100 предотвращает
|
||||
пересечение двух окон.
|
||||
|
||||
Недопустимые диапазоны и значения возвращают исключения Modbus 2/3.
|
||||
CRC и разбор стандартного ответа GUI используют существующее общее ядро.
|
||||
SetGUI распознаёт v2 (40 слов, 800 записей) и v3 (42 слова, 760 записей).
|
||||
Для v2 новые напряжения недоступны (NaN), для v3 доступны графики и CSV.
|
||||
CAN-валидация общей библиотеки расширена размерами 42/84 слова.
|
||||
SetGUI распознаёт v2 (40 слов, 800 записей), v3 (42 слова, 760 записей)
|
||||
и v4 (12 слов, 760 записей). Для v2 ЗПТ недоступны (NaN). Старые архивы
|
||||
декодируются по прежним индексам, но удалённые каналы в панели и CSV больше
|
||||
не создаются. Валидаторы RTU/CAN поддерживают компактные размеры записи.
|
||||
Исходники протокола подключаются к прошивке из templates/c/set-protocol.
|
||||
|
||||
## Проверка и запуск
|
||||
|
||||
Полная сборка исправления: `./build_logger.ps1`. По умолчанию используется
|
||||
`../newProject/SETGUI/third_party/templates`; другую копию можно указать
|
||||
параметром `-TemplatesRoot`. В ней нужны `c/set-protocol/src/ump_protocol.c`
|
||||
и `c/set-protocol/ports/tms320f28335/ump_tms28335.c` (порт УМП v3).
|
||||
Само наличие папки templates не гарантирует наличие этого порта.
|
||||
Результат — `Bin/LoggerFix/UKSSTMS320F28335_logger_fix.bin` (SCI8 boot),
|
||||
рядом OUT и MAP. Старые образы в Bin не заменяются.
|
||||
Скрипт использует TI C2000 22.6 COFF, оптимизацию размера и секции функций;
|
||||
таблица `.cinit` размещена в RAML4 вместе с константами, код — в RAML0.
|
||||
Для сборки из CCS добавьте `Source/Internal/shared_ump.c` в проект и каталоги
|
||||
`<templates>/c/set-protocol`, `<templates>/c/set-protocol/ports/tms320f28335`
|
||||
в include path; используйте параметры оптимизации из скрипта.
|
||||
Текущая проверенная сборка с пуском 3 секунды и сокращённым журналом:
|
||||
`Bin/StartupWait3s/UKSSTMS320F28335_startup_3s_378e06a+.bin`.
|
||||
Размер — 32180 байт; для AT25256B допустимы 32508 байт, запас — 328 байт.
|
||||
Рядом находятся OUT, MAP, манифест и SHA-256. Для чтения v4 используйте
|
||||
обновлённый SETGUI и перезапустите приложение после изменения исходников.
|
||||
|
||||
|
||||
Воспроизводимая сборка из корня проекта: `python Bin/StartupWait3s/rebuild.py`.
|
||||
Скрипт использует установленный TI C2000 22.6, ABI COFF, `-O2`,
|
||||
`--opt_for_speed=0` и секции функций. Все модули пересобираются в отдельный
|
||||
каталог; до формирования готового BIN проверяются профиль AT25256B,
|
||||
граница 32508 байт, блоки RAM и точка входа SCI8. Сохраняются паспорт и SHA-256.
|
||||
Из CCS используется та же карта памяти и настройки проекта. В include-path
|
||||
нужны каталоги общего `c/set-protocol`, его порта `ports/tms320f28335`
|
||||
и сгенерированного паспорта. Обе используемые копии библиотеки поддерживают v4:
|
||||
`../newProject/templates` и `../newProject/SETGUI/third_party/templates`.
|
||||
|
||||
При загрузке `main()` вызывает `ump_log_init()` до включения прерываний.
|
||||
Это обязательно для TI COFF: стартовый код не обнуляет неинициализированные
|
||||
@@ -191,29 +198,31 @@ FC06 не вызывает загрузочную инициализацию и
|
||||
запуск с ненулевой RAM и отрицательный контроль без инициализации;
|
||||
внешняя библиотека `templates/c/set-protocol` для этого теста не нужна.
|
||||
|
||||
Изменены исходники прошивки и SetGUI. Готовый образ в Bin не обновлялся.
|
||||
Для платы необходима сборка штатным TI C2000/CCS, проверка размещения .text,
|
||||
.stack, .ebss и .logg по MAP, прошивка и испытание на стенде.
|
||||
Изменены исходники прошивки и SetGUI; новый образ собран в отдельном каталоге.
|
||||
Проверены TI-компиляция, линковка и формат SCI8 для AT25256B. Физические
|
||||
уровни GPIO и ток после загрузки образа проверяются на плате.
|
||||
|
||||
Автотест C в tests/ump_logger компилирует непосредственно log_to_mem.c
|
||||
с подменой GPIO/IRQ. Проверяет кольцо, граничные адреса, обе команды
|
||||
отключения, защиту триггера от переполнения, переключение банков,
|
||||
сохранность архива во время дальнейшей записи и контрольные поля CAN/ЦАП.
|
||||
сохранность архива во время дальнейшей записи, токовое задание и оба ЗПТ.
|
||||
Это проверка алгоритма на компьютере, не проверка таймингов и 16-битной ABI
|
||||
TI. Отдельно выполнена синтаксическая проверка изменённых C-файлов Clang
|
||||
с исходными заголовками и декларациями TI-интринсиков.
|
||||
|
||||
Тесты SetGUI: tests/test_ump_logger.py и tests/test_periph28335_tab.py.
|
||||
Проверенный набор SetGUI: `tests/test_ump_logger.py`,
|
||||
`tests/test_ump_logger_can.py`, `tests/test_ump_voltage_protection.py` — 93 теста.
|
||||
Они проверяют единицы мА, битовые сигналы, временные метки, несовместимую
|
||||
прошивку, порядок команд, архив при активной записи, замену поколения,
|
||||
дубликаты/пропуски онлайн, потерю связи и флажки графиков.
|
||||
|
||||
Проверка на стенде: включить запись → подать CAN-пуск → изменить уставку →
|
||||
подать откл. → через секунду прочитать архив → сверить код ЦАП, ток внешним
|
||||
измерителем и физические входы/выходы; затем повторить с разрывом RS.
|
||||
подать откл. → дождаться заполнения 76 точек постинтервала → прочитать
|
||||
архив и сверить задание, внешний ток и дискретные уровни; затем повторить
|
||||
с разрывом RS.
|
||||
Период 1 мс проверить отдельно под максимальной CAN-нагрузкой.
|
||||
|
||||
Для сборки v3 нужен templates/main начиная с коммита c0ee7c4
|
||||
Исторически для сборки v3 требовался templates/main начиная с коммита c0ee7c4
|
||||
(поддержка CAN-чтения 42/84 слов и порт TMS320F28335).
|
||||
|
||||
## Пересечение образа 34a95bc5 с параметрами EEPROM
|
||||
@@ -239,3 +248,22 @@ TI. Отдельно выполнена синтаксическая прове
|
||||
При превышении границы остаётся только файл `.pending`; готовый BIN
|
||||
не публикуется. Проверка: `python tests/ump_logger/test_firmware_image.py`.
|
||||
После перепрошивки требуется проверка на плате; проверка на ПК её не заменяет.
|
||||
|
||||
## Исправление ожидания EEPROM при запуске через CCS
|
||||
|
||||
В сборке CCS с O3 подтверждён перенос записей полей `readData` и `writeData`
|
||||
за цикл ожидания `spiSe2pFree()`. Указатель `msgPtr` и флаг `csr` были volatile,
|
||||
но содержимое дескриптора — нет. Timer2 получал запрос с незаполненными
|
||||
адресом, длиной и указателем буфера, поэтому `Load_params()` мог не завершиться,
|
||||
хотя UART уже принял команду. Все три поля `SE2P_DATA` теперь volatile.
|
||||
В дизассемблере исправленного OUT записи всех полей предшествуют флагу запроса.
|
||||
|
||||
Для проверки старой AT25256B подготовлен
|
||||
`Bin/EepromPublishFix/UKSSTMS320F28335_eeprom_fix.out` и одноимённый BIN с build_id.
|
||||
Сборка `python Bin/EepromPublishFix/rebuild.py` явно задаёт `EEPROM_M95M02=0`
|
||||
и O3; размер проверенного BIN — 32074 байта, запас до параметров — 434 байта.
|
||||
Проверка порядка инструкций:
|
||||
`python tests/eeprom_profiles/check_publication.py Bin/EepromPublishFix/disassembly.txt`.
|
||||
На листинге прежнего OUT эта проверка падает, на исправленном проходит для чтения
|
||||
и записи. Пройдены модели обоих профилей EEPROM и UART. Запуск на плате
|
||||
после загрузки исправленного OUT ещё требует подтверждения.
|
||||
|
||||
@@ -13,7 +13,21 @@
|
||||
или удерживаемом STOP.
|
||||
|
||||
Если очередной шаг рампы требует **строго больше 6 мА**, а свежее
|
||||
CAN-напряжение меньше 30 В, шаг не передаётся в ЦАП. Вместо него:
|
||||
CAN-напряжение меньше 30 В и в текущей попытке ещё не достигало порога,
|
||||
в ЦАП сначала передаётся задание **6 мА**. Положение рампы удерживается.
|
||||
УМП получает **3 секунды** на рост ЗПТ до 30 В: это 600 отправленных
|
||||
токовых кадров при 200 Гц. Отсчёт начинается с первой отправки 6 мА;
|
||||
команда инициализации ЦАП не расходует выдержку. До достижения порога
|
||||
даже начальная уставка выше 6 мА ограничивается этим током. Уставки
|
||||
ниже 6 мА сначала проходят обычный разгон до указанной границы.
|
||||
|
||||
При свежем ЗПТ **не меньше 30 В** разгон продолжается с сохранённого
|
||||
положения без нового START. После подтверждённого роста напряжения
|
||||
рабочая защита снова действует сразу: шаг выше 6 мА при ЗПТ ниже 30 В
|
||||
не передаётся в ЦАП и не получает повторной стартовой выдержки.
|
||||
|
||||
Если за 3 секунды свежего обмена ЗПТ не достигло 30 В либо напряжение
|
||||
упало после успешного пуска, вместо повышенного задания выполняется:
|
||||
|
||||
1. Снимается START, включается STOP, снимается разрешение RES_OUT_2.
|
||||
2. Положение рампы обнуляется, передаётся код 4 мА без подмены калибровкой.
|
||||
@@ -21,12 +35,23 @@ CAN-напряжение меньше 30 В, шаг не передаётся в
|
||||
4. Когда код 4 мА отправлен, прошла секунда и есть свежее ЗПТ,
|
||||
снимается STOP, сразу выставляется START, затем разрешение.
|
||||
5. Новая рампа начинается с нулевого положения с исходными уставками
|
||||
`DAC_go`/`DAC_stop` (штатные значения могут начинать рост с 6 мА).
|
||||
`DAC_go`/`DAC_stop`; новая попытка получает собственные 3 секунды
|
||||
ожидания при 6 мА, если ЗПТ ещё не достигло 30 В.
|
||||
|
||||
Первый START входит в лимит: **всего 5 попыток**, не 5 дополнительных.
|
||||
После пятой неудачной попытки удерживаются STOP и 4 мА, разрешение снято,
|
||||
шестой START не выдаётся. Ошибка снимается командой `cUMPstart=0`;
|
||||
затем можно подать новый пуск. Команда RESET имеет приоритет перед START.
|
||||
Первый START входит в настраиваемый лимит регистра **0x7D**: по умолчанию
|
||||
**всего 5 попыток**, не 5 дополнительных. Через FC06 или штатный CAN можно
|
||||
записать **1…65535**; ноль отклоняется без изменения предыдущей настройки.
|
||||
После последней разрешённой неудачи удерживаются STOP и 4 мА, разрешение
|
||||
снято, дополнительный START не выдаётся. Ошибка снимается командой `cUMPstart=0`;
|
||||
затем можно подать новый пуск. Изменение лимита само по себе не снимает
|
||||
ошибку и не выдаёт START. Уменьшение лимита во время STOP проверяется перед
|
||||
следующей попыткой. Команда RESET имеет приоритет перед START.
|
||||
|
||||
Для задания пяти пусков используйте `FC06(0x007D, 5)` либо `FC06(0x507D, 5)`
|
||||
в GAS-профиле M95M02. Чтение `0x7D` возвращает лимит; текущий счётчик остаётся
|
||||
в слове 5 диагностического блока `FC03(0x1300, 8)`. Настройка сохраняется
|
||||
штатной командой **Save**. Ноль из старой EEPROM заменяется на 5 при запуске;
|
||||
ненулевое сохранённое значение трактуется как лимит.
|
||||
Отпускание RESET с оставшимся START=1 само по себе не перезапускает УМП.
|
||||
|
||||
Выходами и рампой управляет один обработчик Timer1 (1 мс). Основной цикл
|
||||
@@ -36,14 +61,16 @@ CAN-напряжение меньше 30 В, шаг не передаётся в
|
||||
|
||||
## Отсутствие CAN
|
||||
|
||||
Таймаут по умолчанию **600 мс**, диапазон настройки **1…60000 мс**.
|
||||
Заводской таймаут из `Default_params` — **2000 мс**, диапазон настройки **1…60000 мс**. Если сохранённый параметр недопустим, `Setup_DAC_time` применяет **600 мс**; такой же запасной таймаут используется локально в `Load_runner`.
|
||||
Свежесть подтверждается только получением нужного ЗПТ в полном
|
||||
технологическом CAN-кадре с соответствующим битом маски. Другое
|
||||
напряжение, сервисные запросы, команды и произвольные CAN-пакеты
|
||||
таймаут не сбрасывают. До первого значения напряжение считается неизвестным.
|
||||
|
||||
При таймауте работающая рампа удерживает последнее положение и отправленный
|
||||
код. Попытка не считается неудачной, STOP по одному таймауту не включается.
|
||||
код. Стартовая выдержка при 6 мА также приостанавливается и возобновляется
|
||||
после нового выбранного ЗПТ. Попытка не считается неудачной, STOP по одному
|
||||
таймауту не включается.
|
||||
После свежего ЗПТ рост продолжается; если оно меньше 30 В при задании
|
||||
больше 6 мА, выполняется защитный STOP. Если обмен исчез во время
|
||||
сброса, STOP держится и после секунды — до свежего напряжения.
|
||||
@@ -76,9 +103,9 @@ CAN-напряжение меньше 30 В, шаг не передаётся в
|
||||
Старые прошивки без блока защиты продолжают обычное онлайн-чтение;
|
||||
эмуляция для них недоступна.
|
||||
|
||||
Технологические регистры только для чтения: `0x7C` — статус,
|
||||
`0x7D` — число попыток. Оба включены в быстрый CAN-цикл.
|
||||
Статус: бит 0 — ошибка пяти попыток, бит 1 — нет свежего ЗПТ,
|
||||
Технологический регистр `0x7C` — статус только для чтения;
|
||||
`0x7D` — записываемый сохраняемый лимит попыток. Оба включены в быстрый CAN-цикл.
|
||||
Статус: бит 0 — ошибка исчерпания настроенного лимита, бит 1 — нет свежего ЗПТ,
|
||||
бит 2 — сброс перед повтором, бит 3 — работа рампы,
|
||||
биты 4/5 — активная эмуляция отсутствия CAN/роста ЗПТ.
|
||||
|
||||
@@ -103,7 +130,11 @@ FC06 допускает запись только `0x1302` (0…3) и `0x1303` (
|
||||
`python tests/load_control/run_test.py` компилирует непосредственно
|
||||
`DAC.c` с подменой GPIO/IRQ. Проверяются выбор ЗПТ, маски CAN, таймаут,
|
||||
удержание кода, граница 30 В, порядок STOP/START, точная пауза 1000 мс,
|
||||
лимит пяти пусков, RESET, эмуляция и невозможность подмены 4 мА калибровкой.
|
||||
лимиты 1, 2, 5, 7 и 65535 пусков, изменение лимита во время STOP, RESET, эмуляция и невозможность подмены 4 мА калибровкой.
|
||||
Стартовые регрессии для адресов 5 и 6 проверяют отправку 6 мА вместо
|
||||
мгновенного сброса, границу выдержки 3000 мс, успешный рост ЗПТ во время
|
||||
ожидания, немедленную защиту после успешного пуска, повышенную начальную
|
||||
уставку, паузу CAN и пропуск отсчёта при инициализации ЦАП.
|
||||
|
||||
GUI: `tests/test_ump_voltage_protection.py` в SETGUI плюс регрессии логгера.
|
||||
Сборка: `build_logger.ps1 -OutputDirectory Bin/VoltageProtection
|
||||
|
||||
@@ -51,13 +51,15 @@ unsigned int period_dac, time_dac;
|
||||
#define LOAD_RELOAD 2U
|
||||
/* Задаёт LOAD_FAULT = 3U; состояние остановки после исчерпания попыток. */
|
||||
#define LOAD_FAULT 3U
|
||||
/* Задаёт LOAD_MAX_ATTEMPTS = 5U; предел повторных пусков нагрузки — пять. */
|
||||
#define LOAD_MAX_ATTEMPTS 5U
|
||||
/* Задаёт LOAD_VOLTAGE_MIN = 30U; минимальное разрешённое напряжение нагрузки — 30 В. */
|
||||
#define LOAD_VOLTAGE_MIN 30U
|
||||
/* Задаёт LOAD_PULSE_MS = 1000U; длительность удержания импульса START/STOP — 1000 мс. */
|
||||
#define LOAD_PULSE_MS 1000U
|
||||
/* Объявляет load_state — текущее состояние автомата нагрузки; load_attempts — накопленное число пусков в текущем цикле, максимум пять; load_inhibit — признак запрета повторного запуска до требуемого перехода входов. */
|
||||
/* Стартовая выдержка 3 секунды выбрана для реакции УМП и обновления ЗПТ; при DAC_FREQ=200 Гц это 600 отправок задания 6 мА. */
|
||||
#define LOAD_START_WAIT_STEPS (3U * DAC_FREQ)
|
||||
/* load_start_remaining хранит остаток 600 стартовых отправок 6 мА; ноль означает конец выдержки или подтверждённые 30 В. */
|
||||
static unsigned int load_start_remaining;
|
||||
/* Хранит состояние автомата, число выданных START в текущем сеансе и запрет повторного пуска; лимит берётся отдельно из регистра 0x7D. */
|
||||
static unsigned int load_state, load_attempts, load_inhibit;
|
||||
/* Объявляет load_count_dac — load число ЦАП; load_count_ramp — load число ramp; load_init_count — load init число. */
|
||||
static unsigned int load_count_dac, load_count_ramp, load_init_count;
|
||||
@@ -78,6 +80,8 @@ void Load_control_init(void)
|
||||
{
|
||||
/* Записывает load_state значением LOAD_IDLE; load_attempts = 0; load_inhibit = 0; текущее состояние автомата нагрузки. */
|
||||
load_state = LOAD_IDLE; load_attempts = 0; load_inhibit = 0;
|
||||
/* Начинает первую попытку без накопленной выдержки и подтверждённого роста ЗПТ; COFF требует явной инициализации статических полей. */
|
||||
load_start_remaining = 0;
|
||||
/* Записывает load_count_dac значением 0; load_count_ramp = 0; load_init_count = 1; load число ЦАП. */
|
||||
load_count_dac = 0; load_count_ramp = 0; load_init_count = 1;
|
||||
/* Записывает load_zero_sent значением 0; load_stop_asserted = 0; load_initialized = 0; данные load_zero_sent. */
|
||||
@@ -178,10 +182,8 @@ static void load_start(void)
|
||||
if (load_end > 16) load_end = 16;
|
||||
/* Проверяет if (load_end <= load_go) load_end = load_go + 1; последующий оператор выполняется только при истинном условии. */
|
||||
if (load_end <= load_go) load_end = load_go + 1;
|
||||
/* Записывает ump_dac_go10 значением (unsigned int)((load_go + 4.0) * 10.0); ump ЦАП go 10. */
|
||||
ump_dac_go10 = (unsigned int)((load_go + 4.0) * 10.0);
|
||||
/* Записывает ump_dac_stop10 значением (unsigned int)((load_end + 4.0) * 10.0); ump ЦАП stop 10. */
|
||||
ump_dac_stop10 = (unsigned int)((load_end + 4.0) * 10.0);
|
||||
/* Каждая попытка получает 600 токовых тактов, то есть 3 секунды при 200 Гц; остаток уменьшается только после отправки 6 мА. */
|
||||
load_start_remaining = LOAD_START_WAIT_STEPS;
|
||||
/* Записывает load_count_ramp значением 0; load число ramp. */
|
||||
load_count_ramp = 0;
|
||||
/* Изменяет счётчик в выражении load_attempts++; на один для следующего шага. */
|
||||
@@ -220,8 +222,10 @@ void Setup_DAC_time(void)
|
||||
if ((unsigned int)LOAD_CAN_TIMEOUT == 0U ||
|
||||
/* Записывает LOAD_CAN_TIMEOUT значением 600; сохраняемый тайм-аут свежести напряжения CAN в миллисекундах, регистр 0x52. */
|
||||
(unsigned int)LOAD_CAN_TIMEOUT > 60000U) LOAD_CAN_TIMEOUT = 600;
|
||||
/* Записывает LOAD_STATUS значением 0; LOAD_ATTEMPTS = 0; слово состояния защиты нагрузки для чтения, регистр 0x7C. */
|
||||
LOAD_STATUS = 0; LOAD_ATTEMPTS = 0;
|
||||
/* Старый нулевой счётчик в EEPROM заменяется заводским лимитом пяти пусков; ненулевую сохранённую настройку 0x7D не стираем. */
|
||||
if (!(unsigned int)LOAD_MAX_ATTEMPTS) LOAD_MAX_ATTEMPTS = LOAD_DEFAULT_MAX_ATTEMPTS;
|
||||
/* Сбрасывает диагностическое слово 0x7C при подготовке автомата; сохраняемый лимит не является текущим счётчиком. */
|
||||
LOAD_STATUS = 0;
|
||||
/* Записывает load_initialized значением 1; данные load_initialized. */
|
||||
load_initialized = 1;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
@@ -297,16 +301,16 @@ static void anal_output(long vrot, long maxx, int calibration)
|
||||
/* Объявляет x — данные x. */
|
||||
static int x;
|
||||
|
||||
/* Записывает out значением DAC_min() + vrot * DAC_max() / maxx - vrot * DAC_min() / maxx ; данные out. */
|
||||
/* Линейно переводит долю рампы vrot/maxx в код между DAC_min() и DAC_max(); целочисленное деление каждого слагаемого задаёт округление. */
|
||||
out = DAC_min() + vrot * DAC_max() / maxx - vrot * DAC_min() / maxx ;
|
||||
|
||||
/* Записывает x значением 0; данные x. */
|
||||
/* Фиксирует выбор нижней ветви передачи: при x=0 далее используется управляющее слово out|0x8000. */
|
||||
x=0;// !x; тщетно бытие
|
||||
|
||||
/* Проверяет if(calibration и cCalibrDac) out=DAC_cal(); последующий оператор выполняется только при истинном условии. */
|
||||
if(calibration && cCalibrDac) out=DAC_cal();
|
||||
|
||||
/* Записывает out значением out & 0xFFF; данные out. */
|
||||
/* Оставляет младшие 12 бит кода ЦАП. Это усечение битов, а не насыщение на границах 0..4095. */
|
||||
out = out & 0xFFF;
|
||||
|
||||
/* Проверяет if(x) dSEND(out|0x0000|0x0000); последующий оператор выполняется только при истинном условии. */
|
||||
@@ -314,10 +318,10 @@ static void anal_output(long vrot, long maxx, int calibration)
|
||||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||||
else dSEND(out|0x8000|0x0000);
|
||||
|
||||
/* Записывает modbus[123] значением out; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
/* Публикует фактически отправляемый 12-битный код ЦАП в технологическом регистре 0x7B для диагностики и регистрации. */
|
||||
modbus[123] = out;
|
||||
|
||||
/* Записывает modbus[0x1C] значением 40L + vrot * 200 / maxx - vrot * 40 / maxx ; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
/* Публикует расчётный выход 4..20 мА в масштабе 0,1 мА на единицу: при доле рампы 0 значение 40, при доле 1 значение 200. */
|
||||
modbus[0x1C] = 40L + vrot * 200 / maxx - vrot * 40 / maxx ;
|
||||
|
||||
/*
|
||||
@@ -352,10 +356,10 @@ void Anal_output(long vrot, long maxx)
|
||||
void Load_runner(void)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Объявляет saved — данные saved; commands — данные commands; voltage — данные voltage; fresh — данные fresh; timeout — данные timeout. */
|
||||
unsigned int saved, commands, voltage, fresh, timeout;
|
||||
/* Объявляет start — данные start; reset — сброс; active — данные active. Начальное значение задаётся справа от знака равенства. */
|
||||
unsigned int start, reset, active = 0;
|
||||
/* Хранит состояние IRQ, снимки команд и напряжения, свежесть CAN, тайм-аут в мс и лимит пусков; 16-битный лимит читается один раз за такт. */
|
||||
unsigned int saved, commands, voltage, fresh, timeout, attempt_limit;
|
||||
/* start/reset хранят командные биты; active отмечает работу; voltage_wait отмечает вывод 6 мА; ramp_before позволяет заморозить положение рампы. */
|
||||
unsigned int start, reset, active = 0, voltage_wait = 0, ramp_before;
|
||||
/* Объявляет sinus — данные sinus. Начальное значение задаётся справа от знака равенства. */
|
||||
float sinus = 0;
|
||||
|
||||
@@ -371,6 +375,10 @@ void Load_runner(void)
|
||||
voltage = (load_simulation & 2U) ? 0U : load_voltage;
|
||||
/* Записывает timeout значением (unsigned int)LOAD_CAN_TIMEOUT; данные timeout. */
|
||||
timeout = (unsigned int)LOAD_CAN_TIMEOUT;
|
||||
/* Читает 0x7D как беззнаковое 16-битное число, чтобы значения 32768..65535 сохраняли положительный смысл лимита. */
|
||||
attempt_limit = (unsigned int)LOAD_MAX_ATTEMPTS;
|
||||
/* При нештатном нуле в RAM оставляет прежний предел пяти пусков; штатные обработчики записи ноль отклоняют. */
|
||||
if (!attempt_limit) attempt_limit = LOAD_DEFAULT_MAX_ATTEMPTS;
|
||||
/* Проверяет if (!timeout или timeout > 60000U) timeout = 600U; последующий оператор выполняется только при истинном условии. */
|
||||
if (!timeout || timeout > 60000U) timeout = 600U;
|
||||
/* До первого пакета значение 0 не считается свежим измерением.
|
||||
@@ -393,7 +401,7 @@ void Load_runner(void)
|
||||
if (!start) {
|
||||
/* Проверяет if (load_state != LOAD_IDLE) load_stop(LOAD_IDLE); последующий оператор выполняется только при истинном условии. */
|
||||
if (load_state != LOAD_IDLE) load_stop(LOAD_IDLE);
|
||||
/* Записывает load_attempts значением 0; load_inhibit = 0; накопленное число пусков в текущем цикле, максимум пять. */
|
||||
/* Снятие START обнуляет счётчик текущего сеанса и запрет повторного пуска, сохраняя настроенный лимит в 0x7D. */
|
||||
load_attempts = 0; load_inhibit = 0;
|
||||
/* Проверяет else if (reset); последующий оператор выполняется только при истинном условии. */
|
||||
} else if (reset) {
|
||||
@@ -408,13 +416,15 @@ void Load_runner(void)
|
||||
/* Проверяет if (reset и !load_stop_asserted) load_stop(LOAD_IDLE); последующий оператор выполняется только при истинном условии. */
|
||||
if (reset && !load_stop_asserted) load_stop(LOAD_IDLE);
|
||||
|
||||
/* LOAD_RELOAD уже удерживает STOP, 4 мА и снятое разрешение; уменьшение лимита только фиксирует ошибку, не перезапуская секундную выдержку. */
|
||||
if (load_state == LOAD_RELOAD && load_attempts >= attempt_limit) load_state = LOAD_FAULT;
|
||||
/* Повторный START допускается после сброса ЦАП, окончания STOP и
|
||||
* восстановления нужного CAN-напряжения. Таймаут сам не тратит попытку. */
|
||||
/* Проверяет if (start и !reset и !load_inhibit и !WAKEpowse и fresh и; последующий оператор выполняется только при истинном условии. */
|
||||
/* Команда START без RESET и запрета должна дождаться окончания инициализации, свежего ЗПТ и подтверждённого задания 4 мА. */
|
||||
if (start && !reset && !load_inhibit && !WAKEpowse && fresh &&
|
||||
/* Продолжает список аргументов, полей или выражение load_zero_sent && !IMPowse &&; порядок элементов сохраняется. */
|
||||
/* Секундный STOP заканчивается только после передачи исходного кода ЦАП; обе выдержки обязательны перед пуском. */
|
||||
load_zero_sent && !IMPowse &&
|
||||
/* Продолжает список аргументов, полей или выражение (load_state == LOAD_IDLE || load_state == LOAD_RELOAD)) load_start();; порядок элементов сохраняется. */
|
||||
/* LOAD_IDLE начинает сеанс с нулевым счётчиком, а LOAD_RELOAD проверен на оставшиеся попытки выше; ошибка не разрешает START. */
|
||||
(load_state == LOAD_IDLE || load_state == LOAD_RELOAD)) load_start();
|
||||
/* Проверяет if (load_state == LOAD_RUN и !IMPowse) clear_START_DPTB(); последующий оператор выполняется только при истинном условии. */
|
||||
if (load_state == LOAD_RUN && !IMPowse) clear_START_DPTB();
|
||||
@@ -439,34 +449,43 @@ void Load_runner(void)
|
||||
active = load_state == LOAD_RUN;
|
||||
/* Проверяет if (active); последующий оператор выполняется только при истинном условии. */
|
||||
if (active) {
|
||||
/* При таймауте сохраняем положение И отправленное задание,
|
||||
* не делаем STOP и не продолжаем разгон без обратной связи. */
|
||||
/* Проверяет if (fresh); последующий оператор выполняется только при истинном условии. */
|
||||
/* В паузе CAN не вычисляет следующий шаг: положение, код и остаток стартовой выдержки сохраняются. */
|
||||
if (fresh) {
|
||||
/* Проверяет if (load_count_ramp > time_dac / 2) load_count_ramp++; последующий оператор выполняется только при истинном условии. */
|
||||
/* Сохраняет положение до шага, чтобы отменить рост на время начального ожидания при 6 мА. */
|
||||
ramp_before = load_count_ramp;
|
||||
/* Во второй половине штатной рампы сохраняет прежнее ускорение на два отсчёта за токовый такт. */
|
||||
if (load_count_ramp > time_dac / 2) load_count_ramp++;
|
||||
/* Проверяет if (++load_count_ramp > time_dac) load_count_ramp = time_dac; последующий оператор выполняется только при истинном условии. */
|
||||
/* Продвигает рампу на один отсчёт и ограничивает её концом, заданным LOAD_TIME и DAC_FREQ. */
|
||||
if (++load_count_ramp > time_dac) load_count_ramp = time_dac;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Записывает sinus значением ((load_end - load_go) / 16.0 * load_count_ramp) +; данные sinus. */
|
||||
sinus = ((load_end - load_go) / 16.0 * load_count_ramp) +
|
||||
/* Продолжает список аргументов, полей или выражение (load_go / 16.0 * time_dac);; порядок элементов сохраняется. */
|
||||
(load_go / 16.0 * time_dac);
|
||||
/* Проверяем следующий шаг ДО передачи ЦАП. 6 мА допустимы,
|
||||
* строго >6 мА и <30 В требуют немедленного STOP.
|
||||
* Первая попытка входит в лимит 5; шестого START не будет. */
|
||||
/* Проверяет if (fresh и voltage < LOAD_VOLTAGE_MIN и; последующий оператор выполняется только при истинном условии. */
|
||||
if (fresh && voltage < LOAD_VOLTAGE_MIN &&
|
||||
/* Продолжает список аргументов, полей или выражение sinus * 16.0 > 2.0 * time_dac) {; порядок элементов сохраняется. */
|
||||
sinus * 16.0 > 2.0 * time_dac) {
|
||||
/* Вызывает load_stop. Снимает START и разрешение нагрузки, удерживает STOP 1000 мс и сбрасывает состояние нарастания тока. */
|
||||
load_stop(load_attempts >= LOAD_MAX_ATTEMPTS ?
|
||||
/* Продолжает список аргументов, полей или выражение LOAD_FAULT : LOAD_RELOAD);; порядок элементов сохраняется. */
|
||||
LOAD_FAULT : LOAD_RELOAD);
|
||||
/* Записывает active значением 0; sinus = 0; данные active. */
|
||||
active = 0; sinus = 0;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
/* Преобразует продвижение рампы в долю полного токового диапазона 16 мА с учётом начальной уставки. */
|
||||
sinus = ((load_end - load_go) / 16.0 * load_count_ramp) +
|
||||
/* Добавляет начальную уставку относительно базовых 4 мА в тех же единицах положения рампы. */
|
||||
(load_go / 16.0 * time_dac);
|
||||
/* Подтверждённые 30 В завершают стартовое ожидание; последующее падение ЗПТ не получает новую выдержку. */
|
||||
if (voltage >= LOAD_VOLTAGE_MIN) load_start_remaining = 0;
|
||||
/* При меньшем ЗПТ внутренние 2 мА поверх базовых 4 мА ограничивают следующее задание суммарными 6 мА. */
|
||||
else if (sinus * 16.0 > 2.0 * time_dac) {
|
||||
/* До подтверждения порога даёт попытке остаток выбранных 3 секунд, не отправляя повышенный ток. */
|
||||
if (load_start_remaining) {
|
||||
/* Отменяет шаг рампы во время ожидания, чтобы после роста ЗПТ продолжить с прежнего положения. */
|
||||
load_count_ramp = ramp_before;
|
||||
/* Доля 1/8 диапазона 16 мА добавляет 2 мА к базовым 4 мА; time_dac=6000 даёт положение 750. */
|
||||
sinus = time_dac / 8.0;
|
||||
/* Отсчитывает выдержку только после отправки задания; служебная инициализация ЦАП не расходует её. */
|
||||
voltage_wait = 1;
|
||||
/* Исчерпанная выдержка или падение напряжения после успешного роста требуют немедленного STOP. */
|
||||
} else {
|
||||
/* Возвращает 4 мА и снимает разрешение; исчерпание сохранённого лимита попыток запрещает следующий пуск. */
|
||||
load_stop(load_attempts >= attempt_limit ?
|
||||
/* Использует согласованный снимок лимита текущего такта; заводские пять пусков сохраняют прежний предел. */
|
||||
LOAD_FAULT : LOAD_RELOAD);
|
||||
/* Исключает отправку рабочего задания в такте защитной остановки. */
|
||||
active = 0; sinus = 0;
|
||||
/* Закрывает выбор между ожиданием и защитным сбросом. */
|
||||
}
|
||||
/* Завершает проверку следующего токового задания при низком ЗПТ. */
|
||||
}
|
||||
/* Завершает обработку активной рампы при свежем выбранном напряжении CAN. */
|
||||
}
|
||||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||||
} else {
|
||||
@@ -479,12 +498,6 @@ void Load_runner(void)
|
||||
/* Во время защиты и пуска ручной код калибровки запрещён.
|
||||
* Калибровка сохранена только при снятом START и свободном STOP.
|
||||
* Нулевой код задания здесь означает ток 4 мА по DAC_min(). */
|
||||
/* Записывает ump_dac_ramp значением load_count_ramp; ump ЦАП ramp. */
|
||||
ump_dac_ramp = load_count_ramp;
|
||||
/* Записывает ump_dac_duration значением time_dac; ump ЦАП duration. */
|
||||
ump_dac_duration = time_dac;
|
||||
/* Записывает ump_dac_position значением (unsigned int)sinus; ump ЦАП position. */
|
||||
ump_dac_position = (unsigned int)sinus;
|
||||
/* Проверяет if (active и !fresh); последующий оператор выполняется только при истинном условии. */
|
||||
if (active && !fresh) {
|
||||
/* Удерживаем ЦАП. Даже cInitDac не меняет ток в паузе CAN. */
|
||||
@@ -498,6 +511,8 @@ void Load_runner(void)
|
||||
anal_output((int)sinus, time_dac,
|
||||
/* Продолжает список аргументов, полей или выражение !start && !load_stop_asserted);; порядок элементов сохраняется. */
|
||||
!start && !load_stop_asserted);
|
||||
/* Уменьшает остаток только после отправки 6 мА: тайм-аут CAN, инициализация ЦАП и STOP не расходуют выдержку. */
|
||||
if (voltage_wait) load_start_remaining--;
|
||||
/* A manual calibration frame is not a confirmed 4 mA reload.
|
||||
* START must wait for a forced baseline frame after it. */
|
||||
/* Проверяет if (!active) load_zero_sent = !(!start и !load_stop_asserted и cCalibrDac); последующий оператор выполняется только при истинном условии. */
|
||||
@@ -522,8 +537,6 @@ void Load_runner(void)
|
||||
(load_state == LOAD_RUN ? 8U : 0U) |
|
||||
/* Продолжает список аргументов, полей или выражение (load_simulation << 4);; порядок элементов сохраняется. */
|
||||
(load_simulation << 4);
|
||||
/* Записывает LOAD_ATTEMPTS значением load_attempts; число попыток пуска для чтения, регистр 0x7D. */
|
||||
LOAD_ATTEMPTS = load_attempts;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
|
||||
@@ -59,16 +59,14 @@ void clear_mem();
|
||||
#define UMP_LOG_BASE 0x1000U
|
||||
/* Задаёт UMP_LOG_DATA = 0x1010U; UMP LOG данные. */
|
||||
#define UMP_LOG_DATA 0x1010U
|
||||
/* Задаёт UMP_LOG_WORDS = 42U; UMP LOG слова. */
|
||||
#define UMP_LOG_WORDS 42U
|
||||
/* Запись v4 содержит 12 слов: время, событие, дискреты, ток, уставки, два ЗПТ и нулевой резерв для пар CAN. */
|
||||
#define UMP_LOG_WORDS 12U
|
||||
/* Задаёт UMP_LOG_CAPACITY = 760U; данные UMP_LOG_CAPACITY. */
|
||||
#define UMP_LOG_CAPACITY 760U
|
||||
/* Задаёт UMP_LOG_LIVE_RECORDS = (120U / UMP_LOG_WORDS); данные UMP_LOG_LIVE_RECORDS. */
|
||||
#define UMP_LOG_LIVE_RECORDS (120U / UMP_LOG_WORDS)
|
||||
/* Задаёт UMP_LOG_LIVE = 0x1100U; данные UMP_LOG_LIVE. */
|
||||
#define UMP_LOG_LIVE 0x1100U
|
||||
/* Объявляет ump_dac_ramp — ump ЦАП ramp; ump_dac_duration — ump ЦАП duration; ump_dac_go10 — ump ЦАП go 10; ump_dac_stop10 — ump ЦАП stop 10; ump_dac_position — ump ЦАП position. Память определена в другом модуле. */
|
||||
extern unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position;
|
||||
/* Явно инициализирует оба банка регистратора до включения IRQ; повторный старт записи архив не стирает. */
|
||||
void ump_log_init(void);
|
||||
/* Продвигает время регистратора в Timer1 и снимает записи с заданным периодом. */
|
||||
|
||||
@@ -68,7 +68,7 @@ void ReceiveAnswerModbus4(RS_DATA *rs_arr);
|
||||
void Save_params(void);
|
||||
/* Читает сохранённые регистры из области параметров EEPROM и применяет настройки платы. */
|
||||
void Load_params(void);
|
||||
/* Заполняет регистры заводскими значениями; тайм-аут CAN нагрузки по умолчанию равен 600 мс. */
|
||||
/* Объявляет восстановление заводских параметров; для LOAD функция задаёт тайм-аут свежести CAN 2000 мс. */
|
||||
void Default_params(void);
|
||||
|
||||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||||
|
||||
@@ -171,13 +171,15 @@
|
||||
/* Задаёт DAC_stop = modbus[0x51]; конечный ток нагрузки в мА, технологический регистр 0x51. */
|
||||
#define DAC_stop modbus[0x51] // конец зарада
|
||||
|
||||
/* LOAD-only persistent CAN timeout (ms), read-only status and attempts. */
|
||||
/* На плате LOAD тайм-аут и лимит попыток сохраняются штатной командой Save; состояние защиты доступно только для чтения. */
|
||||
/* Задаёт LOAD_CAN_TIMEOUT = modbus[0x52]; сохраняемый тайм-аут свежести напряжения CAN в миллисекундах, регистр 0x52. */
|
||||
#define LOAD_CAN_TIMEOUT modbus[0x52]
|
||||
/* Задаёт LOAD_STATUS = modbus[0x7C]; слово состояния защиты нагрузки для чтения, регистр 0x7C. */
|
||||
#define LOAD_STATUS modbus[0x7C]
|
||||
/* Задаёт LOAD_ATTEMPTS = modbus[0x7D]; число попыток пуска для чтения, регистр 0x7D. */
|
||||
#define LOAD_ATTEMPTS modbus[0x7D]
|
||||
/* Задаёт записываемый лимит общего числа пусков в регистре 0x7D; допустимы 1..65535 попыток, включая первый START. */
|
||||
#define LOAD_MAX_ATTEMPTS modbus[0x7D]
|
||||
/* Сохраняет прежний заводской предел пяти пусков для сброса настроек и замены нуля из старой EEPROM. */
|
||||
#define LOAD_DEFAULT_MAX_ATTEMPTS 5U
|
||||
|
||||
/* Задаёт Cancount = (modbus+0x60); данные Cancount. */
|
||||
#define Cancount (modbus+0x60) // пауза между I посылками CAN
|
||||
|
||||
@@ -93,9 +93,9 @@ typedef unsigned int SE2P_SIZE;
|
||||
/* Message declaration */
|
||||
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
|
||||
typedef struct {
|
||||
unsigned int *dataPtr; /* Data pointer */ /* Объявляет dataPtr — данные Ptr. Хранит указатель на данные. */
|
||||
unsigned long nrData; /* number of data */ /* Объявляет nrData — nr данные. */
|
||||
unsigned long se2pAddr; /* se2pAddr */ /* Объявляет se2pAddr — данные se2pAddr. */
|
||||
unsigned int * volatile dataPtr; /* Указатель буфера публикуется до csr: volatile запрещает перенос его записи за ожидание Timer2. */
|
||||
volatile unsigned long nrData; /* Число 16-битных слов записывается до флага запуска; Timer2 использует его для завершения передачи. */
|
||||
volatile unsigned long se2pAddr; /* Байтовый адрес EEPROM публикуется до csr; прерывание должно получить адрес текущего задания. */
|
||||
/* Продолжает список аргументов, полей или выражение }SE2P_DATA;; порядок элементов сохраняется. */
|
||||
}SE2P_DATA;
|
||||
|
||||
@@ -103,8 +103,8 @@ typedef struct {
|
||||
/* Object declaration */
|
||||
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
|
||||
typedef struct {
|
||||
/* Main loop publishes the descriptor before setting csr; Timer2 consumes it.
|
||||
* Both accesses are volatile so optimization cannot publish the request first. */
|
||||
/* Главный цикл заполняет volatile-поля задания, затем msgPtr и csr; Timer2 читает их после запроса.
|
||||
* Одного volatile у msgPtr недостаточно: он защищает указатель, но не содержимое задания. */
|
||||
/* Продолжает список аргументов, полей или выражение SE2P_DATA * volatile msgPtr;; порядок элементов сохраняется. */
|
||||
SE2P_DATA * volatile msgPtr;
|
||||
volatile unsigned int csr; /* control/status register */ /* Объявляет csr — данные csr. volatile требует фактического чтения или записи при каждом доступе. */
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */
|
||||
#include "RS485.h"
|
||||
#include <string.h> /* Объявляет memset для явного сброса UART: загрузчик COFF не гарантирует очистку .ebss. */
|
||||
/* Подключает "bios_dsp.h": коды и объявления команд последовательного загрузчика. */
|
||||
#include "bios_dsp.h"
|
||||
/* Подключает "cntrl_adr.h": собственный и универсальный адрес устройства. */
|
||||
@@ -730,6 +731,7 @@ void RS_SetLineSpeed(RS_DATA *rs_arr,unsigned long speed)
|
||||
rs_arr->SciRegs->SCIHBAUD = HIBYTE((int)SciBaud);
|
||||
/* Записывает rs_arr->SciRegs->SCILBAUD значением LOBYTE((int)SciBaud); rs arr SCI Regs SCILBAUD. */
|
||||
rs_arr->SciRegs->SCILBAUD = LOBYTE((int)SciBaud);
|
||||
rs_arr->curr_baud = speed; /* Сохраняет установленную скорость в бодах для последующих команд переключения линии и диагностики CCS. */
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
@@ -741,6 +743,8 @@ void create_uart_vars(char size_cmd15_set)
|
||||
{
|
||||
/* Записывает size_cmd15 значением size_cmd15_set; размер cmd 15. */
|
||||
size_cmd15=size_cmd15_set;
|
||||
memset(&rs_a, 0, sizeof(rs_a)); /* Сбрасывает указатели, длины, буферы и флаги SCI-A до настройки порта; исключает остатки RAM после JTAG. */
|
||||
memset(&rs_b, 0, sizeof(rs_b)); /* Независимо сбрасывает состояние SCI-B до назначения номера и аппаратных регистров. */
|
||||
/* Записывает rs_a.commnumber значением COM_1; данные commnumber. */
|
||||
rs_a.commnumber=COM_1;
|
||||
/* Записывает rs_b.commnumber значением COM_2; данные commnumber. */
|
||||
|
||||
@@ -335,10 +335,8 @@ void CAN_send(int Port, int data[], int Addr)
|
||||
void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Объявляет adr — данные adr. */
|
||||
unsigned int adr;
|
||||
/* Объявляет bit — представление регистра отдельными битовыми полями. */
|
||||
unsigned int bit[3];
|
||||
/* adr адресует очередное технологическое слово, slot выбирает одно из трёх слов кадра, mask хранит их биты достоверности 15..13. */
|
||||
unsigned int adr, slot, mask;
|
||||
/* Объявляет hiword — данные hiword; loword — данные loword. */
|
||||
unsigned long hiword,loword;
|
||||
/* Объявляет Data — данные. */
|
||||
@@ -376,12 +374,8 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
|
||||
/* Записывает adr значением (hiword >> 16); данные adr. */
|
||||
adr = (hiword >> 16);
|
||||
|
||||
/* Записывает bit[0] значением adr & 0x8000; представление регистра отдельными битовыми полями. */
|
||||
bit[0] = adr & 0x8000;
|
||||
/* Записывает bit[1] значением adr & 0x4000; представление регистра отдельными битовыми полями. */
|
||||
bit[1] = adr & 0x4000;
|
||||
/* Записывает bit[2] значением adr & 0x2000; представление регистра отдельными битовыми полями. */
|
||||
bit[2] = adr & 0x2000;
|
||||
/* Маска 0xE000 объединяет биты достоверности трёх слов CAN; сдвиг в цикле последовательно выводит каждый из них в бит 15. */
|
||||
mask = adr & 0xE000U;
|
||||
|
||||
/* Оставляет биты маски adr значением 0x1fff; данные adr. */
|
||||
adr &= 0x1fff;
|
||||
@@ -393,18 +387,12 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
|
||||
/* Записывает Data[2] значением (loword ) & 0xffff; данные. */
|
||||
Data[2] = (loword ) & 0xffff;
|
||||
|
||||
/* Проверяет if(bit[0]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */
|
||||
if(bit[0]) if(adr < ANSWER_LEN &&
|
||||
/* Записывает modbus[adr] значением Data[0]; adr++; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[0]; adr++;
|
||||
/* Проверяет if(bit[1]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */
|
||||
if(bit[1]) if(adr < ANSWER_LEN &&
|
||||
/* Записывает modbus[adr] значением Data[1]; adr++; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[1]; adr++;
|
||||
/* Проверяет if(bit[2]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */
|
||||
if(bit[2]) if(adr < ANSWER_LEN &&
|
||||
/* Записывает modbus[adr] значением Data[2]; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[2];
|
||||
/* Обрабатывает ровно три слова CAN; адрес растёт независимо от маски, а её сдвиг выбирает достоверность следующего слова. */
|
||||
for (slot = 0; slot < 3; slot++, adr++, mask <<= 1)
|
||||
/* Бит 15 текущей маски разрешает запись только в опубликованные 128 регистров, исключая выход за массив. */
|
||||
if ((mask & 0x8000U) && adr < ANSWER_LEN &&
|
||||
/* Для LOAD сохраняет статус 0x7C и отклоняет ноль в лимите 0x7D; остальные значения сохраняются как исходное 16-битное слово. */
|
||||
!(Desk == dsk_LOAD && (adr == 0x7CU || (adr == 0x7DU && !(unsigned int)Data[slot])))) modbus[adr] = Data[slot];
|
||||
|
||||
/* Фиксируем применённую команду до выхода из обработчика CAN. */
|
||||
/* A short frame cannot confirm voltage freshness. Service frames
|
||||
|
||||
@@ -17,7 +17,7 @@ extern void ump_log_rs(void);
|
||||
static const uint16_t gas167_info[GAS167_INFO_WORDS] = {
|
||||
/* Слова 0..3: сигнатура GA/S1, версия профиля и номер проекта 167. */
|
||||
0x4741U, 0x5331U, GAS167_PROFILE_VERSION, 167U,
|
||||
/* Слова 4..7: начало 0x5000, длина 128 слов, возможности RTU/CAN/FC06 и размер адресной единицы в словах. */
|
||||
/* Слова 4..7: база технологических регистров, число слов, маска RTU/CAN/FC06 и признак EEPROM M95M02 = 1; последний элемент описывает аппаратный профиль. */
|
||||
GAS167_REG_BASE, GAS167_REG_COUNT, GAS167_CAPABILITIES, 1U
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
};
|
||||
@@ -39,8 +39,10 @@ static unsigned gas167_write(uint16_t offset, uint16_t value)
|
||||
{
|
||||
/* Правила записи совпадают со штатным Modbus: статусы защиты нельзя
|
||||
* перезаписать, а недопустимый тайм-аут не позволяет обойти защиту. */
|
||||
/* На плате LOAD состояния 0x7C/0x7D принадлежат защите; запись отклоняется кодом неверного адреса 2. */
|
||||
if (Desk == dsk_LOAD && (offset == 0x7CU || offset == 0x7DU)) return 2;
|
||||
/* Состояние защиты 0x7C остаётся только для чтения; GAS-псевдоним лимита 0x507D допускает запись. */
|
||||
if (Desk == dsk_LOAD && offset == 0x7CU) return 2;
|
||||
/* Отклоняет нулевой лимит кодом Modbus 3 одинаково для RTU и служебного CAN; uint16_t ограничивает верхнюю границу 65535. */
|
||||
if (Desk == dsk_LOAD && offset == 0x7DU && value == 0U) return 3;
|
||||
/* Для сохраняемого тайм-аута CAN нагрузки применяется проверка диапазона независимо от транспорта. */
|
||||
if (Desk == dsk_LOAD && offset == 0x52U &&
|
||||
/* Значение 0 или больше 60000 мс недопустимо и возвращает код 3; защиту нельзя отключить такой записью. */
|
||||
|
||||
@@ -75,19 +75,11 @@ static unsigned int ump_source, ump_post;
|
||||
#define UMP_POST_POINTS (UMP_LOG_CAPACITY / 10U)
|
||||
/* Замораживает заполненный банк и переключает рабочий банк, сохраняя доступный архив. */
|
||||
static void ump_freeze(void);
|
||||
/* Объявляет ump_can_header — ump CAN header; ump_can_data — ump CAN данные; ump_can_count — ump CAN число. */
|
||||
static unsigned int ump_can_header, ump_can_data[3], ump_can_count;
|
||||
/* Latest PM67 sums: register 306 (index 305), register 9 (index 8). */
|
||||
/* Объявляет ump_pm67_voltage — данные ump_pm67_voltage. */
|
||||
static unsigned int ump_pm67_voltage[2];
|
||||
/* Объявляет ump_prev_commands — данные ump_prev_commands; ump_prev_inputs — данные ump_prev_inputs; ump_prev_outputs — данные ump_prev_outputs. */
|
||||
static unsigned int ump_prev_commands, ump_prev_inputs, ump_prev_outputs;
|
||||
/* Объявляет CanTimeOutErrorTR — CAN Time Out ошибка TR. Память определена в другом модуле. */
|
||||
extern int CanTimeOutErrorTR;
|
||||
/* Диагностика внутренних переменных разгона. Обновляется самим Load_runner,
|
||||
* не пересчитывает и не изменяет управляющий алгоритм. */
|
||||
/* Объявляет ump_dac_ramp — ump ЦАП ramp; ump_dac_duration — ump ЦАП duration; ump_dac_go10 — ump ЦАП go 10; ump_dac_stop10 — ump ЦАП stop 10; ump_dac_position — ump ЦАП position. */
|
||||
unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position;
|
||||
|
||||
/* Called once at boot, before enabling interrupts. TI COFF startup does
|
||||
* not clear uninitialized globals in .ebss. Do not use for record restart:
|
||||
@@ -110,18 +102,10 @@ void ump_log_init(void)
|
||||
ump_archive_count = 0; ump_archive_next = 0; ump_generation = 0;
|
||||
/* Записывает ump_source значением 0; ump_post = 0; данные ump_source. */
|
||||
ump_source = 0; ump_post = 0;
|
||||
/* Записывает ump_can_header значением 0; ump_can_count = 0; ump CAN header. */
|
||||
ump_can_header = 0; ump_can_count = 0;
|
||||
/* Цикл for (i = 0; i < 3; i++) ump_can_data[i] = 0;; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 3; i++) ump_can_data[i] = 0;
|
||||
/* Цикл for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0;; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0;
|
||||
/* Записывает ump_prev_commands значением 0; ump_prev_inputs = 0; ump_prev_outputs = 0; данные ump_prev_commands. */
|
||||
ump_prev_commands = 0; ump_prev_inputs = 0; ump_prev_outputs = 0;
|
||||
/* Записывает ump_dac_ramp значением 0; ump_dac_duration = 0; ump_dac_go10 = 0; ump ЦАП ramp. */
|
||||
ump_dac_ramp = 0; ump_dac_duration = 0; ump_dac_go10 = 0;
|
||||
/* Записывает ump_dac_stop10 значением 0; ump_dac_position = 0; ump ЦАП stop 10. */
|
||||
ump_dac_stop10 = 0; ump_dac_position = 0;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
@@ -164,8 +148,8 @@ static void ump_capture(unsigned int reason)
|
||||
{
|
||||
/* Объявляет p — данные p. Хранит указатель на данные. volatile требует фактического чтения или записи при каждом доступе. */
|
||||
volatile unsigned int *p;
|
||||
/* Объявляет i — данные i; commands — данные commands; inputs — данные inputs; outputs — данные outputs. */
|
||||
unsigned int i, commands, inputs, outputs;
|
||||
/* Объявляет commands — данные commands; inputs — данные inputs; outputs — данные outputs. */
|
||||
unsigned int commands, inputs, outputs;
|
||||
/* Проверяет if (ump_state != 1 или Desk != dsk_LOAD или !READY) return; последующий оператор выполняется только при истинном условии. */
|
||||
if (ump_state != 1 || Desk != dsk_LOAD || !READY) return;
|
||||
/* Проверяет if (no_write или never_write); последующий оператор выполняется только при истинном условии. */
|
||||
@@ -200,40 +184,20 @@ static void ump_capture(unsigned int reason)
|
||||
if (ump_post && !(reason & 0x100) && --ump_post == 0) reason = 5;
|
||||
/* Записывает p значением logs_block + ((unsigned long)ump_bank * UMP_LOG_CAPACITY + ump_next) * UMP_LOG_WORDS; данные p. */
|
||||
p = logs_block + ((unsigned long)ump_bank * UMP_LOG_CAPACITY + ump_next) * UMP_LOG_WORDS;
|
||||
/* Записывает p[0] значением (unsigned int)ump_time; p[1] = (unsigned int)(ump_time >> 16); данные p. */
|
||||
/* Сохраняет 32-битное миллисекундное время младшим словом вперёд; это первые два слова записи v4. */
|
||||
p[0] = (unsigned int)ump_time; p[1] = (unsigned int)(ump_time >> 16);
|
||||
/* Записывает p[2] значением reason; p[3] = commands; данные p. */
|
||||
p[2] = reason; p[3] = commands;
|
||||
/* Записывает p[4] значением inputs; p[5] = outputs; данные p. */
|
||||
/* Событие сохраняет причину и метку отключения; от команд остаются только нужные дискретные пуск и сброс, биты 7/6. */
|
||||
p[2] = reason; p[3] = commands & 0xC0U;
|
||||
/* Оставляет логические уровни входов и выходов для графиков START, STOP, OMEGA и разрешения нагрузки. */
|
||||
p[4] = inputs; p[5] = outputs;
|
||||
/* Записывает p[6] значением (unsigned int)IMPowse; p[7] = (unsigned int)WAKEpowse; данные p. */
|
||||
p[6] = (unsigned int)IMPowse; p[7] = (unsigned int)WAKEpowse;
|
||||
/* Записывает p[8] значением modbus[0x7B]; p[9] = modbus[0x1C]; данные p. */
|
||||
p[8] = modbus[0x7B]; p[9] = modbus[0x1C];
|
||||
/* Цикл for (i = 0; i < 4; i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 4; i++) { p[10+i] = sens_data[i]; p[14+i] = modbus[i]; }
|
||||
/* Записывает p[18] значением ump_can_header; данные p. */
|
||||
p[18] = ump_can_header;
|
||||
/* Записывает p[19] значением ump_can_data[0]; p[20] = ump_can_data[1]; p[21] = ump_can_data[2]; данные p. */
|
||||
p[19] = ump_can_data[0]; p[20] = ump_can_data[1]; p[21] = ump_can_data[2];
|
||||
/* Записывает p[22] значением ump_can_count; p[23] = CanTimeOutErrorTR; данные p. */
|
||||
p[22] = ump_can_count; p[23] = CanTimeOutErrorTR;
|
||||
/* Исходные уставки — мА; эффективные уставки после ограничений — 0.1 мА.
|
||||
* p[8] — отправленный код, а p[9] — расчётное задание, НЕ измерение тока. */
|
||||
/* Записывает p[24] значением DAC_go; p[25] = DAC_stop; данные p. */
|
||||
p[24] = DAC_go; p[25] = DAC_stop;
|
||||
/* Записывает p[26] значением DAC_min(); p[27] = DAC_max(); p[28] = DAC_cal(); данные p. */
|
||||
p[26] = DAC_min(); p[27] = DAC_max(); p[28] = DAC_cal();
|
||||
/* Записывает p[29] значением DAC_04; p[30] = DAC_20; данные p. */
|
||||
p[29] = DAC_04; p[30] = DAC_20;
|
||||
/* Записывает p[31] значением ump_dac_ramp; p[32] = ump_dac_duration; данные p. */
|
||||
p[31] = ump_dac_ramp; p[32] = ump_dac_duration;
|
||||
/* Записывает p[33] значением ump_dac_go10; p[34] = ump_dac_stop10; p[35] = ump_dac_position; данные p. */
|
||||
p[33] = ump_dac_go10; p[34] = ump_dac_stop10; p[35] = ump_dac_position;
|
||||
/* Цикл for (i = 0; i < 4; i++) p[36+i] = ADC_table[i];; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 4; i++) p[36+i] = ADC_table[i];
|
||||
/* Записывает p[40] значением ump_pm67_voltage[0]; p[41] = ump_pm67_voltage[1]; данные p. */
|
||||
p[40] = ump_pm67_voltage[0]; p[41] = ump_pm67_voltage[1];
|
||||
/* Задание тока берётся из регистра 0x1C в единицах 0,1 мА; это расчётная величина, а не измерение физического тока. */
|
||||
p[6] = modbus[0x1C];
|
||||
/* Сохраняет оставшиеся выбранные начальную и конечную уставки в целых мА. */
|
||||
p[7] = DAC_go; p[8] = DAC_stop;
|
||||
/* Оставляет оба ЗПТ в вольтах: CAN-индекс 305 относится к ЗПТ1, индекс 8 — к ЗПТ2. */
|
||||
p[9] = ump_pm67_voltage[0]; p[10] = ump_pm67_voltage[1];
|
||||
/* Резервное нулевое слово делает длину записи чётной: служебный CAN передаёт по два 16-битных слова за фрагмент. */
|
||||
p[11] = 0;
|
||||
/* Изменяет счётчик в выражении ump_next++; на один для следующего шага. */
|
||||
ump_next++;
|
||||
/* Проверяет if (ump_next == UMP_LOG_CAPACITY) ump_next = 0; последующий оператор выполняется только при истинном условии. */
|
||||
@@ -338,12 +302,6 @@ void ump_log_can(unsigned int header, unsigned int a, unsigned int b, unsigned i
|
||||
}
|
||||
/* Проверяет if (ump_state != 1); последующий оператор выполняется только при истинном условии. */
|
||||
if (ump_state != 1) { __restore_interrupts(saved); return; }
|
||||
/* Записывает ump_can_header значением header; ump CAN header. */
|
||||
ump_can_header = header;
|
||||
/* Записывает ump_can_data[0] значением a; ump_can_data[1] = b; ump_can_data[2] = c; ump CAN данные. */
|
||||
ump_can_data[0] = a; ump_can_data[1] = b; ump_can_data[2] = c;
|
||||
/* Изменяет счётчик в выражении ump_can_count++; на один для следующего шага. */
|
||||
ump_can_count++;
|
||||
/* Вызывает ump_capture. Создаёт одну запись состояния: входы, выходы, команды, напряжения и параметры тока нагрузки. */
|
||||
ump_capture(2);
|
||||
/* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */
|
||||
@@ -456,7 +414,7 @@ unsigned int ump_log_read(unsigned int address)
|
||||
/* Ветвь выбора для UMP_LOG_BASE; выполняется при совпадении селектора switch. */
|
||||
case UMP_LOG_BASE: return 0x554D;
|
||||
/* Ветвь выбора для UMP_LOG_BASE+1; выполняется при совпадении селектора switch. */
|
||||
case UMP_LOG_BASE+1: return 3;
|
||||
case UMP_LOG_BASE+1: return 4;
|
||||
/* Ветвь выбора для UMP_LOG_BASE+2; выполняется при совпадении селектора switch. */
|
||||
case UMP_LOG_BASE+2: return ump_source ? 3 : ump_state;
|
||||
/* Ветвь выбора для UMP_LOG_BASE+3; выполняется при совпадении селектора switch. */
|
||||
@@ -501,7 +459,7 @@ unsigned int ump_log_read(unsigned int address)
|
||||
return ump_word(ump_source, ump_cursor + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Последние три записи для онлайн-графика, без остановки и без
|
||||
/* Последние UMP_LOG_LIVE_RECORDS записей для онлайн-графика, без остановки и без
|
||||
* изменения курсора архивного чтения. Первые два слова — их номер. */
|
||||
/* Проверяет if (address >= UMP_LOG_LIVE и address < UMP_LOG_LIVE+124); последующий оператор выполняется только при истинном условии. */
|
||||
if (address >= UMP_LOG_LIVE && address < UMP_LOG_LIVE+124) {
|
||||
|
||||
@@ -109,7 +109,7 @@ void main()
|
||||
setup_uart(COM_1,115200);
|
||||
|
||||
/* Проверяет if(Owen)setup_uart(COM_2,57600); последующий оператор выполняется только при истинном условии. */
|
||||
if(Owen)setup_uart(COM_2,57600);
|
||||
if(Owen)setup_uart(COM_2,115200);
|
||||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||||
else setup_uart(COM_2,115200);
|
||||
|
||||
@@ -266,7 +266,7 @@ void main()
|
||||
{
|
||||
/* Записывает cDefParam значением 0; данные cDefParam. */
|
||||
cDefParam=0;
|
||||
/* Вызывает Default_params. Заполняет регистры заводскими значениями; тайм-аут CAN нагрузки по умолчанию равен 600 мс. */
|
||||
/* По команде восстановления записывает заводские параметры; для LOAD тайм-аут свежести CAN становится 2000 мс. */
|
||||
Default_params();
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
@@ -746,7 +746,7 @@ void Init_packMask()
|
||||
{ Maska[m_SLOW][7]|= 0x0030; // Калибровка ЦАП
|
||||
/* Устанавливает биты Maska[m_SLOW][5] значением 0x0003; данные Maska. */
|
||||
Maska[m_SLOW][5]|= 0x0003; // Начало и конец зарада
|
||||
Maska[m_FAST][7]|= 0xF000; /* Protection status 0x7C + attempts 0x7D. */ // Дублировать команды /* Устанавливает биты Maska[m_FAST][7] значением 0xF000; данные Maska. */
|
||||
Maska[m_FAST][7]|= 0xF000; /* Быстрый CAN публикует статус 0x7C и настроенный лимит пусков 0x7D; биты 12..15 маски соответствуют адресам 0x7C..0x7F. */ // Дублировать команды /* Устанавливает биты Maska[m_FAST][7] значением 0xF000; данные Maska. */
|
||||
/* Устанавливает биты Maska[m_FAST][1] значением 0x3000; данные Maska. */
|
||||
Maska[m_FAST][1]|= 0x3000; // Управлающий ток СИФУ
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
|
||||
@@ -59,7 +59,7 @@ int modbus[ANSWER_LEN+1];
|
||||
/* Объявляет param — данные param. */
|
||||
unsigned int param[ANSWER_LEN+1];
|
||||
|
||||
/* Заполняет регистры заводскими значениями; тайм-аут CAN нагрузки по умолчанию равен 600 мс. */
|
||||
/* Заполняет регистры заводскими значениями; для LOAD задаёт тайм-аут свежести CAN 2000 мс. Значение 600 мс применяется отдельно при восстановлении недопустимого параметра. */
|
||||
void Default_params()
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
@@ -248,6 +248,8 @@ void Default_params()
|
||||
/* Записывает DAC_go значением 6; начальный ток нагрузки в мА, технологический регистр 0x50. */
|
||||
DAC_go = 6; // начало зарада
|
||||
LOAD_CAN_TIMEOUT = 2000; /* ms without fresh ZPT: freeze ramp. */ /* Записывает LOAD_CAN_TIMEOUT значением 2000; сохраняемый тайм-аут свежести напряжения CAN в миллисекундах, регистр 0x52. */
|
||||
/* Устанавливает прежний заводской лимит пяти пусков, включая первый START; настройка хранится в сохраняемом регистре 0x7D. */
|
||||
LOAD_MAX_ATTEMPTS = LOAD_DEFAULT_MAX_ATTEMPTS;
|
||||
/* Записывает DAC_stop значением 16; конечный ток нагрузки в мА, технологический регистр 0x51. */
|
||||
DAC_stop= 16; // конец зарада
|
||||
|
||||
@@ -295,7 +297,7 @@ void Load_params()
|
||||
else
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Вызывает Default_params. Заполняет регистры заводскими значениями; тайм-аут CAN нагрузки по умолчанию равен 600 мс. */
|
||||
/* Восстанавливает заводские параметры после неверного CRC или несоответствия режима платы; LOAD_CAN_TIMEOUT получает 2000 мс. */
|
||||
Default_params();
|
||||
/* Записывает Commands значением 0; слово команд, технологический регистр 127. */
|
||||
Commands=0;
|
||||
@@ -373,7 +375,7 @@ static void modbus_exception(RS_DATA *rs_arr, unsigned int function, unsigned in
|
||||
}
|
||||
|
||||
/* UART parser has already validated CRC and accepted the device address. */
|
||||
/* Выбирает GAS либо существующее адресное пространство УМП и снимает согласованный ответ под краткой блокировкой IRQ. */
|
||||
/* Маршрутизирует расширенные адреса: RAM УМП/GAS захватывается под краткой блокировкой IRQ, а чтение EEPROM выполняется с разрешёнными IRQ, поскольку SPI продвигается из Timer2. */
|
||||
static int receive_ump(RS_DATA *rs_arr)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
@@ -381,7 +383,7 @@ static int receive_ump(RS_DATA *rs_arr)
|
||||
unsigned int address, value, saved, length, count, error;
|
||||
/* Main-loop only; encoded into the UART buffer before the next request.
|
||||
* Keep the 124-word snapshot off the shared interrupt stack. */
|
||||
/* Объявляет words — слова. */
|
||||
/* Статический буфер хранит до 124 слов снимка вне общего стека прерываний; главный цикл сериализует его до обработки следующего запроса. */
|
||||
static uint16_t words[UMP_MAX_WORDS];
|
||||
/* Записывает address значением (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; адрес. */
|
||||
address = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3];
|
||||
@@ -503,17 +505,18 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
|
||||
/* Записывает rs_arr->buffer[2] значением Length_MB*2; rs arr буфер. */
|
||||
rs_arr->buffer[2] = Length_MB*2;
|
||||
|
||||
/* Защищаем целостность одного снимка/блока; передача UART идёт уже
|
||||
* с разрешёнными прерываниями и не задерживает измерение/управление. */
|
||||
/* Цикл for (i=0;i<Length_MB;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
/* Штатные регистры копируются последовательно без блокировки IRQ вокруг всего блока.
|
||||
* Измерительные ISR могут обновить соседние слова между чтениями; этот путь не гарантирует
|
||||
* единый момент захвата всех значений. RAM-расширения захватываются отдельно в receive_ump. */
|
||||
/* Формирует payload из запрошенного числа 16-битных слов; для каждого слова в ответе нужны два байта. */
|
||||
for (i=0;i<Length_MB;i++)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает value значением modbus[Address_MB+i]; данные value. */
|
||||
/* Читает очередное слово один раз, чтобы старший и младший байты ответа относились к одному считанному значению. */
|
||||
value = modbus[Address_MB+i];
|
||||
/* Записывает rs_arr->buffer[3+i*2] значением (value >> 8) & 0xFF; rs arr буфер. */
|
||||
/* Помещает старший байт слова после трёхбайтного заголовка; данные регистра передаются старшим байтом вперёд. */
|
||||
rs_arr->buffer[3+i*2] = (value >> 8) & 0xFF;
|
||||
/* Записывает rs_arr->buffer[3+i*2+1] значением value & 0xFF; rs arr буфер. */
|
||||
/* Помещает младший байт непосредственно за старшим, сохраняя исходный 16-битный рисунок регистра. */
|
||||
rs_arr->buffer[3+i*2+1] = value & 0xFF;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
@@ -528,13 +531,13 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
|
||||
/* Записывает rs_arr->buffer[Length_MB*2+4] значением HIBYTE(crc); rs arr буфер. */
|
||||
rs_arr->buffer[Length_MB*2+4] = HIBYTE(crc);
|
||||
|
||||
/* Записывает rs_arr->buffer[Length_MB*2+5] значением 0; rs arr буфер. */
|
||||
/* Первый исторический нулевой байт после CRC; входит в увеличенную длину штатного ответа. */
|
||||
rs_arr->buffer[Length_MB*2+5] = 0;
|
||||
/* Записывает rs_arr->buffer[Length_MB*2+6] значением 0; rs arr буфер. */
|
||||
/* Второй исторический нулевой байт после CRC; сохраняет прежний формат низких технологических адресов. */
|
||||
rs_arr->buffer[Length_MB*2+6] = 0;
|
||||
/* Записывает rs_arr->buffer[Length_MB*2+7] значением 0; rs arr буфер. */
|
||||
/* Третий исторический нулевой байт после CRC; это последний элемент передаваемого буфера при длине 2*N+8. */
|
||||
rs_arr->buffer[Length_MB*2+7] = 0;
|
||||
/* Записывает rs_arr->buffer[Length_MB*2+8] значением 0; rs arr буфер. */
|
||||
/* Дополнительный ноль находится за длиной, переданной в RS_Send; в текущий ответ это слово не отправляется. */
|
||||
rs_arr->buffer[Length_MB*2+8] = 0;
|
||||
|
||||
/* Записывает rs_arr->flag_TIMEOUT_to_Send значением true; rs arr флаг TIMEOUT to Send. */
|
||||
@@ -577,12 +580,18 @@ void ReceiveCommandModbus6(RS_DATA *rs_arr)
|
||||
/* Записывает Data_MB значением (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; данные MB. */
|
||||
Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
|
||||
|
||||
/* Проверяет if (Desk == dsk_LOAD и (Address_MB == 0x7CU или Address_MB == 0x7DU)); последующий оператор выполняется только при истинном условии. */
|
||||
if (Desk == dsk_LOAD && (Address_MB == 0x7CU || Address_MB == 0x7DU)) {
|
||||
/* На плате LOAD запрещает запись только состояния защиты 0x7C; регистр лимита 0x7D принимает настройку. */
|
||||
if (Desk == dsk_LOAD && Address_MB == 0x7CU) {
|
||||
/* Вызывает modbus_exception. Формирует ответ Modbus с установленным старшим битом функции и кодом исключения. */
|
||||
modbus_exception(rs_arr, CMD_MODBUS_6, 2); return;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Ноль в лимите 0x7D недопустим: первый пуск должен входить в разрешённые 1..65535 попыток. */
|
||||
if (Desk == dsk_LOAD && Address_MB == 0x7DU && Data_MB == 0U) {
|
||||
/* Возвращает код Modbus 3 для недопустимого значения, сохраняя прежний лимит и состояние автомата. */
|
||||
modbus_exception(rs_arr, CMD_MODBUS_6, 3); return;
|
||||
/* Завершает проверку ненулевого лимита перед общей записью технологического слова. */
|
||||
}
|
||||
/* Проверяет if (Desk == dsk_LOAD и Address_MB == 0x52U и; последующий оператор выполняется только при истинном условии. */
|
||||
if (Desk == dsk_LOAD && Address_MB == 0x52U &&
|
||||
/* Продолжает список аргументов, полей или выражение (Data_MB == 0U || Data_MB > 60000U)) {; порядок элементов сохраняется. */
|
||||
|
||||
2329
UKSSTMS320F28335.map
2329
UKSSTMS320F28335.map
@@ -1,10 +1,10 @@
|
||||
******************************************************************************
|
||||
TMS320C2000 Linker PC v22.6.0
|
||||
******************************************************************************
|
||||
>> Linked Thu Oct 1 18:01:50 2026
|
||||
>> Linked Mon Oct 12 12:22:39 2026
|
||||
|
||||
OUTPUT FILE NAME: <K:/git_project/Balsam_167_periph/UKSSTMS320F28335/../bin/UKSSTMS320F28335.out>
|
||||
ENTRY POINT SYMBOL: "_c_int00" address: 0000b9b5
|
||||
ENTRY POINT SYMBOL: "_c_int00" address: 0000a855
|
||||
|
||||
|
||||
MEMORY CONFIGURATION
|
||||
@@ -13,8 +13,8 @@ MEMORY CONFIGURATION
|
||||
---------------------- -------- --------- -------- -------- ---- --------
|
||||
PAGE 0:
|
||||
ZONE0 00004000 00001000 00000000 00001000 RWIX
|
||||
RAML0 00008000 00004000 00003b73 0000048d RWIX
|
||||
RAML4 0000c000 00001000 000003f8 00000c08 RWIX
|
||||
RAML0 00008000 00004000 00003aa7 00000559 RWIX
|
||||
RAML4 0000c000 00001000 000003e6 00000c1a RWIX
|
||||
ZONE6 00100000 00100000 00000000 00100000 RWIX
|
||||
FLASHH 00300000 00008000 00000000 00008000 RWIX
|
||||
FLASHG 00308000 00008000 00000000 00008000 RWIX
|
||||
@@ -87,7 +87,7 @@ PAGE 1:
|
||||
SCIB 00007750 00000010 00000010 00000000 RWIX
|
||||
SCIC 00007770 00000010 00000010 00000000 RWIX
|
||||
I2CA 00007900 00000040 00000022 0000001e RWIX
|
||||
RAML5 0000d000 00003000 00000fdf 00002021 RWIX
|
||||
RAML5 0000d000 00003000 0000105e 00001fa2 RWIX
|
||||
ZONE7A 00200000 0000fc00 0000fa00 00000200 RWIX
|
||||
ZONE7B 0020fc00 00000400 00000000 00000400 RWIX
|
||||
FLASHB 00330000 00008000 00000000 00008000 RWIX
|
||||
@@ -100,7 +100,7 @@ SECTION ALLOCATION MAP
|
||||
output attributes/
|
||||
section page origin length input sections
|
||||
-------- ---- ---------- ---------- ----------------
|
||||
.cinit 0 0000c000 0000028b
|
||||
.cinit 0 0000c000 00000273
|
||||
0000c000 00000103 crc16.obj (.cinit:_crc_16_tab)
|
||||
0000c103 00000043 message.obj (.cinit:_def_cal)
|
||||
0000c146 0000003d measure.obj (.cinit)
|
||||
@@ -111,88 +111,269 @@ section page origin length input sections
|
||||
0000c1f3 00000014 log_to_mem.obj (.cinit)
|
||||
0000c207 00000013 kanal.obj (.cinit:_digits)
|
||||
0000c21a 00000011 pulto.obj (.cinit)
|
||||
0000c22b 00000010 DAC.obj (.cinit)
|
||||
0000c23b 0000000a rts2800_fpu32.lib : _lock.obj (.cinit)
|
||||
0000c245 0000000a : exit.obj (.cinit)
|
||||
0000c24f 00000008 ADC.obj (.cinit)
|
||||
0000c257 00000008 kanal.obj (.cinit:_readr)
|
||||
0000c25f 00000008 cntrl_adr.obj (.cinit)
|
||||
0000c267 00000008 main.obj (.cinit)
|
||||
0000c26f 00000005 ADC.obj (.cinit:_cwnt_ok$4)
|
||||
0000c274 00000005 measure.obj (.cinit:_low_count)
|
||||
0000c279 00000004 RS485.obj (.cinit)
|
||||
0000c27d 00000004 RS485.obj (.cinit:_RS_Len)
|
||||
0000c281 00000004 bios.obj (.cinit)
|
||||
0000c285 00000004 rts2800_fpu32.lib : errno.obj (.cinit)
|
||||
0000c289 00000002 --HOLE-- [fill = 0]
|
||||
0000c22b 0000000a rts2800_fpu32.lib : _lock.obj (.cinit)
|
||||
0000c235 0000000a : exit.obj (.cinit)
|
||||
0000c23f 00000008 ADC.obj (.cinit)
|
||||
0000c247 00000008 kanal.obj (.cinit:_readr)
|
||||
0000c24f 00000008 cntrl_adr.obj (.cinit)
|
||||
0000c257 00000005 ADC.obj (.cinit:_cwnt_ok$4)
|
||||
0000c25c 00000005 measure.obj (.cinit:_low_count)
|
||||
0000c261 00000004 RS485.obj (.cinit)
|
||||
0000c265 00000004 RS485.obj (.cinit:_RS_Len)
|
||||
0000c269 00000004 bios.obj (.cinit)
|
||||
0000c26d 00000004 rts2800_fpu32.lib : errno.obj (.cinit)
|
||||
0000c271 00000002 --HOLE-- [fill = 0]
|
||||
|
||||
.pinit 0 00008000 00000000 UNINITIALIZED
|
||||
|
||||
.text 0 00008000 00003b73
|
||||
00008000 000008e6 measure.obj (.text)
|
||||
000088e6 00000711 DSP2833x_SWPrioritizedDefaultIsr.obj (.text:retain)
|
||||
00008ff7 000003c3 peripher.obj (.text)
|
||||
000093ba 000003bd RS485.obj (.text)
|
||||
00009777 0000037f log_to_mem.obj (.text)
|
||||
00009af6 00000325 message.obj (.text)
|
||||
00009e1b 00000309 shared_ump.obj (.text)
|
||||
0000a124 000002bf bios.obj (.text)
|
||||
0000a3e3 0000025b spise2p.obj (.text)
|
||||
0000a63e 0000024d main.obj (.text)
|
||||
0000a88b 000001f9 ecan.obj (.text)
|
||||
0000aa84 000001f3 ADC.obj (.text:retain)
|
||||
0000ac77 000001c5 measure.obj (.text:retain)
|
||||
0000ae3c 00000196 ADC.obj (.text)
|
||||
0000afd2 0000018a DAC.obj (.text)
|
||||
0000b15c 0000016c kanal.obj (.text)
|
||||
0000b2c8 0000015d DSP2833x_SysCtrl.obj (.text)
|
||||
0000b425 00000151 pulto.obj (.text:retain)
|
||||
0000b576 00000114 RS485.obj (.text:retain)
|
||||
0000b68a 0000010c DSP2833x_Xintf.obj (.text)
|
||||
0000b796 00000088 rts2800_fpu32.lib : fs_div.obj (.text)
|
||||
0000b81e 00000075 crc16.obj (.text)
|
||||
0000b893 00000075 ecan.obj (.text:retain)
|
||||
0000b908 0000005e DSP2833x_CpuTimers.obj (.text)
|
||||
0000b966 0000004f tools.obj (.text)
|
||||
0000b9b5 00000046 rts2800_fpu32.lib : boot.obj (.text)
|
||||
0000b9fb 00000039 spise2p.obj (.text:retain)
|
||||
0000ba34 00000037 filter_bat2.obj (.text)
|
||||
0000ba6b 0000002a rts2800_fpu32.lib : l_div.obj (.text)
|
||||
0000ba95 00000028 DSP2833x_PieCtrl.obj (.text)
|
||||
0000babd 00000001 --HOLE-- [fill = 0]
|
||||
0000babe 00000020 rts2800_fpu32.lib : sqrt.obj (.text)
|
||||
0000bade 0000001d pulto.obj (.text)
|
||||
0000bafb 0000001b rts2800_fpu32.lib : args_main.obj (.text)
|
||||
0000bb16 00000019 DSP2833x_Adc.obj (.text)
|
||||
0000bb2f 00000019 rts2800_fpu32.lib : exit.obj (.text)
|
||||
0000bb48 0000000e DSP2833x_SWPrioritizedPieVect.obj (.text)
|
||||
0000bb56 0000000b rts2800_fpu32.lib : u_div.obj (.text)
|
||||
0000bb61 00000009 : _lock.obj (.text)
|
||||
0000bb6a 00000005 cntrl_adr.obj (.text)
|
||||
0000bb6f 00000004 DSP2833x_usDelay.obj (.text)
|
||||
.text 0 00008000 00003aa7
|
||||
00008000 0000025a measure.obj (.text:_Current_count)
|
||||
0000825a 000001dd ADC.obj (.text:_adc_isr)
|
||||
00008437 000001a7 measure.obj (.text:_Temper_count)
|
||||
000085de 000001a3 peripher.obj (.text:_get_Buttons)
|
||||
00008781 0000019f main.obj (.text:_main)
|
||||
00008920 0000018d ADC.obj (.text:_setup_adc)
|
||||
00008aad 00000184 measure.obj (.text:_cpu_timer1_isr_SENS)
|
||||
00008c31 0000015c DAC.obj (.text:_Load_runner)
|
||||
00008d8d 00000152 RS485.obj (.text:_RS_RX_Handler)
|
||||
00008edf 00000143 pulto.obj (.text:_cpu_timer1_isr_PULT)
|
||||
00009022 00000129 measure.obj (.text:_Init_sensors)
|
||||
0000914b 00000122 spise2p.obj (.text:_SPISE2P_DRV_tick)
|
||||
0000926d 00000115 peripher.obj (.text:_get_Mode)
|
||||
00009382 0000010b kanal.obj (.text:_kanal_Send)
|
||||
0000948d 000000f9 measure.obj (.text:_Power_count)
|
||||
00009586 000000ec message.obj (.text:_Default_params)
|
||||
00009672 000000ce RS485.obj (.text:_setup_uart)
|
||||
00009740 000000b3 log_to_mem.obj (.text:_ump_log_read)
|
||||
000097f3 000000ae measure.obj (.text:_calc_sensor_koef)
|
||||
000098a1 000000ac ecan.obj (.text:_InitCan)
|
||||
0000994d 000000a8 ecan.obj (.text:_UMP_CAN_service)
|
||||
000099f5 00000001 bios.obj (.text:_init)
|
||||
000099f6 0000009d message.obj (.text:_ReceiveCommandModbus3)
|
||||
00009a93 0000009c peripher.obj (.text:_select_tpl_canal)
|
||||
00009b2f 00000097 bios.obj (.text:_upload)
|
||||
00009bc6 00000094 measure.obj (.text:_Init_packMask)
|
||||
00009c5a 00000090 RS485.obj (.text:_RS_FifoTx)
|
||||
00009cea 0000008c message.obj (.text:_receive_ump)
|
||||
00009d76 0000008a log_to_mem.obj (.text:_ump_capture)
|
||||
00009e00 00000088 rts2800_fpu32.lib : fs_div.obj (.text)
|
||||
00009e88 00000085 DSP2833x_SysCtrl.obj (.text:_InitPeripheralClocks)
|
||||
00009f0d 00000084 bios.obj (.text:_extendbios)
|
||||
00009f91 00000001 bios.obj (.text:_run)
|
||||
00009f92 00000083 shared_ump.obj (.text:_ump_rtu_encode)
|
||||
0000a015 00000082 DSP2833x_SysCtrl.obj (.text:_InitPll)
|
||||
0000a097 00000078 bios.obj (.text:_peek)
|
||||
0000a10f 00000072 ecan.obj (.text:_Handlai)
|
||||
0000a181 00000071 shared_ump.obj (.text:_ump_validate)
|
||||
0000a1f2 00000070 log_to_mem.obj (.text:_ump_log_write)
|
||||
0000a262 0000006e RS485.obj (.text:_RS_TX_Handler)
|
||||
0000a2d0 00000069 DAC.obj (.text:_Load_protection_prepare)
|
||||
0000a339 00000062 measure.obj (.text:_Init_sensors_more)
|
||||
0000a39b 00000059 DSP2833x_Xintf.obj (.text:_InitXintf16Gpio)
|
||||
0000a3f4 00000057 bios.obj (.text:_get_command)
|
||||
0000a44b 00000050 message.obj (.text:_ReceiveCommandModbus6)
|
||||
0000a49b 0000004e DAC.obj (.text:_anal_output)
|
||||
0000a4e9 0000004e DAC.obj (.text:_load_start)
|
||||
0000a537 0000004d shared_ump.obj (.text:_ump_prepare)
|
||||
0000a584 0000004c RS485.obj (.text:_RS_FifoStart)
|
||||
0000a5d0 0000004b RS485.obj (.text:_RS_Send)
|
||||
0000a61b 0000004a ecan.obj (.text:_CANa_handler)
|
||||
0000a665 00000049 bios.obj (.text:_load)
|
||||
0000a6ae 00000048 ecan.obj (.text:_CAN_send)
|
||||
0000a6f6 00000047 bios.obj (.text:_initload)
|
||||
0000a73d 00000046 RS485.obj (.text:_RSA_RX_Handler)
|
||||
0000a783 00000046 RS485.obj (.text:_RSA_TX_Handler)
|
||||
0000a7c9 00000046 RS485.obj (.text:_RSB_RX_Handler)
|
||||
0000a80f 00000046 RS485.obj (.text:_RSB_TX_Handler)
|
||||
0000a855 00000046 rts2800_fpu32.lib : boot.obj (.text)
|
||||
0000a89b 00000042 log_to_mem.obj (.text:_ump_log_can)
|
||||
0000a8dd 00000041 RS485.obj (.text:_RS_FifoAbort)
|
||||
0000a91e 00000041 spise2p.obj (.text:_Seeprom_read)
|
||||
0000a95f 00000041 spise2p.obj (.text:_Seeprom_write)
|
||||
0000a9a0 00000041 RS485.obj (.text:_setup_arr_cmd_length)
|
||||
0000a9e1 00000040 message.obj (.text:_Load_params)
|
||||
0000aa21 0000003e tools.obj (.text:_init_zone7)
|
||||
0000aa5f 0000003b DSP2833x_CpuTimers.obj (.text:_InitCpuTimers)
|
||||
0000aa9a 0000003b DAC.obj (.text:_Load_voltage_can)
|
||||
0000aad5 0000003b shared_ump.obj (.text:_ump_can_fragment)
|
||||
0000ab10 0000003a bios.obj (.text:_poke)
|
||||
0000ab4a 00000039 spise2p.obj (.text:_cpu_timer2_isr)
|
||||
0000ab83 00000038 message.obj (.text:_SendCommandModbus4)
|
||||
0000abbb 00000038 shared_ump.obj (.text:_ump_tms28335_fragment)
|
||||
0000abf3 00000037 RS485.obj (.text:_RS_BSend)
|
||||
0000ac2a 00000037 message.obj (.text:_ReceiveAnswerModbus4)
|
||||
0000ac61 00000033 bios.obj (.text:_Answer)
|
||||
0000ac94 00000033 message.obj (.text:_modbus_exception)
|
||||
0000acc7 00000033 log_to_mem.obj (.text:_ump_word)
|
||||
0000acfa 00000032 spise2p.obj (.text:_SPISE2P_DRV_init)
|
||||
0000ad2c 00000032 peripher.obj (.text:_unsetup_leds_line)
|
||||
0000ad5e 00000031 DAC.obj (.text:_dSEND)
|
||||
0000ad8f 0000002f RS485.obj (.text:_RS_FifoTick1ms)
|
||||
0000adbe 0000002e filter_bat2.obj (.text:_filterbat)
|
||||
0000adec 0000002e log_to_mem.obj (.text:_ump_log_io)
|
||||
0000ae1a 0000002d RS485.obj (.text:_RS_SetLineMode)
|
||||
0000ae47 0000002d main.obj (.text:_timer_Init)
|
||||
0000ae74 0000002c crc16.obj (.text:_get_crc_16b)
|
||||
0000aea0 0000002b ecan.obj (.text:_CANa_reset_err)
|
||||
0000aecb 0000002a rts2800_fpu32.lib : l_div.obj (.text)
|
||||
0000aef5 00000029 spise2p.obj (.text:_InitSeeprom)
|
||||
0000af1e 00000027 crc16.obj (.text:_get_crc16)
|
||||
0000af45 00000026 RS485.obj (.text:_RS_SetLineSpeed)
|
||||
0000af6b 00000024 message.obj (.text:_Save_params)
|
||||
0000af8f 00000024 DAC.obj (.text:_load_stop)
|
||||
0000afb3 00000024 peripher.obj (.text:_select_tpl_255)
|
||||
0000afd7 00000022 peripher.obj (.text:_setup_leds_line)
|
||||
0000aff9 00000021 DSP2833x_CpuTimers.obj (.text:_ConfigCpuTimer)
|
||||
0000b01a 00000020 DAC.obj (.text:_Setup_DAC_time)
|
||||
0000b03a 00000020 rts2800_fpu32.lib : sqrt.obj (.text)
|
||||
0000b05a 0000001f DSP2833x_PieCtrl.obj (.text:_InitPieCtrl)
|
||||
0000b079 0000001f measure.obj (.text:_reset_errs)
|
||||
0000b098 0000001e DAC.obj (.text:_Load_control_init)
|
||||
0000b0b6 0000001e kanal.obj (.text:_SENDBIT)
|
||||
0000b0d4 0000001d log_to_mem.obj (.text:_ump_log_init)
|
||||
0000b0f1 0000001d shared_ump.obj (.text:_ump_tms28335_prepare)
|
||||
0000b10e 0000001d pulto.obj (.text:_what_is)
|
||||
0000b12b 0000001c DAC.obj (.text:_Init_DAC)
|
||||
0000b147 0000001c measure.obj (.text:_im_calc)
|
||||
0000b163 0000001c shared_ump.obj (.text:_ump_crc)
|
||||
0000b17f 0000001c shared_ump.obj (.text:_ump_tms28335_capture)
|
||||
0000b19b 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ADCINT_ISR)
|
||||
0000b1b6 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_DINTCH1_ISR)
|
||||
0000b1d1 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_DINTCH2_ISR)
|
||||
0000b1ec 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_DINTCH3_ISR)
|
||||
0000b207 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_DINTCH4_ISR)
|
||||
0000b222 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_DINTCH5_ISR)
|
||||
0000b23d 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_DINTCH6_ISR)
|
||||
0000b258 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAN0INTA_ISR)
|
||||
0000b273 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAN0INTB_ISR)
|
||||
0000b28e 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAN1INTA_ISR)
|
||||
0000b2a9 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAN1INTB_ISR)
|
||||
0000b2c4 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAP1_INT_ISR)
|
||||
0000b2df 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAP2_INT_ISR)
|
||||
0000b2fa 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAP3_INT_ISR)
|
||||
0000b315 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAP4_INT_ISR)
|
||||
0000b330 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAP5_INT_ISR)
|
||||
0000b34b 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ECAP6_INT_ISR)
|
||||
0000b366 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM1_INT_ISR)
|
||||
0000b381 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM1_TZINT_ISR)
|
||||
0000b39c 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM2_INT_ISR)
|
||||
0000b3b7 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM2_TZINT_ISR)
|
||||
0000b3d2 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM3_INT_ISR)
|
||||
0000b3ed 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM3_TZINT_ISR)
|
||||
0000b408 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM4_INT_ISR)
|
||||
0000b423 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM4_TZINT_ISR)
|
||||
0000b43e 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM5_INT_ISR)
|
||||
0000b459 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM5_TZINT_ISR)
|
||||
0000b474 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM6_INT_ISR)
|
||||
0000b48f 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EPWM6_TZINT_ISR)
|
||||
0000b4aa 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EQEP1_INT_ISR)
|
||||
0000b4c5 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EQEP2_INT_ISR)
|
||||
0000b4e0 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_I2CINT1A_ISR)
|
||||
0000b4fb 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_I2CINT2A_ISR)
|
||||
0000b516 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_LUF_ISR)
|
||||
0000b531 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_LVF_ISR)
|
||||
0000b54c 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_MRINTA_ISR)
|
||||
0000b567 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_MRINTB_ISR)
|
||||
0000b582 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_MXINTA_ISR)
|
||||
0000b59d 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_MXINTB_ISR)
|
||||
0000b5b8 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SCIRXINTA_ISR)
|
||||
0000b5d3 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SCIRXINTB_ISR)
|
||||
0000b5ee 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SCIRXINTC_ISR)
|
||||
0000b609 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SCITXINTA_ISR)
|
||||
0000b624 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SCITXINTB_ISR)
|
||||
0000b63f 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SCITXINTC_ISR)
|
||||
0000b65a 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SEQ1INT_ISR)
|
||||
0000b675 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SEQ2INT_ISR)
|
||||
0000b690 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SPIRXINTA_ISR)
|
||||
0000b6ab 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_SPITXINTA_ISR)
|
||||
0000b6c6 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_TINT0_ISR)
|
||||
0000b6e1 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_WAKEINT_ISR)
|
||||
0000b6fc 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_XINT3_ISR)
|
||||
0000b717 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_XINT4_ISR)
|
||||
0000b732 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_XINT5_ISR)
|
||||
0000b74d 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_XINT6_ISR)
|
||||
0000b768 0000001b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_XINT7_ISR)
|
||||
0000b783 0000001b rts2800_fpu32.lib : args_main.obj (.text)
|
||||
0000b79e 0000001a RS485.obj (.text:_RS_SetBitMode)
|
||||
0000b7b8 0000001a RS485.obj (.text:_create_uart_vars)
|
||||
0000b7d2 00000019 DSP2833x_Adc.obj (.text:_InitAdc)
|
||||
0000b7eb 00000019 DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_XINT1_ISR)
|
||||
0000b804 00000019 DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_XINT2_ISR)
|
||||
0000b81d 00000019 rts2800_fpu32.lib : exit.obj (.text)
|
||||
0000b836 00000019 : prolog.obj (.text)
|
||||
0000b84f 00000018 kanal.obj (.text:_RESET)
|
||||
0000b867 00000018 log_to_mem.obj (.text:_ump_log_tick)
|
||||
0000b87f 00000017 log_to_mem.obj (.text:_clear_mem)
|
||||
0000b896 00000016 DSP2833x_SysCtrl.obj (.text:_ServiceDog)
|
||||
0000b8ac 00000014 bios.obj (.text:__getbyte)
|
||||
0000b8c0 00000014 measure.obj (.text:_er_anal)
|
||||
0000b8d4 00000014 log_to_mem.obj (.text:_ump_outputs)
|
||||
0000b8e8 00000013 RS485.obj (.text:_RS_FifoWait)
|
||||
0000b8fb 00000013 log_to_mem.obj (.text:_ump_inputs)
|
||||
0000b90e 00000012 crc16.obj (.text:_get_crc_16)
|
||||
0000b920 00000010 tools.obj (.text:_pause_us)
|
||||
0000b930 00000010 shared_ump.obj (.text:_read_word)
|
||||
0000b940 0000000d DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_DATALOG_ISR)
|
||||
0000b94d 0000000d DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_INT13_ISR)
|
||||
0000b95a 0000000d DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_INT14_ISR)
|
||||
0000b967 0000000d DSP2833x_SWPrioritizedPieVect.obj (.text:_InitPieVectTable)
|
||||
0000b974 0000000d DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_RTOSINT_ISR)
|
||||
0000b981 0000000c rts2800_fpu32.lib : epilog.obj (.text)
|
||||
0000b98d 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_EMUINT_ISR)
|
||||
0000b998 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_ILLEGAL_ISR)
|
||||
0000b9a3 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_NMI_ISR)
|
||||
0000b9ae 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER10_ISR)
|
||||
0000b9b9 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER11_ISR)
|
||||
0000b9c4 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER12_ISR)
|
||||
0000b9cf 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER1_ISR)
|
||||
0000b9da 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER2_ISR)
|
||||
0000b9e5 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER3_ISR)
|
||||
0000b9f0 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER4_ISR)
|
||||
0000b9fb 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER5_ISR)
|
||||
0000ba06 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER6_ISR)
|
||||
0000ba11 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER7_ISR)
|
||||
0000ba1c 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER8_ISR)
|
||||
0000ba27 0000000b DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_USER9_ISR)
|
||||
0000ba32 0000000b log_to_mem.obj (.text:_ump_log_rs)
|
||||
0000ba3d 0000000b rts2800_fpu32.lib : u_div.obj (.text)
|
||||
0000ba48 0000000a DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_INT_NOTUSED_ISR)
|
||||
0000ba52 0000000a DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_PIE_RESERVED)
|
||||
0000ba5c 0000000a DSP2833x_SWPrioritizedDefaultIsr.obj (.text:_rsvd_ISR)
|
||||
0000ba66 00000009 DSP2833x_PieCtrl.obj (.text:_EnableInterrupts)
|
||||
0000ba6f 00000009 DSP2833x_SysCtrl.obj (.text:_InitSysCtrl)
|
||||
0000ba78 00000009 rts2800_fpu32.lib : _lock.obj (.text)
|
||||
0000ba81 00000008 DSP2833x_SysCtrl.obj (.text:_DisableDog)
|
||||
0000ba89 00000007 rts2800_fpu32.lib : memset.obj (.text)
|
||||
0000ba90 00000005 spise2p.obj (.text:_SPISE2P_DRV_csclr)
|
||||
0000ba95 00000005 spise2p.obj (.text:_SPISE2P_DRV_csset)
|
||||
0000ba9a 00000005 cntrl_adr.obj (.text:_set_cntrl_addr)
|
||||
0000ba9f 00000004 DSP2833x_usDelay.obj (.text)
|
||||
0000baa3 00000003 shared_ump.obj (.text:_write_word)
|
||||
0000baa6 00000001 bios.obj (.text:_tflash)
|
||||
|
||||
ramfuncs 0 0000c000 00000000 UNINITIALIZED
|
||||
|
||||
.econst 0 0000c28c 00000125
|
||||
0000c28c 00000100 DSP2833x_SWPrioritizedPieVect.obj (.econst:_PieVectTableInit)
|
||||
0000c38c 00000009 message.obj (.econst:_$P$T0$1)
|
||||
0000c395 00000001 --HOLE-- [fill = 0]
|
||||
0000c396 00000006 shared_ump.obj (.econst:_$P$T0$1)
|
||||
0000c39c 00000006 message.obj (.econst:_$P$T1$2)
|
||||
0000c3a2 00000006 shared_ump.obj (.econst:_$P$T1$2)
|
||||
0000c3a8 00000006 shared_ump.obj (.econst:_$P$T2$3)
|
||||
0000c3ae 00000003 cntrl_adr.obj (.econst)
|
||||
.econst 0 0000c274 0000012b
|
||||
0000c274 00000100 DSP2833x_SWPrioritizedPieVect.obj (.econst:_PieVectTableInit)
|
||||
0000c374 0000000c shared_ump.obj (.econst:_firmware_identity_words)
|
||||
0000c380 00000009 message.obj (.econst:_$P$T0$1)
|
||||
0000c389 00000001 --HOLE-- [fill = 0]
|
||||
0000c38a 00000006 shared_ump.obj (.econst:_$P$T0$1)
|
||||
0000c390 00000006 message.obj (.econst:_$P$T1$2)
|
||||
0000c396 00000006 shared_ump.obj (.econst:_$P$T2$3)
|
||||
0000c39c 00000003 cntrl_adr.obj (.econst)
|
||||
|
||||
.switch 0 0000c3b2 00000048
|
||||
0000c3b2 00000028 spise2p.obj (.switch:_SPISE2P_DRV_tick)
|
||||
0000c3da 00000020 log_to_mem.obj (.switch:_ump_log_read)
|
||||
.switch 0 0000c3a0 00000048
|
||||
0000c3a0 00000028 spise2p.obj (.switch:_SPISE2P_DRV_tick)
|
||||
0000c3c8 00000020 log_to_mem.obj (.switch:_ump_log_read)
|
||||
|
||||
.stack 1 00000400 000003f0 UNINITIALIZED
|
||||
00000400 000003f0 --HOLE--
|
||||
|
||||
.ebss 1 0000d000 00000fdf UNINITIALIZED
|
||||
0000d000 00000704 RS485.obj (.ebss)
|
||||
0000d704 00000038 measure.obj (.ebss:_sens_count)
|
||||
.ebss 1 0000d000 0000105e UNINITIALIZED
|
||||
0000d000 0000070a RS485.obj (.ebss)
|
||||
0000d70a 00000020 measure.obj (.ebss:_din_count)
|
||||
0000d72a 00000012 measure.obj (.ebss:_powK)
|
||||
0000d73c 00000004 ADC.obj (.ebss:_adc_table_lem)
|
||||
0000d740 000001b0 measure.obj (.ebss:_adc_filter)
|
||||
0000d8f0 00000010 measure.obj (.ebss:_Maska)
|
||||
@@ -201,45 +382,44 @@ ramfuncs 0 0000c000 00000000 UNINITIALIZED
|
||||
0000dac0 00000100 crc16.obj (.ebss:_crc_16_tab)
|
||||
0000dbc0 00000081 message.obj (.ebss:_modbus)
|
||||
0000dc41 00000001 bios.obj (.ebss)
|
||||
0000dc42 00000038 measure.obj (.ebss)
|
||||
0000dc42 00000038 measure.obj (.ebss:_sens_count)
|
||||
0000dc7a 00000006 DSP2833x_SysCtrl.obj (.ebss)
|
||||
0000dc80 00000081 message.obj (.ebss:_param)
|
||||
0000dd01 00000001 rts2800_fpu32.lib : errno.obj (.ebss)
|
||||
0000dd02 00000028 log_to_mem.obj (.ebss)
|
||||
0000dd2a 00000012 measure.obj (.ebss:_powK)
|
||||
0000dd3c 00000004 cntrl_adr.obj (.ebss)
|
||||
0000dd01 00000001 main.obj (.ebss)
|
||||
0000dd02 00000038 measure.obj (.ebss)
|
||||
0000dd3a 00000006 measure.obj (.ebss:_err_count)
|
||||
0000dd40 0000007c ecan.obj (.ebss:_ump_can_reply)
|
||||
0000ddbc 00000004 rts2800_fpu32.lib : _lock.obj (.ebss)
|
||||
0000ddc0 00000048 measure.obj (.ebss:_zer_filter)
|
||||
0000de08 00000020 measure.obj (.ebss:_din_count)
|
||||
0000de28 00000018 DSP2833x_CpuTimers.obj (.ebss)
|
||||
0000de40 00000046 RS485.obj (.ebss:_RS_Len)
|
||||
0000de86 0000001c ADC.obj (.ebss:_ADC_table)
|
||||
0000dea2 0000001c ADC.obj (.ebss:_prev_ok)
|
||||
0000debe 00000002 main.obj (.ebss:_cancell$2)
|
||||
0000dec0 00000040 message.obj (.ebss:_def_cal)
|
||||
0000df00 0000001c spise2p.obj (.ebss)
|
||||
0000df1c 00000018 measure.obj (.ebss:_sens_pair)
|
||||
0000df34 0000000c ADC.obj (.ebss)
|
||||
0000df40 00000018 measure.obj (.ebss:_sens_type)
|
||||
0000df58 00000018 ecan.obj (.ebss)
|
||||
0000df70 00000010 peripher.obj (.ebss)
|
||||
0000df80 0000000e DAC.obj (.ebss)
|
||||
0000df8e 0000000c measure.obj (.ebss:_lev_quadr)
|
||||
0000df9a 0000000a pulto.obj (.ebss)
|
||||
0000dfa4 00000008 measure.obj (.ebss:_ext_diag)
|
||||
0000dfac 00000008 measure.obj (.ebss:_ext_temp)
|
||||
0000dfb4 00000008 measure.obj (.ebss:_zer_count)
|
||||
0000dfbc 00000004 rts2800_fpu32.lib : exit.obj (.ebss)
|
||||
0000dfc0 00000006 measure.obj (.ebss:_err_count)
|
||||
0000dfc6 00000006 measure.obj (.ebss:_lev_count)
|
||||
0000dfcc 00000005 kanal.obj (.ebss:_readr)
|
||||
0000dfd1 00000003 log_to_mem.obj (.ebss:_ump_can_data)
|
||||
0000dfd4 00000003 main.obj (.ebss)
|
||||
0000dfd7 00000002 main.obj (.ebss:_cancount$1)
|
||||
0000dfd9 00000002 ADC.obj (.ebss:_cwnt_ok$4)
|
||||
0000dfdb 00000002 measure.obj (.ebss:_low_count)
|
||||
0000dfdd 00000002 log_to_mem.obj (.ebss:_ump_pm67_voltage)
|
||||
0000ddbc 00000004 cntrl_adr.obj (.ebss)
|
||||
0000ddc0 0000007c message.obj (.ebss:_words$3)
|
||||
0000de3c 00000004 rts2800_fpu32.lib : _lock.obj (.ebss)
|
||||
0000de40 00000048 measure.obj (.ebss:_zer_filter)
|
||||
0000de88 00000020 log_to_mem.obj (.ebss)
|
||||
0000dea8 00000018 DAC.obj (.ebss)
|
||||
0000dec0 00000046 RS485.obj (.ebss:_RS_Len)
|
||||
0000df06 0000001c ADC.obj (.ebss:_ADC_table)
|
||||
0000df22 0000001c ADC.obj (.ebss:_prev_ok)
|
||||
0000df3e 00000002 main.obj (.ebss:_cancell$2)
|
||||
0000df40 00000040 message.obj (.ebss:_def_cal)
|
||||
0000df80 0000001c spise2p.obj (.ebss)
|
||||
0000df9c 00000018 DSP2833x_CpuTimers.obj (.ebss)
|
||||
0000dfb4 0000000c ADC.obj (.ebss)
|
||||
0000dfc0 00000018 measure.obj (.ebss:_sens_pair)
|
||||
0000dfd8 00000018 measure.obj (.ebss:_sens_type)
|
||||
0000dff0 00000010 peripher.obj (.ebss)
|
||||
0000e000 00000018 ecan.obj (.ebss)
|
||||
0000e018 0000000c measure.obj (.ebss:_lev_quadr)
|
||||
0000e024 0000000a pulto.obj (.ebss)
|
||||
0000e02e 00000008 measure.obj (.ebss:_ext_diag)
|
||||
0000e036 00000008 measure.obj (.ebss:_ext_temp)
|
||||
0000e03e 00000002 main.obj (.ebss:_cancount$1)
|
||||
0000e040 00000008 measure.obj (.ebss:_zer_count)
|
||||
0000e048 00000006 measure.obj (.ebss:_lev_count)
|
||||
0000e04e 00000005 kanal.obj (.ebss:_readr)
|
||||
0000e053 00000001 rts2800_fpu32.lib : errno.obj (.ebss)
|
||||
0000e054 00000004 : exit.obj (.ebss)
|
||||
0000e058 00000002 ADC.obj (.ebss:_cwnt_ok$4)
|
||||
0000e05a 00000002 measure.obj (.ebss:_low_count)
|
||||
0000e05c 00000002 log_to_mem.obj (.ebss:_ump_pm67_voltage)
|
||||
|
||||
.logg 1 00200000 0000fa00 UNINITIALIZED
|
||||
00200000 0000fa00 log_to_mem.obj (.logg)
|
||||
@@ -458,16 +638,16 @@ MODULE SUMMARY
|
||||
------ ---- ---------------- ------------------
|
||||
K:\git_project\Balsam_167_periph\Debug\Source\External\v120\DSP2833x_common\source\
|
||||
DSP2833x_SWPrioritizedDefaultIsr.obj 1809 0 0
|
||||
DSP2833x_SysCtrl.obj 349 0 6
|
||||
DSP2833x_SWPrioritizedPieVect.obj 14 256 0
|
||||
DSP2833x_Xintf.obj 268 0 0
|
||||
DSP2833x_CpuTimers.obj 94 0 24
|
||||
DSP2833x_SysCtrl.obj 302 0 6
|
||||
DSP2833x_SWPrioritizedPieVect.obj 13 256 0
|
||||
DSP2833x_CpuTimers.obj 92 0 24
|
||||
DSP2833x_Xintf.obj 89 0 0
|
||||
DSP2833x_PieCtrl.obj 40 0 0
|
||||
DSP2833x_Adc.obj 25 0 0
|
||||
DSP2833x_ADC_cal.obj 7 0 0
|
||||
DSP2833x_usDelay.obj 4 0 0
|
||||
+--+--------------------------------------+-------+------------------+--------------------+
|
||||
Total: 2610 256 30
|
||||
Total: 2381 256 30
|
||||
|
||||
K:\git_project\Balsam_167_periph\Debug\Source\External\v120\DSP2833x_headers\source\
|
||||
DSP2833x_GlobalVariableDefs.obj 0 0 2679
|
||||
@@ -475,26 +655,26 @@ MODULE SUMMARY
|
||||
Total: 0 0 2679
|
||||
|
||||
K:\git_project\Balsam_167_periph\Debug\Source\Internal\
|
||||
log_to_mem.obj 895 52 64045
|
||||
measure.obj 2731 87 1212
|
||||
RS485.obj 1233 8 1866
|
||||
message.obj 805 82 322
|
||||
peripher.obj 963 32 16
|
||||
ADC.obj 905 13 74
|
||||
ecan.obj 622 28 148
|
||||
shared_ump.obj 777 18 0
|
||||
spise2p.obj 660 71 28
|
||||
bios.obj 703 4 1
|
||||
crc16.obj 117 259 256
|
||||
main.obj 589 8 7
|
||||
DAC.obj 394 16 14
|
||||
kanal.obj 364 27 21
|
||||
pulto.obj 366 17 10
|
||||
tools.obj 79 0 0
|
||||
filter_bat2.obj 55 0 0
|
||||
log_to_mem.obj 718 52 64034
|
||||
measure.obj 2458 87 1212
|
||||
RS485.obj 1615 8 1872
|
||||
message.obj 875 82 446
|
||||
peripher.obj 972 32 16
|
||||
ADC.obj 874 13 74
|
||||
DAC.obj 843 0 24
|
||||
ecan.obj 643 28 148
|
||||
bios.obj 766 4 1
|
||||
spise2p.obj 578 71 28
|
||||
crc16.obj 101 259 256
|
||||
shared_ump.obj 540 24 0
|
||||
main.obj 460 0 5
|
||||
pulto.obj 352 17 10
|
||||
kanal.obj 321 27 21
|
||||
tools.obj 78 0 0
|
||||
filter_bat2.obj 46 0 0
|
||||
cntrl_adr.obj 5 11 4
|
||||
+--+--------------------------------------+-------+------------------+--------------------+
|
||||
Total: 12263 733 68024
|
||||
Total: 12245 715 68151
|
||||
|
||||
K:/git_project/Balsam_167_periph/Libraries/rts2800_fpu32.lib
|
||||
fs_div.obj 136 0 0
|
||||
@@ -503,15 +683,18 @@ MODULE SUMMARY
|
||||
exit.obj 25 10 4
|
||||
sqrt.obj 32 0 0
|
||||
args_main.obj 27 0 0
|
||||
prolog.obj 25 0 0
|
||||
_lock.obj 9 10 4
|
||||
epilog.obj 12 0 0
|
||||
u_div.obj 11 0 0
|
||||
memset.obj 7 0 0
|
||||
errno.obj 0 4 1
|
||||
+--+--------------------------------------+-------+------------------+--------------------+
|
||||
Total: 352 24 9
|
||||
Total: 396 24 9
|
||||
|
||||
Stack: 0 0 1008
|
||||
+--+--------------------------------------+-------+------------------+--------------------+
|
||||
Grand Total: 15225 1013 71750
|
||||
Grand Total: 15022 995 71877
|
||||
|
||||
|
||||
GLOBAL DATA SYMBOLS: SORTED BY DATA PAGE
|
||||
@@ -606,17 +789,18 @@ address data page name
|
||||
|
||||
00007900 1e4 (00007900) _I2caRegs
|
||||
|
||||
0000c28c 30a (0000c280) _PieVectTableInit
|
||||
0000c274 309 (0000c240) _PieVectTableInit
|
||||
|
||||
0000c3ae 30e (0000c380) _ADDR_ANSWER
|
||||
0000c3af 30e (0000c380) _ADDR_TERMINAL
|
||||
0000c3b0 30e (0000c380) _CNTRL_ADDR_UNIVERSAL
|
||||
0000c39c 30e (0000c380) _ADDR_ANSWER
|
||||
0000c39d 30e (0000c380) _ADDR_TERMINAL
|
||||
0000c39e 30e (0000c380) _CNTRL_ADDR_UNIVERSAL
|
||||
|
||||
0000d040 341 (0000d040) _rs_a
|
||||
|
||||
0000d3c0 34f (0000d3c0) _rs_b
|
||||
|
||||
0000d704 35c (0000d700) _sens_count
|
||||
0000d70a 35c (0000d700) _din_count
|
||||
0000d72a 35c (0000d700) _powK
|
||||
0000d73c 35c (0000d700) _adc_table_lem
|
||||
|
||||
0000d740 35d (0000d740) _adc_filter
|
||||
@@ -632,121 +816,116 @@ address data page name
|
||||
0000dbc0 36f (0000dbc0) _modbus
|
||||
|
||||
0000dc41 371 (0000dc40) _flag_DEBUG
|
||||
0000dc42 371 (0000dc40) _CanPowse
|
||||
0000dc43 371 (0000dc40) _CanGO
|
||||
0000dc44 371 (0000dc40) _READY
|
||||
0000dc45 371 (0000dc40) _TPL_CANS
|
||||
0000dc46 371 (0000dc40) _tpl_cans
|
||||
0000dc47 371 (0000dc40) _cal_addr
|
||||
0000dc48 371 (0000dc40) _pow_addr
|
||||
0000dc49 371 (0000dc40) _period_ready
|
||||
0000dc4a 371 (0000dc40) _period_blink
|
||||
0000dc4b 371 (0000dc40) _chk
|
||||
0000dc4c 371 (0000dc40) _sig
|
||||
0000dc4d 371 (0000dc40) _time_1_5sec
|
||||
0000dc4e 371 (0000dc40) _time_5msec
|
||||
0000dc4f 371 (0000dc40) _time_3sec
|
||||
0000dc50 371 (0000dc40) _time_5sec
|
||||
0000dc51 371 (0000dc40) _Caliber_time
|
||||
0000dc52 371 (0000dc40) _Curr_Edge
|
||||
0000dc53 371 (0000dc40) _okay
|
||||
0000dc5e 371 (0000dc40) _K100
|
||||
0000dc60 371 (0000dc40) _K_50
|
||||
0000dc62 371 (0000dc40) _K_T1
|
||||
0000dc64 371 (0000dc40) _K_T2
|
||||
0000dc68 371 (0000dc40) _def_FILTERBAT
|
||||
0000dc42 371 (0000dc40) _sens_count
|
||||
0000dc7a 371 (0000dc40) _SYSCLKOUT
|
||||
0000dc7c 371 (0000dc40) _LSPCLK
|
||||
0000dc7e 371 (0000dc40) _HSPCLK
|
||||
|
||||
0000dc80 372 (0000dc80) _param
|
||||
|
||||
0000dd01 374 (0000dd00) _errno
|
||||
0000dd02 374 (0000dd00) _no_write
|
||||
0000dd03 374 (0000dd00) _never_write
|
||||
0000dd04 374 (0000dd00) _flog
|
||||
0000dd18 374 (0000dd00) _ump_dac_ramp
|
||||
0000dd19 374 (0000dd00) _ump_dac_duration
|
||||
0000dd1a 374 (0000dd00) _ump_dac_go10
|
||||
0000dd1b 374 (0000dd00) _ump_dac_stop10
|
||||
0000dd1c 374 (0000dd00) _ump_dac_position
|
||||
0000dd22 374 (0000dd00) _Log
|
||||
0000dd2a 374 (0000dd00) _powK
|
||||
0000dd3c 374 (0000dd00) _ADDR_FOR_ALL
|
||||
0000dd3d 374 (0000dd00) _CNTRL_ADDR
|
||||
0000dd3e 374 (0000dd00) _cntr_addr_c
|
||||
0000dd3f 374 (0000dd00) _cntr_addr_c_all
|
||||
0000dd02 374 (0000dd00) _CanPowse
|
||||
0000dd03 374 (0000dd00) _CanGO
|
||||
0000dd04 374 (0000dd00) _READY
|
||||
0000dd05 374 (0000dd00) _TPL_CANS
|
||||
0000dd06 374 (0000dd00) _tpl_cans
|
||||
0000dd07 374 (0000dd00) _cal_addr
|
||||
0000dd08 374 (0000dd00) _pow_addr
|
||||
0000dd09 374 (0000dd00) _period_ready
|
||||
0000dd0a 374 (0000dd00) _period_blink
|
||||
0000dd0b 374 (0000dd00) _chk
|
||||
0000dd0c 374 (0000dd00) _sig
|
||||
0000dd0d 374 (0000dd00) _time_1_5sec
|
||||
0000dd0e 374 (0000dd00) _time_5msec
|
||||
0000dd0f 374 (0000dd00) _time_3sec
|
||||
0000dd10 374 (0000dd00) _time_5sec
|
||||
0000dd11 374 (0000dd00) _Caliber_time
|
||||
0000dd12 374 (0000dd00) _Curr_Edge
|
||||
0000dd13 374 (0000dd00) _okay
|
||||
0000dd1e 374 (0000dd00) _K100
|
||||
0000dd20 374 (0000dd00) _K_50
|
||||
0000dd22 374 (0000dd00) _K_T1
|
||||
0000dd24 374 (0000dd00) _K_T2
|
||||
0000dd28 374 (0000dd00) _def_FILTERBAT
|
||||
0000dd3a 374 (0000dd00) _err_count
|
||||
|
||||
0000ddbc 376 (0000dd80) __unlock
|
||||
0000ddbe 376 (0000dd80) __lock
|
||||
0000ddbc 376 (0000dd80) _ADDR_FOR_ALL
|
||||
0000ddbd 376 (0000dd80) _CNTRL_ADDR
|
||||
0000ddbe 376 (0000dd80) _cntr_addr_c
|
||||
0000ddbf 376 (0000dd80) _cntr_addr_c_all
|
||||
|
||||
0000ddc0 377 (0000ddc0) _zer_filter
|
||||
0000de3c 378 (0000de00) __unlock
|
||||
0000de3e 378 (0000de00) __lock
|
||||
|
||||
0000de08 378 (0000de00) _din_count
|
||||
0000de28 378 (0000de00) _CpuTimer0
|
||||
0000de30 378 (0000de00) _CpuTimer1
|
||||
0000de38 378 (0000de00) _CpuTimer2
|
||||
0000de40 379 (0000de40) _zer_filter
|
||||
|
||||
0000de40 379 (0000de40) _RS_Len
|
||||
0000de88 37a (0000de80) _no_write
|
||||
0000de89 37a (0000de80) _never_write
|
||||
0000de8a 37a (0000de80) _flog
|
||||
0000dea0 37a (0000de80) _Log
|
||||
0000dea8 37a (0000de80) _period_dac
|
||||
0000dea9 37a (0000de80) _time_dac
|
||||
0000deb8 37a (0000de80) _WAKEpowse
|
||||
0000deba 37a (0000de80) _IMPowse
|
||||
|
||||
0000de86 37a (0000de80) _ADC_table
|
||||
0000dea2 37a (0000de80) _prev_ok
|
||||
0000dec0 37b (0000dec0) _RS_Len
|
||||
|
||||
0000dec0 37b (0000dec0) _def_cal
|
||||
0000df06 37c (0000df00) _ADC_table
|
||||
0000df22 37c (0000df00) _prev_ok
|
||||
|
||||
0000df00 37c (0000df00) _ccc
|
||||
0000df1c 37c (0000df00) _sens_pair
|
||||
0000df34 37c (0000df00) _COUNT_ONE_CANAL
|
||||
0000df35 37c (0000df00) _COUNT_DISCHARGE
|
||||
0000df36 37c (0000df00) _COUNT_TRANSICIA
|
||||
0000df37 37c (0000df00) _FILTER_CLIP
|
||||
0000df3c 37c (0000df00) _WAKE
|
||||
0000df3e 37c (0000df00) _WAKE_TIME
|
||||
0000df40 37d (0000df40) _def_cal
|
||||
|
||||
0000df40 37d (0000df40) _sens_type
|
||||
0000df58 37d (0000df40) _CanTimeOutErrorTR
|
||||
0000df59 37d (0000df40) _wait
|
||||
0000df62 37d (0000df40) _ErrorCount
|
||||
0000df64 37d (0000df40) _MessageReceivedCount
|
||||
0000df66 37d (0000df40) _MessageTransivedCount
|
||||
0000df68 37d (0000df40) _TestMbox1
|
||||
0000df6a 37d (0000df40) _TestMbox2
|
||||
0000df6c 37d (0000df40) _TestMbox3
|
||||
0000df70 37d (0000df40) _Mode
|
||||
0000df71 37d (0000df40) _Desk
|
||||
0000df72 37d (0000df40) _TermoAD
|
||||
0000df73 37d (0000df40) _TermoRS
|
||||
0000df74 37d (0000df40) _TermoSW
|
||||
0000df75 37d (0000df40) _Kurrent
|
||||
0000df76 37d (0000df40) _Kalibro
|
||||
0000df77 37d (0000df40) _Owen
|
||||
0000df78 37d (0000df40) _INcount0
|
||||
0000df79 37d (0000df40) _INcount1
|
||||
0000df7a 37d (0000df40) _MUX_GPIO32
|
||||
0000df7b 37d (0000df40) _MUX_GPIO48
|
||||
0000df7c 37d (0000df40) _DIR_GPIO32
|
||||
0000df7d 37d (0000df40) _DIR_GPIO48
|
||||
0000df7e 37d (0000df40) _DigErr
|
||||
0000df80 37e (0000df80) _ccc
|
||||
0000df9c 37e (0000df80) _CpuTimer0
|
||||
0000dfa4 37e (0000df80) _CpuTimer1
|
||||
0000dfac 37e (0000df80) _CpuTimer2
|
||||
0000dfb4 37e (0000df80) _COUNT_ONE_CANAL
|
||||
0000dfb5 37e (0000df80) _COUNT_DISCHARGE
|
||||
0000dfb6 37e (0000df80) _COUNT_TRANSICIA
|
||||
0000dfb7 37e (0000df80) _FILTER_CLIP
|
||||
0000dfbc 37e (0000df80) _WAKE
|
||||
0000dfbe 37e (0000df80) _WAKE_TIME
|
||||
|
||||
0000df80 37e (0000df80) _period_dac
|
||||
0000df81 37e (0000df80) _time_dac
|
||||
0000df86 37e (0000df80) _WAKEpowse
|
||||
0000df88 37e (0000df80) _IMPowse
|
||||
0000df8e 37e (0000df80) _lev_quadr
|
||||
0000df9a 37e (0000df80) _isNumb
|
||||
0000df9b 37e (0000df80) _quaLamp
|
||||
0000dfa0 37e (0000df80) _isMask
|
||||
0000dfa2 37e (0000df80) _Lonely
|
||||
0000dfa4 37e (0000df80) _ext_diag
|
||||
0000dfac 37e (0000df80) _ext_temp
|
||||
0000dfb4 37e (0000df80) _zer_count
|
||||
0000dfbc 37e (0000df80) __cleanup_ptr
|
||||
0000dfbe 37e (0000df80) __dtors_ptr
|
||||
0000dfc0 37f (0000dfc0) _sens_pair
|
||||
0000dfd8 37f (0000dfc0) _sens_type
|
||||
0000dff0 37f (0000dfc0) _Mode
|
||||
0000dff1 37f (0000dfc0) _Desk
|
||||
0000dff2 37f (0000dfc0) _TermoAD
|
||||
0000dff3 37f (0000dfc0) _TermoRS
|
||||
0000dff4 37f (0000dfc0) _TermoSW
|
||||
0000dff5 37f (0000dfc0) _Kurrent
|
||||
0000dff6 37f (0000dfc0) _Kalibro
|
||||
0000dff7 37f (0000dfc0) _Owen
|
||||
0000dff8 37f (0000dfc0) _INcount0
|
||||
0000dff9 37f (0000dfc0) _INcount1
|
||||
0000dffa 37f (0000dfc0) _MUX_GPIO32
|
||||
0000dffb 37f (0000dfc0) _MUX_GPIO48
|
||||
0000dffc 37f (0000dfc0) _DIR_GPIO32
|
||||
0000dffd 37f (0000dfc0) _DIR_GPIO48
|
||||
0000dffe 37f (0000dfc0) _DigErr
|
||||
|
||||
0000dfc0 37f (0000dfc0) _err_count
|
||||
0000dfc6 37f (0000dfc0) _lev_count
|
||||
0000dfcc 37f (0000dfc0) _readr
|
||||
0000dfdb 37f (0000dfc0) _low_count
|
||||
0000e000 380 (0000e000) _CanTimeOutErrorTR
|
||||
0000e001 380 (0000e000) _wait
|
||||
0000e00a 380 (0000e000) _ErrorCount
|
||||
0000e00c 380 (0000e000) _MessageReceivedCount
|
||||
0000e00e 380 (0000e000) _MessageTransivedCount
|
||||
0000e010 380 (0000e000) _TestMbox1
|
||||
0000e012 380 (0000e000) _TestMbox2
|
||||
0000e014 380 (0000e000) _TestMbox3
|
||||
0000e018 380 (0000e000) _lev_quadr
|
||||
0000e024 380 (0000e000) _isNumb
|
||||
0000e025 380 (0000e000) _quaLamp
|
||||
0000e02a 380 (0000e000) _isMask
|
||||
0000e02c 380 (0000e000) _Lonely
|
||||
0000e02e 380 (0000e000) _ext_diag
|
||||
0000e036 380 (0000e000) _ext_temp
|
||||
|
||||
0000e040 381 (0000e040) _zer_count
|
||||
0000e048 381 (0000e040) _lev_count
|
||||
0000e04e 381 (0000e040) _readr
|
||||
0000e053 381 (0000e040) _errno
|
||||
0000e054 381 (0000e040) __cleanup_ptr
|
||||
0000e056 381 (0000e040) __dtors_ptr
|
||||
0000e05a 381 (0000e040) _low_count
|
||||
|
||||
00200000 8000 (00200000) _logs_block
|
||||
|
||||
@@ -757,851 +936,831 @@ address data page name
|
||||
|
||||
GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name
|
||||
|
||||
page address name
|
||||
---- ------- ----
|
||||
0 00008000 .text
|
||||
0 0000bb2f C$$EXIT
|
||||
0 0000b796 FS$$DIV
|
||||
0 0000ba6b L$$DIV
|
||||
0 0000ba7a L$$MOD
|
||||
0 0000bb56 U$$DIV
|
||||
0 0000bb5b U$$MOD
|
||||
0 0000ba88 UL$$DIV
|
||||
0 0000ba8f UL$$MOD
|
||||
0 00008fdc _ADCINT_ISR
|
||||
0 00380080 _ADC_cal
|
||||
1 0000de86 _ADC_table
|
||||
0 0000c3ae _ADDR_ANSWER
|
||||
1 0000dd3c _ADDR_FOR_ALL
|
||||
0 0000c3af _ADDR_TERMINAL
|
||||
1 00000b00 _AdcMirror
|
||||
1 00007100 _AdcRegs
|
||||
0 0000b01b _Anal_output
|
||||
0 0000a1b2 _Answer
|
||||
0 0000aa38 _CAN_send
|
||||
0 0000b8be _CANa_handler
|
||||
0 0000b893 _CANa_reset_err
|
||||
1 0000dd3d _CNTRL_ADDR
|
||||
0 0000c3b0 _CNTRL_ADDR_UNIVERSAL
|
||||
1 0000df35 _COUNT_DISCHARGE
|
||||
1 0000df34 _COUNT_ONE_CANAL
|
||||
1 0000df36 _COUNT_TRANSICIA
|
||||
1 0000dc51 _Caliber_time
|
||||
1 0000dc43 _CanGO
|
||||
1 0000dc42 _CanPowse
|
||||
1 0000df58 _CanTimeOutErrorTR
|
||||
0 0000b947 _ConfigCpuTimer
|
||||
1 0000de28 _CpuTimer0
|
||||
1 00000c00 _CpuTimer0Regs
|
||||
1 0000de30 _CpuTimer1
|
||||
1 00000c08 _CpuTimer1Regs
|
||||
1 0000de38 _CpuTimer2
|
||||
1 00000c10 _CpuTimer2Regs
|
||||
1 0033fff8 _CsmPwl
|
||||
1 00000ae0 _CsmRegs
|
||||
0 0000b3f6 _CsmUnlock
|
||||
1 0000dc52 _Curr_Edge
|
||||
0 00008656 _Current_count
|
||||
0 00008fcf _DATALOG_ISR
|
||||
0 0000b168 _DCLK
|
||||
0 00008fb4 _DINTCH1_ISR
|
||||
0 00008f99 _DINTCH2_ISR
|
||||
0 00008f7e _DINTCH3_ISR
|
||||
0 00008f63 _DINTCH4_ISR
|
||||
0 00008f48 _DINTCH5_ISR
|
||||
0 00008f2d _DINTCH6_ISR
|
||||
1 0000df7c _DIR_GPIO32
|
||||
1 0000df7d _DIR_GPIO48
|
||||
0 0000b15c _DOUT
|
||||
0 0000bb6f _DSP28x_usDelay
|
||||
0 00009cba _Default_params
|
||||
1 0000df71 _Desk
|
||||
1 00000880 _DevEmuRegs
|
||||
1 0000df7e _DigErr
|
||||
0 0000b2de _DisableDog
|
||||
1 00001000 _DmaRegs
|
||||
0 00008f12 _ECAN0INTA_ISR
|
||||
0 00008ef7 _ECAN0INTB_ISR
|
||||
0 00008edc _ECAN1INTA_ISR
|
||||
0 00008ec1 _ECAN1INTB_ISR
|
||||
0 00008ea6 _ECAP1_INT_ISR
|
||||
0 00008e8b _ECAP2_INT_ISR
|
||||
0 00008e70 _ECAP3_INT_ISR
|
||||
0 00008e55 _ECAP4_INT_ISR
|
||||
0 00008e3a _ECAP5_INT_ISR
|
||||
0 00008e1f _ECAP6_INT_ISR
|
||||
1 00006040 _ECanaLAMRegs
|
||||
1 000060c0 _ECanaMOTORegs
|
||||
1 00006080 _ECanaMOTSRegs
|
||||
1 00006100 _ECanaMboxes
|
||||
1 00006000 _ECanaRegs
|
||||
1 00006240 _ECanbLAMRegs
|
||||
1 000062c0 _ECanbMOTORegs
|
||||
1 00006280 _ECanbMOTSRegs
|
||||
1 00006300 _ECanbMboxes
|
||||
1 00006200 _ECanbRegs
|
||||
1 00006a00 _ECap1Regs
|
||||
1 00006a20 _ECap2Regs
|
||||
1 00006a40 _ECap3Regs
|
||||
1 00006a60 _ECap4Regs
|
||||
1 00006a80 _ECap5Regs
|
||||
1 00006aa0 _ECap6Regs
|
||||
0 00008e14 _EMUINT_ISR
|
||||
0 00008df9 _EPWM1_INT_ISR
|
||||
0 00008dde _EPWM1_TZINT_ISR
|
||||
0 00008dc3 _EPWM2_INT_ISR
|
||||
0 00008da8 _EPWM2_TZINT_ISR
|
||||
0 00008d8d _EPWM3_INT_ISR
|
||||
0 00008d72 _EPWM3_TZINT_ISR
|
||||
0 00008d57 _EPWM4_INT_ISR
|
||||
0 00008d3c _EPWM4_TZINT_ISR
|
||||
0 00008d21 _EPWM5_INT_ISR
|
||||
0 00008d06 _EPWM5_TZINT_ISR
|
||||
0 00008ceb _EPWM6_INT_ISR
|
||||
0 00008cd0 _EPWM6_TZINT_ISR
|
||||
1 00006800 _EPwm1Regs
|
||||
1 00006840 _EPwm2Regs
|
||||
1 00006880 _EPwm3Regs
|
||||
1 000068c0 _EPwm4Regs
|
||||
1 00006900 _EPwm5Regs
|
||||
1 00006940 _EPwm6Regs
|
||||
0 00008cb5 _EQEP1_INT_ISR
|
||||
0 00008c9a _EQEP2_INT_ISR
|
||||
1 00006b00 _EQep1Regs
|
||||
1 00006b40 _EQep2Regs
|
||||
0 0000bab4 _EnableInterrupts
|
||||
1 0000df62 _ErrorCount
|
||||
1 0000df37 _FILTER_CLIP
|
||||
1 00000a80 _FlashRegs
|
||||
1 00006f80 _GpioCtrlRegs
|
||||
1 00006fc0 _GpioDataRegs
|
||||
1 00006fe0 _GpioIntRegs
|
||||
1 0000dc7e _HSPCLK
|
||||
0 0000a9d9 _Handlai
|
||||
0 00008c7f _I2CINT1A_ISR
|
||||
0 00008c64 _I2CINT2A_ISR
|
||||
1 00007900 _I2caRegs
|
||||
0 00008c59 _ILLEGAL_ISR
|
||||
1 0000df88 _IMPowse
|
||||
0 00008c4c _INT13_ISR
|
||||
0 00008c3f _INT14_ISR
|
||||
0 00008c35 _INT_NOTUSED_ISR
|
||||
1 0000df78 _INcount0
|
||||
1 0000df79 _INcount1
|
||||
0 0000bb16 _InitAdc
|
||||
0 0000a920 _InitCan
|
||||
0 0000b908 _InitCpuTimers
|
||||
0 0000b368 _InitPeripheralClocks
|
||||
0 0000ba95 _InitPieCtrl
|
||||
0 0000bb48 _InitPieVectTable
|
||||
0 0000b2e6 _InitPll
|
||||
0 0000a615 _InitSeeprom
|
||||
0 0000b3ed _InitSysCtrl
|
||||
0 0000b733 _InitXintf
|
||||
0 0000b68a _InitXintf16Gpio
|
||||
0 0000b6e3 _InitXintf32Gpio
|
||||
0 0000b064 _Init_DAC
|
||||
0 000085ae _Init_packMask
|
||||
0 00008438 _Init_sensors
|
||||
0 000083d8 _Init_sensors_more
|
||||
1 0000dc5e _K100
|
||||
1 0000dc60 _K_50
|
||||
1 0000dc62 _K_T1
|
||||
1 0000dc64 _K_T2
|
||||
1 0000df76 _Kalibro
|
||||
1 0000df75 _Kurrent
|
||||
1 0000dc7c _LSPCLK
|
||||
0 00008c1a _LUF_ISR
|
||||
0 00008bff _LVF_ISR
|
||||
0 00009dd6 _Load_params
|
||||
0 0000b080 _Load_runner
|
||||
1 0000dd22 _Log
|
||||
1 0000dfa2 _Lonely
|
||||
0 00008be4 _MRINTA_ISR
|
||||
0 00008bc9 _MRINTB_ISR
|
||||
1 0000df7a _MUX_GPIO32
|
||||
1 0000df7b _MUX_GPIO48
|
||||
0 00008bae _MXINTA_ISR
|
||||
0 00008b93 _MXINTB_ISR
|
||||
1 0000d8f0 _Maska
|
||||
1 00005000 _McbspaRegs
|
||||
1 00005040 _McbspbRegs
|
||||
1 0000df64 _MessageReceivedCount
|
||||
1 0000df66 _MessageTransivedCount
|
||||
1 0000df70 _Mode
|
||||
0 00008b88 _NMI_ISR
|
||||
1 0000df77 _Owen
|
||||
0 00008b7e _PIE_RESERVED
|
||||
1 00380090 _PartIdRegs
|
||||
1 00000ce0 _PieCtrlRegs
|
||||
1 00000d00 _PieVectTable
|
||||
0 0000c28c _PieVectTableInit
|
||||
0 000082ee _Power_count
|
||||
1 0000dc44 _READY
|
||||
0 0000b186 _RESET
|
||||
0 0000b645 _RSA_RX_Handler
|
||||
0 0000b600 _RSA_TX_Handler
|
||||
0 0000b5bb _RSB_RX_Handler
|
||||
0 0000b576 _RSB_TX_Handler
|
||||
0 00009746 _RS_BSend
|
||||
1 0000de40 _RS_Len
|
||||
0 000095fc _RS_RX_Handler
|
||||
0 000095a4 _RS_Send
|
||||
0 0000944f _RS_SetBitMode
|
||||
0 000093bb _RS_SetLineMode
|
||||
0 0000942f _RS_SetLineSpeed
|
||||
0 0000952b _RS_TX_Handler
|
||||
0 00008b71 _RTOSINT_ISR
|
||||
0 0000c000 _RamfuncsLoadEnd
|
||||
0 0000c000 _RamfuncsLoadStart
|
||||
0 0000c000 _RamfuncsRunStart
|
||||
0 00009c90 _ReceiveAnswerModbus4
|
||||
0 00009c05 _ReceiveCommandModbus3
|
||||
0 00009bc7 _ReceiveCommandModbus6
|
||||
0 00008b56 _SCIRXINTA_ISR
|
||||
0 00008b3b _SCIRXINTB_ISR
|
||||
0 00008b20 _SCIRXINTC_ISR
|
||||
0 00008b05 _SCITXINTA_ISR
|
||||
0 00008aea _SCITXINTB_ISR
|
||||
0 00008acf _SCITXINTC_ISR
|
||||
0 0000b174 _SENDBIT
|
||||
0 00008ab4 _SEQ1INT_ISR
|
||||
0 00008a99 _SEQ2INT_ISR
|
||||
0 00008a7e _SPIRXINTA_ISR
|
||||
0 0000a3f2 _SPISE2P_DRV_csclr
|
||||
0 0000a3f7 _SPISE2P_DRV_csset
|
||||
0 0000a3fc _SPISE2P_DRV_init
|
||||
0 0000a42e _SPISE2P_DRV_tick
|
||||
0 00008a63 _SPITXINTA_ISR
|
||||
1 0000dc7a _SYSCLKOUT
|
||||
0 00009b1e _Save_params
|
||||
1 00007050 _SciaRegs
|
||||
1 00007750 _ScibRegs
|
||||
1 00007770 _ScicRegs
|
||||
0 0000a5d2 _Seeprom_read
|
||||
0 0000a58f _Seeprom_write
|
||||
0 00009af6 _SendCommandModbus4
|
||||
0 0000b2c8 _ServiceDog
|
||||
0 0000b011 _Setup_DAC_time
|
||||
1 00007040 _SpiaRegs
|
||||
1 00007010 _SysCtrlRegs
|
||||
0 00008a48 _TINT0_ISR
|
||||
1 0000dc45 _TPL_CANS
|
||||
0 00008111 _Temper_count
|
||||
1 0000df72 _TermoAD
|
||||
1 0000df73 _TermoRS
|
||||
1 0000df74 _TermoSW
|
||||
1 0000df68 _TestMbox1
|
||||
1 0000df6a _TestMbox2
|
||||
1 0000df6c _TestMbox3
|
||||
0 0000a88b _UMP_CAN_service
|
||||
0 00008a3d _USER10_ISR
|
||||
0 00008a32 _USER11_ISR
|
||||
0 00008a27 _USER12_ISR
|
||||
0 00008a1c _USER1_ISR
|
||||
0 00008a11 _USER2_ISR
|
||||
0 00008a06 _USER3_ISR
|
||||
0 000089fb _USER4_ISR
|
||||
0 000089f0 _USER5_ISR
|
||||
0 000089e5 _USER6_ISR
|
||||
0 000089da _USER7_ISR
|
||||
0 000089cf _USER8_ISR
|
||||
0 000089c4 _USER9_ISR
|
||||
1 0000df3c _WAKE
|
||||
0 000089a9 _WAKEINT_ISR
|
||||
1 0000df3e _WAKE_TIME
|
||||
1 0000df86 _WAKEpowse
|
||||
0 00008990 _XINT1_ISR
|
||||
0 00008977 _XINT2_ISR
|
||||
0 0000895c _XINT3_ISR
|
||||
0 00008941 _XINT4_ISR
|
||||
0 00008926 _XINT5_ISR
|
||||
0 0000890b _XINT6_ISR
|
||||
0 000088f0 _XINT7_ISR
|
||||
1 00007070 _XIntruptRegs
|
||||
1 00000b20 _XintfRegs
|
||||
1 000007f0 __STACK_END
|
||||
abs 000003f0 __STACK_SIZE
|
||||
abs ffffffff ___TI_pprof_out_hndl
|
||||
abs ffffffff ___TI_prof_data_size
|
||||
abs ffffffff ___TI_prof_data_start
|
||||
abs ffffffff ___binit__
|
||||
abs ffffffff ___c_args__
|
||||
0 0000c000 ___cinit__
|
||||
0 0000bb73 ___etext__
|
||||
abs ffffffff ___pinit__
|
||||
0 00008000 ___text__
|
||||
0 0000bafb __args_main
|
||||
1 0000dfbc __cleanup_ptr
|
||||
1 0000dfbe __dtors_ptr
|
||||
1 0000ddbe __lock
|
||||
0 0000bb69 __nop
|
||||
0 0000bb65 __register_lock
|
||||
0 0000bb61 __register_unlock
|
||||
1 00000400 __stack
|
||||
1 0000ddbc __unlock
|
||||
0 0000bb2f _abort
|
||||
1 0000d740 _adc_filter
|
||||
0 0000aa84 _adc_isr
|
||||
1 0000d73c _adc_table_lem
|
||||
0 0000b9b5 _c_int00
|
||||
1 0000dc47 _cal_addr
|
||||
0 00008053 _calc_sensor_koef
|
||||
1 0000df00 _ccc
|
||||
1 0000dc4b _chk
|
||||
0 00009ae1 _clear_mem
|
||||
0 00009526 _clear_timer_rs_live
|
||||
1 0000dd3e _cntr_addr_c
|
||||
1 0000dd3f _cntr_addr_c_all
|
||||
0 0000b425 _cpu_timer1_isr_PULT
|
||||
0 0000ac77 _cpu_timer1_isr_SENS
|
||||
0 0000b9fb _cpu_timer2_isr
|
||||
1 0000dac0 _crc_16_tab
|
||||
0 0000951a _create_uart_vars
|
||||
0 0000afd7 _dOUT
|
||||
0 0000afe3 _dSEND
|
||||
1 0000dc68 _def_FILTERBAT
|
||||
1 0000dec0 _def_cal
|
||||
1 0000dab0 _digits
|
||||
1 0000de08 _din_count
|
||||
0 0000803e _er_anal
|
||||
1 0000dfc0 _err_count
|
||||
1 0000dd01 _errno
|
||||
0 0000bb31 _exit
|
||||
1 0000dfa4 _ext_diag
|
||||
1 0000dfac _ext_temp
|
||||
0 0000a373 _extendbios
|
||||
0 0000ba34 _filterbat
|
||||
1 0000dc41 _flag_DEBUG
|
||||
1 0000dd04 _flog
|
||||
0 0000921c _get_Buttons
|
||||
0 000090ff _get_Mode
|
||||
0 0000a31b _get_command
|
||||
0 0000b859 _get_crc16
|
||||
0 0000b848 _get_crc_16
|
||||
0 0000b81e _get_crc_16b
|
||||
0 00008022 _im_calc
|
||||
0 0000a31a _init
|
||||
0 0000b977 _init_zone7
|
||||
0 0000a2d7 _initload
|
||||
1 0000dfa0 _isMask
|
||||
1 0000df9a _isNumb
|
||||
0 0000b199 _kanal_Send
|
||||
1 0000dfc6 _lev_count
|
||||
1 0000df8e _lev_quadr
|
||||
0 0000a28f _load
|
||||
1 00200000 _logs_block
|
||||
1 0000dfdb _low_count
|
||||
0 0000a66b _main
|
||||
1 0000dbc0 _modbus
|
||||
1 0000dd03 _never_write
|
||||
1 0000dd02 _no_write
|
||||
1 0000dc53 _okay
|
||||
1 0000d900 _out_filter
|
||||
1 0000dc80 _param
|
||||
0 0000b966 _pause_us
|
||||
0 0000a216 _peek
|
||||
1 0000dc4a _period_blink
|
||||
1 0000df80 _period_dac
|
||||
1 0000dc49 _period_ready
|
||||
0 0000a1da _poke
|
||||
1 0000dd2a _powK
|
||||
1 0000dc48 _pow_addr
|
||||
1 0000dea2 _prev_ok
|
||||
1 0000df9b _quaLamp
|
||||
0 0000a1af _read_memory
|
||||
1 0000dfcc _readr
|
||||
0 00008000 _reset_errs
|
||||
1 0000d040 _rs_a
|
||||
1 0000d3c0 _rs_b
|
||||
0 000088e6 _rsvd_ISR
|
||||
0 0000a1ae _run
|
||||
0 000090db _select_tpl_255
|
||||
0 0000904b _select_tpl_canal
|
||||
1 0000d704 _sens_count
|
||||
1 0000df1c _sens_pair
|
||||
1 0000df40 _sens_type
|
||||
0 0000bb6a _set_cntrl_addr
|
||||
0 0000ae3c _setup_adc
|
||||
0 000093e8 _setup_arr_cmd_length
|
||||
0 00009029 _setup_leds_line
|
||||
0 00009469 _setup_uart
|
||||
1 0000dc4c _sig
|
||||
0 0000a3eb _spiSe2pFree
|
||||
0 0000a3e7 _spiSe2pRead
|
||||
0 0000a3e3 _spiSe2pWrite
|
||||
0 0000babe _sqrt
|
||||
0 000093ba _test_rs_live
|
||||
0 0000a1ad _tflash
|
||||
1 0000dc4d _time_1_5sec
|
||||
1 0000dc4f _time_3sec
|
||||
1 0000dc4e _time_5msec
|
||||
1 0000dc50 _time_5sec
|
||||
1 0000df81 _time_dac
|
||||
0 0000a63e _timer_Init
|
||||
1 0000dc46 _tpl_cans
|
||||
0 00009ff0 _ump_can_fragment
|
||||
0 0000a110 _ump_can_id
|
||||
0 0000a0c8 _ump_can_request
|
||||
0 00009ec3 _ump_crc
|
||||
1 0000dd19 _ump_dac_duration
|
||||
1 0000dd1a _ump_dac_go10
|
||||
1 0000dd1c _ump_dac_position
|
||||
1 0000dd18 _ump_dac_ramp
|
||||
1 0000dd1b _ump_dac_stop10
|
||||
0 00009a92 _ump_log_can
|
||||
0 00009a5e _ump_log_init
|
||||
0 00009a30 _ump_log_io
|
||||
0 00009982 _ump_log_read
|
||||
0 00009944 _ump_log_rs
|
||||
0 00009920 _ump_log_tick
|
||||
0 000098a5 _ump_log_write
|
||||
0 00009e70 _ump_prepare
|
||||
0 0000a083 _ump_rtu
|
||||
0 00009ede _ump_rtu_encode
|
||||
0 00009f69 _ump_rtu_response
|
||||
0 0000a063 _ump_tms28335_capture
|
||||
0 0000a028 _ump_tms28335_fragment
|
||||
0 00009fd3 _ump_tms28335_prepare
|
||||
0 00009fb2 _ump_tms28335_rtu
|
||||
0 00009e1e _ump_validate
|
||||
0 00008ff7 _unsetup_leds_line
|
||||
0 0000a128 _upload
|
||||
1 0000df59 _wait
|
||||
0 0000afd2 _wast
|
||||
0 0000bade _what_is
|
||||
0 0000a125 _write_memory
|
||||
0 0000a124 _xflash
|
||||
1 0000dfb4 _zer_count
|
||||
1 0000ddc0 _zer_filter
|
||||
abs ffffffff binit
|
||||
0 0000c000 cinit
|
||||
0 0000bb73 etext
|
||||
abs ffffffff pinit
|
||||
page address name
|
||||
---- ------- ----
|
||||
0 00008000 .text
|
||||
0 0000b81d C$$EXIT
|
||||
0 00009e00 FS$$DIV
|
||||
0 0000aecb L$$DIV
|
||||
0 0000aeda L$$MOD
|
||||
0 0000ba3d U$$DIV
|
||||
0 0000ba42 U$$MOD
|
||||
0 0000aee8 UL$$DIV
|
||||
0 0000aeef UL$$MOD
|
||||
0 0000b19b _ADCINT_ISR
|
||||
0 00380080 _ADC_cal
|
||||
1 0000df06 _ADC_table
|
||||
0 0000c39c _ADDR_ANSWER
|
||||
1 0000ddbc _ADDR_FOR_ALL
|
||||
0 0000c39d _ADDR_TERMINAL
|
||||
1 00000b00 _AdcMirror
|
||||
1 00007100 _AdcRegs
|
||||
0 0000ac61 _Answer
|
||||
0 0000a6ae _CAN_send
|
||||
0 0000a61b _CANa_handler
|
||||
0 0000aea0 _CANa_reset_err
|
||||
1 0000ddbd _CNTRL_ADDR
|
||||
0 0000c39e _CNTRL_ADDR_UNIVERSAL
|
||||
1 0000dfb5 _COUNT_DISCHARGE
|
||||
1 0000dfb4 _COUNT_ONE_CANAL
|
||||
1 0000dfb6 _COUNT_TRANSICIA
|
||||
1 0000dd11 _Caliber_time
|
||||
1 0000dd03 _CanGO
|
||||
1 0000dd02 _CanPowse
|
||||
1 0000e000 _CanTimeOutErrorTR
|
||||
0 0000aff9 _ConfigCpuTimer
|
||||
1 0000df9c _CpuTimer0
|
||||
1 00000c00 _CpuTimer0Regs
|
||||
1 0000dfa4 _CpuTimer1
|
||||
1 00000c08 _CpuTimer1Regs
|
||||
1 0000dfac _CpuTimer2
|
||||
1 00000c10 _CpuTimer2Regs
|
||||
1 0033fff8 _CsmPwl
|
||||
1 00000ae0 _CsmRegs
|
||||
1 0000dd12 _Curr_Edge
|
||||
0 00008000 _Current_count
|
||||
0 0000b940 _DATALOG_ISR
|
||||
0 0000b1b6 _DINTCH1_ISR
|
||||
0 0000b1d1 _DINTCH2_ISR
|
||||
0 0000b1ec _DINTCH3_ISR
|
||||
0 0000b207 _DINTCH4_ISR
|
||||
0 0000b222 _DINTCH5_ISR
|
||||
0 0000b23d _DINTCH6_ISR
|
||||
1 0000dffc _DIR_GPIO32
|
||||
1 0000dffd _DIR_GPIO48
|
||||
0 0000ba9f _DSP28x_usDelay
|
||||
0 00009586 _Default_params
|
||||
1 0000dff1 _Desk
|
||||
1 00000880 _DevEmuRegs
|
||||
1 0000dffe _DigErr
|
||||
0 0000ba81 _DisableDog
|
||||
1 00001000 _DmaRegs
|
||||
0 0000b258 _ECAN0INTA_ISR
|
||||
0 0000b273 _ECAN0INTB_ISR
|
||||
0 0000b28e _ECAN1INTA_ISR
|
||||
0 0000b2a9 _ECAN1INTB_ISR
|
||||
0 0000b2c4 _ECAP1_INT_ISR
|
||||
0 0000b2df _ECAP2_INT_ISR
|
||||
0 0000b2fa _ECAP3_INT_ISR
|
||||
0 0000b315 _ECAP4_INT_ISR
|
||||
0 0000b330 _ECAP5_INT_ISR
|
||||
0 0000b34b _ECAP6_INT_ISR
|
||||
1 00006040 _ECanaLAMRegs
|
||||
1 000060c0 _ECanaMOTORegs
|
||||
1 00006080 _ECanaMOTSRegs
|
||||
1 00006100 _ECanaMboxes
|
||||
1 00006000 _ECanaRegs
|
||||
1 00006240 _ECanbLAMRegs
|
||||
1 000062c0 _ECanbMOTORegs
|
||||
1 00006280 _ECanbMOTSRegs
|
||||
1 00006300 _ECanbMboxes
|
||||
1 00006200 _ECanbRegs
|
||||
1 00006a00 _ECap1Regs
|
||||
1 00006a20 _ECap2Regs
|
||||
1 00006a40 _ECap3Regs
|
||||
1 00006a60 _ECap4Regs
|
||||
1 00006a80 _ECap5Regs
|
||||
1 00006aa0 _ECap6Regs
|
||||
abs 00007efc _EEPROM_FIRMWARE_LIMIT_BYTES
|
||||
abs 00007ffe _EEPROM_PARAMS_END_BYTE
|
||||
abs 00007efc _EEPROM_PARAMS_START_BYTE
|
||||
abs 00003f7e _EEPROM_PARAMS_START_WORD
|
||||
abs 00008000 _EEPROM_TOTAL_BYTES
|
||||
0 0000b98d _EMUINT_ISR
|
||||
0 0000b366 _EPWM1_INT_ISR
|
||||
0 0000b381 _EPWM1_TZINT_ISR
|
||||
0 0000b39c _EPWM2_INT_ISR
|
||||
0 0000b3b7 _EPWM2_TZINT_ISR
|
||||
0 0000b3d2 _EPWM3_INT_ISR
|
||||
0 0000b3ed _EPWM3_TZINT_ISR
|
||||
0 0000b408 _EPWM4_INT_ISR
|
||||
0 0000b423 _EPWM4_TZINT_ISR
|
||||
0 0000b43e _EPWM5_INT_ISR
|
||||
0 0000b459 _EPWM5_TZINT_ISR
|
||||
0 0000b474 _EPWM6_INT_ISR
|
||||
0 0000b48f _EPWM6_TZINT_ISR
|
||||
1 00006800 _EPwm1Regs
|
||||
1 00006840 _EPwm2Regs
|
||||
1 00006880 _EPwm3Regs
|
||||
1 000068c0 _EPwm4Regs
|
||||
1 00006900 _EPwm5Regs
|
||||
1 00006940 _EPwm6Regs
|
||||
0 0000b4aa _EQEP1_INT_ISR
|
||||
0 0000b4c5 _EQEP2_INT_ISR
|
||||
1 00006b00 _EQep1Regs
|
||||
1 00006b40 _EQep2Regs
|
||||
0 0000ba66 _EnableInterrupts
|
||||
1 0000e00a _ErrorCount
|
||||
1 0000dfb7 _FILTER_CLIP
|
||||
1 00000a80 _FlashRegs
|
||||
1 00006f80 _GpioCtrlRegs
|
||||
1 00006fc0 _GpioDataRegs
|
||||
1 00006fe0 _GpioIntRegs
|
||||
1 0000dc7e _HSPCLK
|
||||
0 0000a10f _Handlai
|
||||
0 0000b4e0 _I2CINT1A_ISR
|
||||
0 0000b4fb _I2CINT2A_ISR
|
||||
1 00007900 _I2caRegs
|
||||
0 0000b998 _ILLEGAL_ISR
|
||||
1 0000deba _IMPowse
|
||||
0 0000b94d _INT13_ISR
|
||||
0 0000b95a _INT14_ISR
|
||||
0 0000ba48 _INT_NOTUSED_ISR
|
||||
1 0000dff8 _INcount0
|
||||
1 0000dff9 _INcount1
|
||||
0 0000b7d2 _InitAdc
|
||||
0 000098a1 _InitCan
|
||||
0 0000aa5f _InitCpuTimers
|
||||
0 00009e88 _InitPeripheralClocks
|
||||
0 0000b05a _InitPieCtrl
|
||||
0 0000b967 _InitPieVectTable
|
||||
0 0000a015 _InitPll
|
||||
0 0000aef5 _InitSeeprom
|
||||
0 0000ba6f _InitSysCtrl
|
||||
0 0000a39b _InitXintf16Gpio
|
||||
0 0000b12b _Init_DAC
|
||||
0 00009bc6 _Init_packMask
|
||||
0 00009022 _Init_sensors
|
||||
0 0000a339 _Init_sensors_more
|
||||
1 0000dd1e _K100
|
||||
1 0000dd20 _K_50
|
||||
1 0000dd22 _K_T1
|
||||
1 0000dd24 _K_T2
|
||||
1 0000dff6 _Kalibro
|
||||
1 0000dff5 _Kurrent
|
||||
1 0000dc7c _LSPCLK
|
||||
0 0000b516 _LUF_ISR
|
||||
0 0000b531 _LVF_ISR
|
||||
0 0000b098 _Load_control_init
|
||||
0 0000a9e1 _Load_params
|
||||
0 0000a2d0 _Load_protection_prepare
|
||||
0 00008c31 _Load_runner
|
||||
0 0000aa9a _Load_voltage_can
|
||||
1 0000dea0 _Log
|
||||
1 0000e02c _Lonely
|
||||
0 0000b54c _MRINTA_ISR
|
||||
0 0000b567 _MRINTB_ISR
|
||||
1 0000dffa _MUX_GPIO32
|
||||
1 0000dffb _MUX_GPIO48
|
||||
0 0000b582 _MXINTA_ISR
|
||||
0 0000b59d _MXINTB_ISR
|
||||
1 0000d8f0 _Maska
|
||||
1 00005000 _McbspaRegs
|
||||
1 00005040 _McbspbRegs
|
||||
1 0000e00c _MessageReceivedCount
|
||||
1 0000e00e _MessageTransivedCount
|
||||
1 0000dff0 _Mode
|
||||
0 0000b9a3 _NMI_ISR
|
||||
1 0000dff7 _Owen
|
||||
0 0000ba52 _PIE_RESERVED
|
||||
1 00380090 _PartIdRegs
|
||||
1 00000ce0 _PieCtrlRegs
|
||||
1 00000d00 _PieVectTable
|
||||
0 0000c274 _PieVectTableInit
|
||||
0 0000948d _Power_count
|
||||
1 0000dd04 _READY
|
||||
0 0000b84f _RESET
|
||||
0 0000a73d _RSA_RX_Handler
|
||||
0 0000a783 _RSA_TX_Handler
|
||||
0 0000a7c9 _RSB_RX_Handler
|
||||
0 0000a80f _RSB_TX_Handler
|
||||
0 0000abf3 _RS_BSend
|
||||
0 0000ad8f _RS_FifoTick1ms
|
||||
0 0000b8e8 _RS_FifoWait
|
||||
1 0000dec0 _RS_Len
|
||||
0 00008d8d _RS_RX_Handler
|
||||
0 0000a5d0 _RS_Send
|
||||
0 0000b79e _RS_SetBitMode
|
||||
0 0000ae1a _RS_SetLineMode
|
||||
0 0000af45 _RS_SetLineSpeed
|
||||
0 0000a262 _RS_TX_Handler
|
||||
0 0000b974 _RTOSINT_ISR
|
||||
0 0000c000 _RamfuncsLoadEnd
|
||||
0 0000c000 _RamfuncsLoadStart
|
||||
0 0000c000 _RamfuncsRunStart
|
||||
0 0000ac2a _ReceiveAnswerModbus4
|
||||
0 000099f6 _ReceiveCommandModbus3
|
||||
0 0000a44b _ReceiveCommandModbus6
|
||||
0 0000b5b8 _SCIRXINTA_ISR
|
||||
0 0000b5d3 _SCIRXINTB_ISR
|
||||
0 0000b5ee _SCIRXINTC_ISR
|
||||
0 0000b609 _SCITXINTA_ISR
|
||||
0 0000b624 _SCITXINTB_ISR
|
||||
0 0000b63f _SCITXINTC_ISR
|
||||
0 0000b0b6 _SENDBIT
|
||||
0 0000b65a _SEQ1INT_ISR
|
||||
0 0000b675 _SEQ2INT_ISR
|
||||
0 0000b690 _SPIRXINTA_ISR
|
||||
0 0000ba90 _SPISE2P_DRV_csclr
|
||||
0 0000ba95 _SPISE2P_DRV_csset
|
||||
0 0000acfa _SPISE2P_DRV_init
|
||||
0 0000914b _SPISE2P_DRV_tick
|
||||
0 0000b6ab _SPITXINTA_ISR
|
||||
1 0000dc7a _SYSCLKOUT
|
||||
0 0000af6b _Save_params
|
||||
1 00007050 _SciaRegs
|
||||
1 00007750 _ScibRegs
|
||||
1 00007770 _ScicRegs
|
||||
0 0000a91e _Seeprom_read
|
||||
0 0000a95f _Seeprom_write
|
||||
0 0000ab83 _SendCommandModbus4
|
||||
0 0000b896 _ServiceDog
|
||||
0 0000b01a _Setup_DAC_time
|
||||
1 00007040 _SpiaRegs
|
||||
1 00007010 _SysCtrlRegs
|
||||
0 0000b6c6 _TINT0_ISR
|
||||
1 0000dd05 _TPL_CANS
|
||||
0 00008437 _Temper_count
|
||||
1 0000dff2 _TermoAD
|
||||
1 0000dff3 _TermoRS
|
||||
1 0000dff4 _TermoSW
|
||||
1 0000e010 _TestMbox1
|
||||
1 0000e012 _TestMbox2
|
||||
1 0000e014 _TestMbox3
|
||||
0 0000994d _UMP_CAN_service
|
||||
0 0000b9ae _USER10_ISR
|
||||
0 0000b9b9 _USER11_ISR
|
||||
0 0000b9c4 _USER12_ISR
|
||||
0 0000b9cf _USER1_ISR
|
||||
0 0000b9da _USER2_ISR
|
||||
0 0000b9e5 _USER3_ISR
|
||||
0 0000b9f0 _USER4_ISR
|
||||
0 0000b9fb _USER5_ISR
|
||||
0 0000ba06 _USER6_ISR
|
||||
0 0000ba11 _USER7_ISR
|
||||
0 0000ba1c _USER8_ISR
|
||||
0 0000ba27 _USER9_ISR
|
||||
1 0000dfbc _WAKE
|
||||
0 0000b6e1 _WAKEINT_ISR
|
||||
1 0000dfbe _WAKE_TIME
|
||||
1 0000deb8 _WAKEpowse
|
||||
0 0000b7eb _XINT1_ISR
|
||||
0 0000b804 _XINT2_ISR
|
||||
0 0000b6fc _XINT3_ISR
|
||||
0 0000b717 _XINT4_ISR
|
||||
0 0000b732 _XINT5_ISR
|
||||
0 0000b74d _XINT6_ISR
|
||||
0 0000b768 _XINT7_ISR
|
||||
1 00007070 _XIntruptRegs
|
||||
1 00000b20 _XintfRegs
|
||||
1 000007f0 __STACK_END
|
||||
abs 000003f0 __STACK_SIZE
|
||||
abs ffffffff ___TI_pprof_out_hndl
|
||||
abs ffffffff ___TI_prof_data_size
|
||||
abs ffffffff ___TI_prof_data_start
|
||||
abs ffffffff ___binit__
|
||||
abs ffffffff ___c_args__
|
||||
0 0000c000 ___cinit__
|
||||
0 0000baa7 ___etext__
|
||||
abs ffffffff ___pinit__
|
||||
0 00008000 ___text__
|
||||
0 0000b783 __args_main
|
||||
1 0000e054 __cleanup_ptr
|
||||
1 0000e056 __dtors_ptr
|
||||
1 0000de3e __lock
|
||||
0 0000ba80 __nop
|
||||
0 0000ba7c __register_lock
|
||||
0 0000ba78 __register_unlock
|
||||
1 00000400 __stack
|
||||
1 0000de3c __unlock
|
||||
0 0000b81d _abort
|
||||
1 0000d740 _adc_filter
|
||||
0 0000825a _adc_isr
|
||||
1 0000d73c _adc_table_lem
|
||||
0 0000a855 _c_int00
|
||||
1 0000dd07 _cal_addr
|
||||
0 000097f3 _calc_sensor_koef
|
||||
1 0000df80 _ccc
|
||||
1 0000dd0b _chk
|
||||
0 0000b87f _clear_mem
|
||||
1 0000ddbe _cntr_addr_c
|
||||
1 0000ddbf _cntr_addr_c_all
|
||||
0 00008edf _cpu_timer1_isr_PULT
|
||||
0 00008aad _cpu_timer1_isr_SENS
|
||||
0 0000ab4a _cpu_timer2_isr
|
||||
1 0000dac0 _crc_16_tab
|
||||
0 0000b7b8 _create_uart_vars
|
||||
0 0000ad5e _dSEND
|
||||
1 0000dd28 _def_FILTERBAT
|
||||
1 0000df40 _def_cal
|
||||
1 0000dab0 _digits
|
||||
1 0000d70a _din_count
|
||||
0 0000b981 _epilog_c28x_1
|
||||
0 0000b985 _epilog_c28x_2
|
||||
0 0000b8c0 _er_anal
|
||||
1 0000dd3a _err_count
|
||||
1 0000e053 _errno
|
||||
0 0000b81f _exit
|
||||
1 0000e02e _ext_diag
|
||||
1 0000e036 _ext_temp
|
||||
0 00009f0d _extendbios
|
||||
0 0000adbe _filterbat
|
||||
1 0000dc41 _flag_DEBUG
|
||||
1 0000de8a _flog
|
||||
0 000085de _get_Buttons
|
||||
0 0000926d _get_Mode
|
||||
0 0000a3f4 _get_command
|
||||
0 0000af1e _get_crc16
|
||||
0 0000b90e _get_crc_16
|
||||
0 0000ae74 _get_crc_16b
|
||||
0 0000b147 _im_calc
|
||||
0 000099f5 _init
|
||||
0 0000aa21 _init_zone7
|
||||
0 0000a6f6 _initload
|
||||
1 0000e02a _isMask
|
||||
1 0000e024 _isNumb
|
||||
0 00009382 _kanal_Send
|
||||
1 0000e048 _lev_count
|
||||
1 0000e018 _lev_quadr
|
||||
0 0000a665 _load
|
||||
1 00200000 _logs_block
|
||||
1 0000e05a _low_count
|
||||
0 00008781 _main
|
||||
0 0000ba89 _memset
|
||||
1 0000dbc0 _modbus
|
||||
1 0000de89 _never_write
|
||||
1 0000de88 _no_write
|
||||
1 0000dd13 _okay
|
||||
1 0000d900 _out_filter
|
||||
1 0000dc80 _param
|
||||
0 0000b920 _pause_us
|
||||
0 0000a097 _peek
|
||||
1 0000dd0a _period_blink
|
||||
1 0000dea8 _period_dac
|
||||
1 0000dd09 _period_ready
|
||||
0 0000ab10 _poke
|
||||
1 0000d72a _powK
|
||||
1 0000dd08 _pow_addr
|
||||
1 0000df22 _prev_ok
|
||||
0 0000b836 _prolog_c28x_1
|
||||
0 0000b83a _prolog_c28x_2
|
||||
0 0000b842 _prolog_c28x_3
|
||||
1 0000e025 _quaLamp
|
||||
1 0000e04e _readr
|
||||
0 0000b079 _reset_errs
|
||||
1 0000d040 _rs_a
|
||||
1 0000d3c0 _rs_b
|
||||
0 0000ba5c _rsvd_ISR
|
||||
0 00009f91 _run
|
||||
0 0000afb3 _select_tpl_255
|
||||
0 00009a93 _select_tpl_canal
|
||||
1 0000dc42 _sens_count
|
||||
1 0000dfc0 _sens_pair
|
||||
1 0000dfd8 _sens_type
|
||||
0 0000ba9a _set_cntrl_addr
|
||||
0 00008920 _setup_adc
|
||||
0 0000a9a0 _setup_arr_cmd_length
|
||||
0 0000afd7 _setup_leds_line
|
||||
0 00009672 _setup_uart
|
||||
1 0000dd0c _sig
|
||||
0 0000b03a _sqrt
|
||||
0 0000baa6 _tflash
|
||||
1 0000dd0d _time_1_5sec
|
||||
1 0000dd0f _time_3sec
|
||||
1 0000dd0e _time_5msec
|
||||
1 0000dd10 _time_5sec
|
||||
1 0000dea9 _time_dac
|
||||
0 0000ae47 _timer_Init
|
||||
1 0000dd06 _tpl_cans
|
||||
0 0000aad5 _ump_can_fragment
|
||||
0 0000b163 _ump_crc
|
||||
0 0000a89b _ump_log_can
|
||||
0 0000b0d4 _ump_log_init
|
||||
0 0000adec _ump_log_io
|
||||
0 00009740 _ump_log_read
|
||||
0 0000ba32 _ump_log_rs
|
||||
0 0000b867 _ump_log_tick
|
||||
0 0000a1f2 _ump_log_write
|
||||
0 0000a537 _ump_prepare
|
||||
0 00009f92 _ump_rtu_encode
|
||||
0 0000b17f _ump_tms28335_capture
|
||||
0 0000abbb _ump_tms28335_fragment
|
||||
0 0000b0f1 _ump_tms28335_prepare
|
||||
0 0000a181 _ump_validate
|
||||
0 0000ad2c _unsetup_leds_line
|
||||
0 00009b2f _upload
|
||||
1 0000e001 _wait
|
||||
0 0000b10e _what_is
|
||||
1 0000e040 _zer_count
|
||||
1 0000de40 _zer_filter
|
||||
abs ffffffff binit
|
||||
0 0000c000 cinit
|
||||
0 0000baa7 etext
|
||||
abs ffffffff pinit
|
||||
|
||||
|
||||
GLOBAL SYMBOLS: SORTED BY Symbol Address
|
||||
|
||||
page address name
|
||||
---- ------- ----
|
||||
0 00008000 .text
|
||||
0 00008000 ___text__
|
||||
0 00008000 _reset_errs
|
||||
0 00008022 _im_calc
|
||||
0 0000803e _er_anal
|
||||
0 00008053 _calc_sensor_koef
|
||||
0 00008111 _Temper_count
|
||||
0 000082ee _Power_count
|
||||
0 000083d8 _Init_sensors_more
|
||||
0 00008438 _Init_sensors
|
||||
0 000085ae _Init_packMask
|
||||
0 00008656 _Current_count
|
||||
0 000088e6 _rsvd_ISR
|
||||
0 000088f0 _XINT7_ISR
|
||||
0 0000890b _XINT6_ISR
|
||||
0 00008926 _XINT5_ISR
|
||||
0 00008941 _XINT4_ISR
|
||||
0 0000895c _XINT3_ISR
|
||||
0 00008977 _XINT2_ISR
|
||||
0 00008990 _XINT1_ISR
|
||||
0 000089a9 _WAKEINT_ISR
|
||||
0 000089c4 _USER9_ISR
|
||||
0 000089cf _USER8_ISR
|
||||
0 000089da _USER7_ISR
|
||||
0 000089e5 _USER6_ISR
|
||||
0 000089f0 _USER5_ISR
|
||||
0 000089fb _USER4_ISR
|
||||
0 00008a06 _USER3_ISR
|
||||
0 00008a11 _USER2_ISR
|
||||
0 00008a1c _USER1_ISR
|
||||
0 00008a27 _USER12_ISR
|
||||
0 00008a32 _USER11_ISR
|
||||
0 00008a3d _USER10_ISR
|
||||
0 00008a48 _TINT0_ISR
|
||||
0 00008a63 _SPITXINTA_ISR
|
||||
0 00008a7e _SPIRXINTA_ISR
|
||||
0 00008a99 _SEQ2INT_ISR
|
||||
0 00008ab4 _SEQ1INT_ISR
|
||||
0 00008acf _SCITXINTC_ISR
|
||||
0 00008aea _SCITXINTB_ISR
|
||||
0 00008b05 _SCITXINTA_ISR
|
||||
0 00008b20 _SCIRXINTC_ISR
|
||||
0 00008b3b _SCIRXINTB_ISR
|
||||
0 00008b56 _SCIRXINTA_ISR
|
||||
0 00008b71 _RTOSINT_ISR
|
||||
0 00008b7e _PIE_RESERVED
|
||||
0 00008b88 _NMI_ISR
|
||||
0 00008b93 _MXINTB_ISR
|
||||
0 00008bae _MXINTA_ISR
|
||||
0 00008bc9 _MRINTB_ISR
|
||||
0 00008be4 _MRINTA_ISR
|
||||
0 00008bff _LVF_ISR
|
||||
0 00008c1a _LUF_ISR
|
||||
0 00008c35 _INT_NOTUSED_ISR
|
||||
0 00008c3f _INT14_ISR
|
||||
0 00008c4c _INT13_ISR
|
||||
0 00008c59 _ILLEGAL_ISR
|
||||
0 00008c64 _I2CINT2A_ISR
|
||||
0 00008c7f _I2CINT1A_ISR
|
||||
0 00008c9a _EQEP2_INT_ISR
|
||||
0 00008cb5 _EQEP1_INT_ISR
|
||||
0 00008cd0 _EPWM6_TZINT_ISR
|
||||
0 00008ceb _EPWM6_INT_ISR
|
||||
0 00008d06 _EPWM5_TZINT_ISR
|
||||
0 00008d21 _EPWM5_INT_ISR
|
||||
0 00008d3c _EPWM4_TZINT_ISR
|
||||
0 00008d57 _EPWM4_INT_ISR
|
||||
0 00008d72 _EPWM3_TZINT_ISR
|
||||
0 00008d8d _EPWM3_INT_ISR
|
||||
0 00008da8 _EPWM2_TZINT_ISR
|
||||
0 00008dc3 _EPWM2_INT_ISR
|
||||
0 00008dde _EPWM1_TZINT_ISR
|
||||
0 00008df9 _EPWM1_INT_ISR
|
||||
0 00008e14 _EMUINT_ISR
|
||||
0 00008e1f _ECAP6_INT_ISR
|
||||
0 00008e3a _ECAP5_INT_ISR
|
||||
0 00008e55 _ECAP4_INT_ISR
|
||||
0 00008e70 _ECAP3_INT_ISR
|
||||
0 00008e8b _ECAP2_INT_ISR
|
||||
0 00008ea6 _ECAP1_INT_ISR
|
||||
0 00008ec1 _ECAN1INTB_ISR
|
||||
0 00008edc _ECAN1INTA_ISR
|
||||
0 00008ef7 _ECAN0INTB_ISR
|
||||
0 00008f12 _ECAN0INTA_ISR
|
||||
0 00008f2d _DINTCH6_ISR
|
||||
0 00008f48 _DINTCH5_ISR
|
||||
0 00008f63 _DINTCH4_ISR
|
||||
0 00008f7e _DINTCH3_ISR
|
||||
0 00008f99 _DINTCH2_ISR
|
||||
0 00008fb4 _DINTCH1_ISR
|
||||
0 00008fcf _DATALOG_ISR
|
||||
0 00008fdc _ADCINT_ISR
|
||||
0 00008ff7 _unsetup_leds_line
|
||||
0 00009029 _setup_leds_line
|
||||
0 0000904b _select_tpl_canal
|
||||
0 000090db _select_tpl_255
|
||||
0 000090ff _get_Mode
|
||||
0 0000921c _get_Buttons
|
||||
0 000093ba _test_rs_live
|
||||
0 000093bb _RS_SetLineMode
|
||||
0 000093e8 _setup_arr_cmd_length
|
||||
0 0000942f _RS_SetLineSpeed
|
||||
0 0000944f _RS_SetBitMode
|
||||
0 00009469 _setup_uart
|
||||
0 0000951a _create_uart_vars
|
||||
0 00009526 _clear_timer_rs_live
|
||||
0 0000952b _RS_TX_Handler
|
||||
0 000095a4 _RS_Send
|
||||
0 000095fc _RS_RX_Handler
|
||||
0 00009746 _RS_BSend
|
||||
0 000098a5 _ump_log_write
|
||||
0 00009920 _ump_log_tick
|
||||
0 00009944 _ump_log_rs
|
||||
0 00009982 _ump_log_read
|
||||
0 00009a30 _ump_log_io
|
||||
0 00009a5e _ump_log_init
|
||||
0 00009a92 _ump_log_can
|
||||
0 00009ae1 _clear_mem
|
||||
0 00009af6 _SendCommandModbus4
|
||||
0 00009b1e _Save_params
|
||||
0 00009bc7 _ReceiveCommandModbus6
|
||||
0 00009c05 _ReceiveCommandModbus3
|
||||
0 00009c90 _ReceiveAnswerModbus4
|
||||
0 00009cba _Default_params
|
||||
0 00009dd6 _Load_params
|
||||
0 00009e1e _ump_validate
|
||||
0 00009e70 _ump_prepare
|
||||
0 00009ec3 _ump_crc
|
||||
0 00009ede _ump_rtu_encode
|
||||
0 00009f69 _ump_rtu_response
|
||||
0 00009fb2 _ump_tms28335_rtu
|
||||
0 00009fd3 _ump_tms28335_prepare
|
||||
0 00009ff0 _ump_can_fragment
|
||||
0 0000a028 _ump_tms28335_fragment
|
||||
0 0000a063 _ump_tms28335_capture
|
||||
0 0000a083 _ump_rtu
|
||||
0 0000a0c8 _ump_can_request
|
||||
0 0000a110 _ump_can_id
|
||||
0 0000a124 _xflash
|
||||
0 0000a125 _write_memory
|
||||
0 0000a128 _upload
|
||||
0 0000a1ad _tflash
|
||||
0 0000a1ae _run
|
||||
0 0000a1af _read_memory
|
||||
0 0000a1b2 _Answer
|
||||
0 0000a1da _poke
|
||||
0 0000a216 _peek
|
||||
0 0000a28f _load
|
||||
0 0000a2d7 _initload
|
||||
0 0000a31a _init
|
||||
0 0000a31b _get_command
|
||||
0 0000a373 _extendbios
|
||||
0 0000a3e3 _spiSe2pWrite
|
||||
0 0000a3e7 _spiSe2pRead
|
||||
0 0000a3eb _spiSe2pFree
|
||||
0 0000a3f2 _SPISE2P_DRV_csclr
|
||||
0 0000a3f7 _SPISE2P_DRV_csset
|
||||
0 0000a3fc _SPISE2P_DRV_init
|
||||
0 0000a42e _SPISE2P_DRV_tick
|
||||
0 0000a58f _Seeprom_write
|
||||
0 0000a5d2 _Seeprom_read
|
||||
0 0000a615 _InitSeeprom
|
||||
0 0000a63e _timer_Init
|
||||
0 0000a66b _main
|
||||
0 0000a88b _UMP_CAN_service
|
||||
0 0000a920 _InitCan
|
||||
0 0000a9d9 _Handlai
|
||||
0 0000aa38 _CAN_send
|
||||
0 0000aa84 _adc_isr
|
||||
0 0000ac77 _cpu_timer1_isr_SENS
|
||||
0 0000ae3c _setup_adc
|
||||
0 0000afd2 _wast
|
||||
0 0000afd7 _dOUT
|
||||
0 0000afe3 _dSEND
|
||||
0 0000b011 _Setup_DAC_time
|
||||
0 0000b01b _Anal_output
|
||||
0 0000b064 _Init_DAC
|
||||
0 0000b080 _Load_runner
|
||||
0 0000b15c _DOUT
|
||||
0 0000b168 _DCLK
|
||||
0 0000b174 _SENDBIT
|
||||
0 0000b186 _RESET
|
||||
0 0000b199 _kanal_Send
|
||||
0 0000b2c8 _ServiceDog
|
||||
0 0000b2de _DisableDog
|
||||
0 0000b2e6 _InitPll
|
||||
0 0000b368 _InitPeripheralClocks
|
||||
0 0000b3ed _InitSysCtrl
|
||||
0 0000b3f6 _CsmUnlock
|
||||
0 0000b425 _cpu_timer1_isr_PULT
|
||||
0 0000b576 _RSB_TX_Handler
|
||||
0 0000b5bb _RSB_RX_Handler
|
||||
0 0000b600 _RSA_TX_Handler
|
||||
0 0000b645 _RSA_RX_Handler
|
||||
0 0000b68a _InitXintf16Gpio
|
||||
0 0000b6e3 _InitXintf32Gpio
|
||||
0 0000b733 _InitXintf
|
||||
0 0000b796 FS$$DIV
|
||||
0 0000b81e _get_crc_16b
|
||||
0 0000b848 _get_crc_16
|
||||
0 0000b859 _get_crc16
|
||||
0 0000b893 _CANa_reset_err
|
||||
0 0000b8be _CANa_handler
|
||||
0 0000b908 _InitCpuTimers
|
||||
0 0000b947 _ConfigCpuTimer
|
||||
0 0000b966 _pause_us
|
||||
0 0000b977 _init_zone7
|
||||
0 0000b9b5 _c_int00
|
||||
0 0000b9fb _cpu_timer2_isr
|
||||
0 0000ba34 _filterbat
|
||||
0 0000ba6b L$$DIV
|
||||
0 0000ba7a L$$MOD
|
||||
0 0000ba88 UL$$DIV
|
||||
0 0000ba8f UL$$MOD
|
||||
0 0000ba95 _InitPieCtrl
|
||||
0 0000bab4 _EnableInterrupts
|
||||
0 0000babe _sqrt
|
||||
0 0000bade _what_is
|
||||
0 0000bafb __args_main
|
||||
0 0000bb16 _InitAdc
|
||||
0 0000bb2f C$$EXIT
|
||||
0 0000bb2f _abort
|
||||
0 0000bb31 _exit
|
||||
0 0000bb48 _InitPieVectTable
|
||||
0 0000bb56 U$$DIV
|
||||
0 0000bb5b U$$MOD
|
||||
0 0000bb61 __register_unlock
|
||||
0 0000bb65 __register_lock
|
||||
0 0000bb69 __nop
|
||||
0 0000bb6a _set_cntrl_addr
|
||||
0 0000bb6f _DSP28x_usDelay
|
||||
0 0000bb73 ___etext__
|
||||
0 0000bb73 etext
|
||||
0 0000c000 _RamfuncsLoadEnd
|
||||
0 0000c000 _RamfuncsLoadStart
|
||||
0 0000c000 _RamfuncsRunStart
|
||||
0 0000c000 ___cinit__
|
||||
0 0000c000 cinit
|
||||
0 0000c28c _PieVectTableInit
|
||||
0 0000c3ae _ADDR_ANSWER
|
||||
0 0000c3af _ADDR_TERMINAL
|
||||
0 0000c3b0 _CNTRL_ADDR_UNIVERSAL
|
||||
0 00380080 _ADC_cal
|
||||
1 00000400 __stack
|
||||
1 000007f0 __STACK_END
|
||||
1 00000880 _DevEmuRegs
|
||||
1 00000a80 _FlashRegs
|
||||
1 00000ae0 _CsmRegs
|
||||
1 00000b00 _AdcMirror
|
||||
1 00000b20 _XintfRegs
|
||||
1 00000c00 _CpuTimer0Regs
|
||||
1 00000c08 _CpuTimer1Regs
|
||||
1 00000c10 _CpuTimer2Regs
|
||||
1 00000ce0 _PieCtrlRegs
|
||||
1 00000d00 _PieVectTable
|
||||
1 00001000 _DmaRegs
|
||||
1 00005000 _McbspaRegs
|
||||
1 00005040 _McbspbRegs
|
||||
1 00006000 _ECanaRegs
|
||||
1 00006040 _ECanaLAMRegs
|
||||
1 00006080 _ECanaMOTSRegs
|
||||
1 000060c0 _ECanaMOTORegs
|
||||
1 00006100 _ECanaMboxes
|
||||
1 00006200 _ECanbRegs
|
||||
1 00006240 _ECanbLAMRegs
|
||||
1 00006280 _ECanbMOTSRegs
|
||||
1 000062c0 _ECanbMOTORegs
|
||||
1 00006300 _ECanbMboxes
|
||||
1 00006800 _EPwm1Regs
|
||||
1 00006840 _EPwm2Regs
|
||||
1 00006880 _EPwm3Regs
|
||||
1 000068c0 _EPwm4Regs
|
||||
1 00006900 _EPwm5Regs
|
||||
1 00006940 _EPwm6Regs
|
||||
1 00006a00 _ECap1Regs
|
||||
1 00006a20 _ECap2Regs
|
||||
1 00006a40 _ECap3Regs
|
||||
1 00006a60 _ECap4Regs
|
||||
1 00006a80 _ECap5Regs
|
||||
1 00006aa0 _ECap6Regs
|
||||
1 00006b00 _EQep1Regs
|
||||
1 00006b40 _EQep2Regs
|
||||
1 00006f80 _GpioCtrlRegs
|
||||
1 00006fc0 _GpioDataRegs
|
||||
1 00006fe0 _GpioIntRegs
|
||||
1 00007010 _SysCtrlRegs
|
||||
1 00007040 _SpiaRegs
|
||||
1 00007050 _SciaRegs
|
||||
1 00007070 _XIntruptRegs
|
||||
1 00007100 _AdcRegs
|
||||
1 00007750 _ScibRegs
|
||||
1 00007770 _ScicRegs
|
||||
1 00007900 _I2caRegs
|
||||
1 0000d040 _rs_a
|
||||
1 0000d3c0 _rs_b
|
||||
1 0000d704 _sens_count
|
||||
1 0000d73c _adc_table_lem
|
||||
1 0000d740 _adc_filter
|
||||
1 0000d8f0 _Maska
|
||||
1 0000d900 _out_filter
|
||||
1 0000dab0 _digits
|
||||
1 0000dac0 _crc_16_tab
|
||||
1 0000dbc0 _modbus
|
||||
1 0000dc41 _flag_DEBUG
|
||||
1 0000dc42 _CanPowse
|
||||
1 0000dc43 _CanGO
|
||||
1 0000dc44 _READY
|
||||
1 0000dc45 _TPL_CANS
|
||||
1 0000dc46 _tpl_cans
|
||||
1 0000dc47 _cal_addr
|
||||
1 0000dc48 _pow_addr
|
||||
1 0000dc49 _period_ready
|
||||
1 0000dc4a _period_blink
|
||||
1 0000dc4b _chk
|
||||
1 0000dc4c _sig
|
||||
1 0000dc4d _time_1_5sec
|
||||
1 0000dc4e _time_5msec
|
||||
1 0000dc4f _time_3sec
|
||||
1 0000dc50 _time_5sec
|
||||
1 0000dc51 _Caliber_time
|
||||
1 0000dc52 _Curr_Edge
|
||||
1 0000dc53 _okay
|
||||
1 0000dc5e _K100
|
||||
1 0000dc60 _K_50
|
||||
1 0000dc62 _K_T1
|
||||
1 0000dc64 _K_T2
|
||||
1 0000dc68 _def_FILTERBAT
|
||||
1 0000dc7a _SYSCLKOUT
|
||||
1 0000dc7c _LSPCLK
|
||||
1 0000dc7e _HSPCLK
|
||||
1 0000dc80 _param
|
||||
1 0000dd01 _errno
|
||||
1 0000dd02 _no_write
|
||||
1 0000dd03 _never_write
|
||||
1 0000dd04 _flog
|
||||
1 0000dd18 _ump_dac_ramp
|
||||
1 0000dd19 _ump_dac_duration
|
||||
1 0000dd1a _ump_dac_go10
|
||||
1 0000dd1b _ump_dac_stop10
|
||||
1 0000dd1c _ump_dac_position
|
||||
1 0000dd22 _Log
|
||||
1 0000dd2a _powK
|
||||
1 0000dd3c _ADDR_FOR_ALL
|
||||
1 0000dd3d _CNTRL_ADDR
|
||||
1 0000dd3e _cntr_addr_c
|
||||
1 0000dd3f _cntr_addr_c_all
|
||||
1 0000ddbc __unlock
|
||||
1 0000ddbe __lock
|
||||
1 0000ddc0 _zer_filter
|
||||
1 0000de08 _din_count
|
||||
1 0000de28 _CpuTimer0
|
||||
1 0000de30 _CpuTimer1
|
||||
1 0000de38 _CpuTimer2
|
||||
1 0000de40 _RS_Len
|
||||
1 0000de86 _ADC_table
|
||||
1 0000dea2 _prev_ok
|
||||
1 0000dec0 _def_cal
|
||||
1 0000df00 _ccc
|
||||
1 0000df1c _sens_pair
|
||||
1 0000df34 _COUNT_ONE_CANAL
|
||||
1 0000df35 _COUNT_DISCHARGE
|
||||
1 0000df36 _COUNT_TRANSICIA
|
||||
1 0000df37 _FILTER_CLIP
|
||||
1 0000df3c _WAKE
|
||||
1 0000df3e _WAKE_TIME
|
||||
1 0000df40 _sens_type
|
||||
1 0000df58 _CanTimeOutErrorTR
|
||||
1 0000df59 _wait
|
||||
1 0000df62 _ErrorCount
|
||||
1 0000df64 _MessageReceivedCount
|
||||
1 0000df66 _MessageTransivedCount
|
||||
1 0000df68 _TestMbox1
|
||||
1 0000df6a _TestMbox2
|
||||
1 0000df6c _TestMbox3
|
||||
1 0000df70 _Mode
|
||||
1 0000df71 _Desk
|
||||
1 0000df72 _TermoAD
|
||||
1 0000df73 _TermoRS
|
||||
1 0000df74 _TermoSW
|
||||
1 0000df75 _Kurrent
|
||||
1 0000df76 _Kalibro
|
||||
1 0000df77 _Owen
|
||||
1 0000df78 _INcount0
|
||||
1 0000df79 _INcount1
|
||||
1 0000df7a _MUX_GPIO32
|
||||
1 0000df7b _MUX_GPIO48
|
||||
1 0000df7c _DIR_GPIO32
|
||||
1 0000df7d _DIR_GPIO48
|
||||
1 0000df7e _DigErr
|
||||
1 0000df80 _period_dac
|
||||
1 0000df81 _time_dac
|
||||
1 0000df86 _WAKEpowse
|
||||
1 0000df88 _IMPowse
|
||||
1 0000df8e _lev_quadr
|
||||
1 0000df9a _isNumb
|
||||
1 0000df9b _quaLamp
|
||||
1 0000dfa0 _isMask
|
||||
1 0000dfa2 _Lonely
|
||||
1 0000dfa4 _ext_diag
|
||||
1 0000dfac _ext_temp
|
||||
1 0000dfb4 _zer_count
|
||||
1 0000dfbc __cleanup_ptr
|
||||
1 0000dfbe __dtors_ptr
|
||||
1 0000dfc0 _err_count
|
||||
1 0000dfc6 _lev_count
|
||||
1 0000dfcc _readr
|
||||
1 0000dfdb _low_count
|
||||
1 00200000 _logs_block
|
||||
1 0033fff8 _CsmPwl
|
||||
1 00380090 _PartIdRegs
|
||||
abs 000003f0 __STACK_SIZE
|
||||
abs ffffffff ___TI_pprof_out_hndl
|
||||
abs ffffffff ___TI_prof_data_size
|
||||
abs ffffffff ___TI_prof_data_start
|
||||
abs ffffffff ___binit__
|
||||
abs ffffffff ___c_args__
|
||||
abs ffffffff ___pinit__
|
||||
abs ffffffff binit
|
||||
abs ffffffff pinit
|
||||
page address name
|
||||
---- ------- ----
|
||||
0 00008000 .text
|
||||
0 00008000 _Current_count
|
||||
0 00008000 ___text__
|
||||
0 0000825a _adc_isr
|
||||
0 00008437 _Temper_count
|
||||
0 000085de _get_Buttons
|
||||
0 00008781 _main
|
||||
0 00008920 _setup_adc
|
||||
0 00008aad _cpu_timer1_isr_SENS
|
||||
0 00008c31 _Load_runner
|
||||
0 00008d8d _RS_RX_Handler
|
||||
0 00008edf _cpu_timer1_isr_PULT
|
||||
0 00009022 _Init_sensors
|
||||
0 0000914b _SPISE2P_DRV_tick
|
||||
0 0000926d _get_Mode
|
||||
0 00009382 _kanal_Send
|
||||
0 0000948d _Power_count
|
||||
0 00009586 _Default_params
|
||||
0 00009672 _setup_uart
|
||||
0 00009740 _ump_log_read
|
||||
0 000097f3 _calc_sensor_koef
|
||||
0 000098a1 _InitCan
|
||||
0 0000994d _UMP_CAN_service
|
||||
0 000099f5 _init
|
||||
0 000099f6 _ReceiveCommandModbus3
|
||||
0 00009a93 _select_tpl_canal
|
||||
0 00009b2f _upload
|
||||
0 00009bc6 _Init_packMask
|
||||
0 00009e00 FS$$DIV
|
||||
0 00009e88 _InitPeripheralClocks
|
||||
0 00009f0d _extendbios
|
||||
0 00009f91 _run
|
||||
0 00009f92 _ump_rtu_encode
|
||||
0 0000a015 _InitPll
|
||||
0 0000a097 _peek
|
||||
0 0000a10f _Handlai
|
||||
0 0000a181 _ump_validate
|
||||
0 0000a1f2 _ump_log_write
|
||||
0 0000a262 _RS_TX_Handler
|
||||
0 0000a2d0 _Load_protection_prepare
|
||||
0 0000a339 _Init_sensors_more
|
||||
0 0000a39b _InitXintf16Gpio
|
||||
0 0000a3f4 _get_command
|
||||
0 0000a44b _ReceiveCommandModbus6
|
||||
0 0000a537 _ump_prepare
|
||||
0 0000a5d0 _RS_Send
|
||||
0 0000a61b _CANa_handler
|
||||
0 0000a665 _load
|
||||
0 0000a6ae _CAN_send
|
||||
0 0000a6f6 _initload
|
||||
0 0000a73d _RSA_RX_Handler
|
||||
0 0000a783 _RSA_TX_Handler
|
||||
0 0000a7c9 _RSB_RX_Handler
|
||||
0 0000a80f _RSB_TX_Handler
|
||||
0 0000a855 _c_int00
|
||||
0 0000a89b _ump_log_can
|
||||
0 0000a91e _Seeprom_read
|
||||
0 0000a95f _Seeprom_write
|
||||
0 0000a9a0 _setup_arr_cmd_length
|
||||
0 0000a9e1 _Load_params
|
||||
0 0000aa21 _init_zone7
|
||||
0 0000aa5f _InitCpuTimers
|
||||
0 0000aa9a _Load_voltage_can
|
||||
0 0000aad5 _ump_can_fragment
|
||||
0 0000ab10 _poke
|
||||
0 0000ab4a _cpu_timer2_isr
|
||||
0 0000ab83 _SendCommandModbus4
|
||||
0 0000abbb _ump_tms28335_fragment
|
||||
0 0000abf3 _RS_BSend
|
||||
0 0000ac2a _ReceiveAnswerModbus4
|
||||
0 0000ac61 _Answer
|
||||
0 0000acfa _SPISE2P_DRV_init
|
||||
0 0000ad2c _unsetup_leds_line
|
||||
0 0000ad5e _dSEND
|
||||
0 0000ad8f _RS_FifoTick1ms
|
||||
0 0000adbe _filterbat
|
||||
0 0000adec _ump_log_io
|
||||
0 0000ae1a _RS_SetLineMode
|
||||
0 0000ae47 _timer_Init
|
||||
0 0000ae74 _get_crc_16b
|
||||
0 0000aea0 _CANa_reset_err
|
||||
0 0000aecb L$$DIV
|
||||
0 0000aeda L$$MOD
|
||||
0 0000aee8 UL$$DIV
|
||||
0 0000aeef UL$$MOD
|
||||
0 0000aef5 _InitSeeprom
|
||||
0 0000af1e _get_crc16
|
||||
0 0000af45 _RS_SetLineSpeed
|
||||
0 0000af6b _Save_params
|
||||
0 0000afb3 _select_tpl_255
|
||||
0 0000afd7 _setup_leds_line
|
||||
0 0000aff9 _ConfigCpuTimer
|
||||
0 0000b01a _Setup_DAC_time
|
||||
0 0000b03a _sqrt
|
||||
0 0000b05a _InitPieCtrl
|
||||
0 0000b079 _reset_errs
|
||||
0 0000b098 _Load_control_init
|
||||
0 0000b0b6 _SENDBIT
|
||||
0 0000b0d4 _ump_log_init
|
||||
0 0000b0f1 _ump_tms28335_prepare
|
||||
0 0000b10e _what_is
|
||||
0 0000b12b _Init_DAC
|
||||
0 0000b147 _im_calc
|
||||
0 0000b163 _ump_crc
|
||||
0 0000b17f _ump_tms28335_capture
|
||||
0 0000b19b _ADCINT_ISR
|
||||
0 0000b1b6 _DINTCH1_ISR
|
||||
0 0000b1d1 _DINTCH2_ISR
|
||||
0 0000b1ec _DINTCH3_ISR
|
||||
0 0000b207 _DINTCH4_ISR
|
||||
0 0000b222 _DINTCH5_ISR
|
||||
0 0000b23d _DINTCH6_ISR
|
||||
0 0000b258 _ECAN0INTA_ISR
|
||||
0 0000b273 _ECAN0INTB_ISR
|
||||
0 0000b28e _ECAN1INTA_ISR
|
||||
0 0000b2a9 _ECAN1INTB_ISR
|
||||
0 0000b2c4 _ECAP1_INT_ISR
|
||||
0 0000b2df _ECAP2_INT_ISR
|
||||
0 0000b2fa _ECAP3_INT_ISR
|
||||
0 0000b315 _ECAP4_INT_ISR
|
||||
0 0000b330 _ECAP5_INT_ISR
|
||||
0 0000b34b _ECAP6_INT_ISR
|
||||
0 0000b366 _EPWM1_INT_ISR
|
||||
0 0000b381 _EPWM1_TZINT_ISR
|
||||
0 0000b39c _EPWM2_INT_ISR
|
||||
0 0000b3b7 _EPWM2_TZINT_ISR
|
||||
0 0000b3d2 _EPWM3_INT_ISR
|
||||
0 0000b3ed _EPWM3_TZINT_ISR
|
||||
0 0000b408 _EPWM4_INT_ISR
|
||||
0 0000b423 _EPWM4_TZINT_ISR
|
||||
0 0000b43e _EPWM5_INT_ISR
|
||||
0 0000b459 _EPWM5_TZINT_ISR
|
||||
0 0000b474 _EPWM6_INT_ISR
|
||||
0 0000b48f _EPWM6_TZINT_ISR
|
||||
0 0000b4aa _EQEP1_INT_ISR
|
||||
0 0000b4c5 _EQEP2_INT_ISR
|
||||
0 0000b4e0 _I2CINT1A_ISR
|
||||
0 0000b4fb _I2CINT2A_ISR
|
||||
0 0000b516 _LUF_ISR
|
||||
0 0000b531 _LVF_ISR
|
||||
0 0000b54c _MRINTA_ISR
|
||||
0 0000b567 _MRINTB_ISR
|
||||
0 0000b582 _MXINTA_ISR
|
||||
0 0000b59d _MXINTB_ISR
|
||||
0 0000b5b8 _SCIRXINTA_ISR
|
||||
0 0000b5d3 _SCIRXINTB_ISR
|
||||
0 0000b5ee _SCIRXINTC_ISR
|
||||
0 0000b609 _SCITXINTA_ISR
|
||||
0 0000b624 _SCITXINTB_ISR
|
||||
0 0000b63f _SCITXINTC_ISR
|
||||
0 0000b65a _SEQ1INT_ISR
|
||||
0 0000b675 _SEQ2INT_ISR
|
||||
0 0000b690 _SPIRXINTA_ISR
|
||||
0 0000b6ab _SPITXINTA_ISR
|
||||
0 0000b6c6 _TINT0_ISR
|
||||
0 0000b6e1 _WAKEINT_ISR
|
||||
0 0000b6fc _XINT3_ISR
|
||||
0 0000b717 _XINT4_ISR
|
||||
0 0000b732 _XINT5_ISR
|
||||
0 0000b74d _XINT6_ISR
|
||||
0 0000b768 _XINT7_ISR
|
||||
0 0000b783 __args_main
|
||||
0 0000b79e _RS_SetBitMode
|
||||
0 0000b7b8 _create_uart_vars
|
||||
0 0000b7d2 _InitAdc
|
||||
0 0000b7eb _XINT1_ISR
|
||||
0 0000b804 _XINT2_ISR
|
||||
0 0000b81d C$$EXIT
|
||||
0 0000b81d _abort
|
||||
0 0000b81f _exit
|
||||
0 0000b836 _prolog_c28x_1
|
||||
0 0000b83a _prolog_c28x_2
|
||||
0 0000b842 _prolog_c28x_3
|
||||
0 0000b84f _RESET
|
||||
0 0000b867 _ump_log_tick
|
||||
0 0000b87f _clear_mem
|
||||
0 0000b896 _ServiceDog
|
||||
0 0000b8c0 _er_anal
|
||||
0 0000b8e8 _RS_FifoWait
|
||||
0 0000b90e _get_crc_16
|
||||
0 0000b920 _pause_us
|
||||
0 0000b940 _DATALOG_ISR
|
||||
0 0000b94d _INT13_ISR
|
||||
0 0000b95a _INT14_ISR
|
||||
0 0000b967 _InitPieVectTable
|
||||
0 0000b974 _RTOSINT_ISR
|
||||
0 0000b981 _epilog_c28x_1
|
||||
0 0000b985 _epilog_c28x_2
|
||||
0 0000b98d _EMUINT_ISR
|
||||
0 0000b998 _ILLEGAL_ISR
|
||||
0 0000b9a3 _NMI_ISR
|
||||
0 0000b9ae _USER10_ISR
|
||||
0 0000b9b9 _USER11_ISR
|
||||
0 0000b9c4 _USER12_ISR
|
||||
0 0000b9cf _USER1_ISR
|
||||
0 0000b9da _USER2_ISR
|
||||
0 0000b9e5 _USER3_ISR
|
||||
0 0000b9f0 _USER4_ISR
|
||||
0 0000b9fb _USER5_ISR
|
||||
0 0000ba06 _USER6_ISR
|
||||
0 0000ba11 _USER7_ISR
|
||||
0 0000ba1c _USER8_ISR
|
||||
0 0000ba27 _USER9_ISR
|
||||
0 0000ba32 _ump_log_rs
|
||||
0 0000ba3d U$$DIV
|
||||
0 0000ba42 U$$MOD
|
||||
0 0000ba48 _INT_NOTUSED_ISR
|
||||
0 0000ba52 _PIE_RESERVED
|
||||
0 0000ba5c _rsvd_ISR
|
||||
0 0000ba66 _EnableInterrupts
|
||||
0 0000ba6f _InitSysCtrl
|
||||
0 0000ba78 __register_unlock
|
||||
0 0000ba7c __register_lock
|
||||
0 0000ba80 __nop
|
||||
0 0000ba81 _DisableDog
|
||||
0 0000ba89 _memset
|
||||
0 0000ba90 _SPISE2P_DRV_csclr
|
||||
0 0000ba95 _SPISE2P_DRV_csset
|
||||
0 0000ba9a _set_cntrl_addr
|
||||
0 0000ba9f _DSP28x_usDelay
|
||||
0 0000baa6 _tflash
|
||||
0 0000baa7 ___etext__
|
||||
0 0000baa7 etext
|
||||
0 0000c000 _RamfuncsLoadEnd
|
||||
0 0000c000 _RamfuncsLoadStart
|
||||
0 0000c000 _RamfuncsRunStart
|
||||
0 0000c000 ___cinit__
|
||||
0 0000c000 cinit
|
||||
0 0000c274 _PieVectTableInit
|
||||
0 0000c39c _ADDR_ANSWER
|
||||
0 0000c39d _ADDR_TERMINAL
|
||||
0 0000c39e _CNTRL_ADDR_UNIVERSAL
|
||||
0 00380080 _ADC_cal
|
||||
1 00000400 __stack
|
||||
1 000007f0 __STACK_END
|
||||
1 00000880 _DevEmuRegs
|
||||
1 00000a80 _FlashRegs
|
||||
1 00000ae0 _CsmRegs
|
||||
1 00000b00 _AdcMirror
|
||||
1 00000b20 _XintfRegs
|
||||
1 00000c00 _CpuTimer0Regs
|
||||
1 00000c08 _CpuTimer1Regs
|
||||
1 00000c10 _CpuTimer2Regs
|
||||
1 00000ce0 _PieCtrlRegs
|
||||
1 00000d00 _PieVectTable
|
||||
1 00001000 _DmaRegs
|
||||
1 00005000 _McbspaRegs
|
||||
1 00005040 _McbspbRegs
|
||||
1 00006000 _ECanaRegs
|
||||
1 00006040 _ECanaLAMRegs
|
||||
1 00006080 _ECanaMOTSRegs
|
||||
1 000060c0 _ECanaMOTORegs
|
||||
1 00006100 _ECanaMboxes
|
||||
1 00006200 _ECanbRegs
|
||||
1 00006240 _ECanbLAMRegs
|
||||
1 00006280 _ECanbMOTSRegs
|
||||
1 000062c0 _ECanbMOTORegs
|
||||
1 00006300 _ECanbMboxes
|
||||
1 00006800 _EPwm1Regs
|
||||
1 00006840 _EPwm2Regs
|
||||
1 00006880 _EPwm3Regs
|
||||
1 000068c0 _EPwm4Regs
|
||||
1 00006900 _EPwm5Regs
|
||||
1 00006940 _EPwm6Regs
|
||||
1 00006a00 _ECap1Regs
|
||||
1 00006a20 _ECap2Regs
|
||||
1 00006a40 _ECap3Regs
|
||||
1 00006a60 _ECap4Regs
|
||||
1 00006a80 _ECap5Regs
|
||||
1 00006aa0 _ECap6Regs
|
||||
1 00006b00 _EQep1Regs
|
||||
1 00006b40 _EQep2Regs
|
||||
1 00006f80 _GpioCtrlRegs
|
||||
1 00006fc0 _GpioDataRegs
|
||||
1 00006fe0 _GpioIntRegs
|
||||
1 00007010 _SysCtrlRegs
|
||||
1 00007040 _SpiaRegs
|
||||
1 00007050 _SciaRegs
|
||||
1 00007070 _XIntruptRegs
|
||||
1 00007100 _AdcRegs
|
||||
1 00007750 _ScibRegs
|
||||
1 00007770 _ScicRegs
|
||||
1 00007900 _I2caRegs
|
||||
1 0000d040 _rs_a
|
||||
1 0000d3c0 _rs_b
|
||||
1 0000d70a _din_count
|
||||
1 0000d72a _powK
|
||||
1 0000d73c _adc_table_lem
|
||||
1 0000d740 _adc_filter
|
||||
1 0000d8f0 _Maska
|
||||
1 0000d900 _out_filter
|
||||
1 0000dab0 _digits
|
||||
1 0000dac0 _crc_16_tab
|
||||
1 0000dbc0 _modbus
|
||||
1 0000dc41 _flag_DEBUG
|
||||
1 0000dc42 _sens_count
|
||||
1 0000dc7a _SYSCLKOUT
|
||||
1 0000dc7c _LSPCLK
|
||||
1 0000dc7e _HSPCLK
|
||||
1 0000dc80 _param
|
||||
1 0000dd02 _CanPowse
|
||||
1 0000dd03 _CanGO
|
||||
1 0000dd04 _READY
|
||||
1 0000dd05 _TPL_CANS
|
||||
1 0000dd06 _tpl_cans
|
||||
1 0000dd07 _cal_addr
|
||||
1 0000dd08 _pow_addr
|
||||
1 0000dd09 _period_ready
|
||||
1 0000dd0a _period_blink
|
||||
1 0000dd0b _chk
|
||||
1 0000dd0c _sig
|
||||
1 0000dd0d _time_1_5sec
|
||||
1 0000dd0e _time_5msec
|
||||
1 0000dd0f _time_3sec
|
||||
1 0000dd10 _time_5sec
|
||||
1 0000dd11 _Caliber_time
|
||||
1 0000dd12 _Curr_Edge
|
||||
1 0000dd13 _okay
|
||||
1 0000dd1e _K100
|
||||
1 0000dd20 _K_50
|
||||
1 0000dd22 _K_T1
|
||||
1 0000dd24 _K_T2
|
||||
1 0000dd28 _def_FILTERBAT
|
||||
1 0000dd3a _err_count
|
||||
1 0000ddbc _ADDR_FOR_ALL
|
||||
1 0000ddbd _CNTRL_ADDR
|
||||
1 0000ddbe _cntr_addr_c
|
||||
1 0000ddbf _cntr_addr_c_all
|
||||
1 0000de3c __unlock
|
||||
1 0000de3e __lock
|
||||
1 0000de40 _zer_filter
|
||||
1 0000de88 _no_write
|
||||
1 0000de89 _never_write
|
||||
1 0000de8a _flog
|
||||
1 0000dea0 _Log
|
||||
1 0000dea8 _period_dac
|
||||
1 0000dea9 _time_dac
|
||||
1 0000deb8 _WAKEpowse
|
||||
1 0000deba _IMPowse
|
||||
1 0000dec0 _RS_Len
|
||||
1 0000df06 _ADC_table
|
||||
1 0000df22 _prev_ok
|
||||
1 0000df40 _def_cal
|
||||
1 0000df80 _ccc
|
||||
1 0000df9c _CpuTimer0
|
||||
1 0000dfa4 _CpuTimer1
|
||||
1 0000dfac _CpuTimer2
|
||||
1 0000dfb4 _COUNT_ONE_CANAL
|
||||
1 0000dfb5 _COUNT_DISCHARGE
|
||||
1 0000dfb6 _COUNT_TRANSICIA
|
||||
1 0000dfb7 _FILTER_CLIP
|
||||
1 0000dfbc _WAKE
|
||||
1 0000dfbe _WAKE_TIME
|
||||
1 0000dfc0 _sens_pair
|
||||
1 0000dfd8 _sens_type
|
||||
1 0000dff0 _Mode
|
||||
1 0000dff1 _Desk
|
||||
1 0000dff2 _TermoAD
|
||||
1 0000dff3 _TermoRS
|
||||
1 0000dff4 _TermoSW
|
||||
1 0000dff5 _Kurrent
|
||||
1 0000dff6 _Kalibro
|
||||
1 0000dff7 _Owen
|
||||
1 0000dff8 _INcount0
|
||||
1 0000dff9 _INcount1
|
||||
1 0000dffa _MUX_GPIO32
|
||||
1 0000dffb _MUX_GPIO48
|
||||
1 0000dffc _DIR_GPIO32
|
||||
1 0000dffd _DIR_GPIO48
|
||||
1 0000dffe _DigErr
|
||||
1 0000e000 _CanTimeOutErrorTR
|
||||
1 0000e001 _wait
|
||||
1 0000e00a _ErrorCount
|
||||
1 0000e00c _MessageReceivedCount
|
||||
1 0000e00e _MessageTransivedCount
|
||||
1 0000e010 _TestMbox1
|
||||
1 0000e012 _TestMbox2
|
||||
1 0000e014 _TestMbox3
|
||||
1 0000e018 _lev_quadr
|
||||
1 0000e024 _isNumb
|
||||
1 0000e025 _quaLamp
|
||||
1 0000e02a _isMask
|
||||
1 0000e02c _Lonely
|
||||
1 0000e02e _ext_diag
|
||||
1 0000e036 _ext_temp
|
||||
1 0000e040 _zer_count
|
||||
1 0000e048 _lev_count
|
||||
1 0000e04e _readr
|
||||
1 0000e053 _errno
|
||||
1 0000e054 __cleanup_ptr
|
||||
1 0000e056 __dtors_ptr
|
||||
1 0000e05a _low_count
|
||||
1 00200000 _logs_block
|
||||
1 0033fff8 _CsmPwl
|
||||
1 00380090 _PartIdRegs
|
||||
abs 000003f0 __STACK_SIZE
|
||||
abs 00003f7e _EEPROM_PARAMS_START_WORD
|
||||
abs 00007efc _EEPROM_FIRMWARE_LIMIT_BYTES
|
||||
abs 00007efc _EEPROM_PARAMS_START_BYTE
|
||||
abs 00007ffe _EEPROM_PARAMS_END_BYTE
|
||||
abs 00008000 _EEPROM_TOTAL_BYTES
|
||||
abs ffffffff ___TI_pprof_out_hndl
|
||||
abs ffffffff ___TI_prof_data_size
|
||||
abs ffffffff ___TI_prof_data_start
|
||||
abs ffffffff ___binit__
|
||||
abs ffffffff ___c_args__
|
||||
abs ffffffff ___pinit__
|
||||
abs ffffffff binit
|
||||
abs ffffffff pinit
|
||||
|
||||
[419 symbols]
|
||||
[409 symbols]
|
||||
|
||||
@@ -76,8 +76,8 @@
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.750562333" name="Processor version (--silicon_version, -v)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.28" valueType="enumerated"/>
|
||||
<!-- Настройка option: name=Specify floating point support (- -float_support), superClass=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT, value=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.fpu32. -->
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.1723304888" name="Specify floating point support (--float_support)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.fpu32" valueType="enumerated"/>
|
||||
<!-- Настройка option: name=Optimization level (- -opt_level, -O), superClass=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL, value=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.2. -->
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.1217592973" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.2" valueType="enumerated"/>
|
||||
<!-- Уровень оптимизации 3 согласует Debug с Release и уменьшает загрузочный образ до границы AT25256B; приоритет размера задаётся существующим opt_for_speed=0. -->
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.1217592973" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.3" valueType="enumerated"/>
|
||||
<!-- Настройка option: name=Place each function in a separate subsection (- -gen_func_subsections, -mo), superClass=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS, value=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS.on. -->
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS.eeprom.40" name="Place each function in a separate subsection (--gen_func_subsections, -mo)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS.on" valueType="enumerated"/>
|
||||
<!-- Настройка option: name=Speed vs. size trade-offs (- -opt_for_speed, -mf), superClass=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED, value=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.0. -->
|
||||
@@ -495,6 +495,8 @@
|
||||
<!-- Настройка option: name=Optimization level (- -opt_level, -O), superClass=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.release, value=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.3. -->
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.release.1938236953" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.release" useByScannerDiscovery="false" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.3" valueType="enumerated"/>
|
||||
<!-- Настройка option: superClass=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS, value=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS.on. -->
|
||||
<!-- Приоритет размера 0 в Release совпадает с Debug и проверенной сборкой; загрузочный образ не должен занимать область параметров AT25256B. -->
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.eeprom.release.167" name="Speed vs. size trade-offs (--opt_for_speed, -mf)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.0" valueType="enumerated"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS.eeprom.194" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.GEN_FUNC_SUBSECTIONS.on" valueType="enumerated"/>
|
||||
<!-- Настройка option: name=Mode, superClass=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE, value=com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE.manual. -->
|
||||
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE.416134349" name="Mode" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE" useByScannerDiscovery="false" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE.manual" valueType="enumerated"/>
|
||||
|
||||
@@ -20,6 +20,10 @@ Debug и Release вызывают prepare_identity.py. Он читает ном
|
||||
## Зависимости и настройки CCS
|
||||
|
||||
Для текущих конфигураций нужны Python, Git и TI C2000 22.6 LTS.
|
||||
Debug и Release используют оптимизацию уровня 3 и приоритет размера
|
||||
`--opt_for_speed=0`: это необходимо для размещения образа с настраиваемым
|
||||
лимитом попыток в AT25256B. Проверенная локальная сборка находится в
|
||||
`Bin/AttemptLimit`; перед загрузкой применяется SCI8-проверка границы EEPROM.
|
||||
Общая реализация УМП и порт TMS320F28335 подключаются из
|
||||
../newProject/SETGUI/third_party/templates/c/set-protocol относительно корня
|
||||
репозитория. shared_ump.c включает эту реализацию и модуль паспорта.
|
||||
|
||||
@@ -153,7 +153,7 @@ def audit(path, text):
|
||||
continue
|
||||
# Задаёт count + по выражению справа; значение используется последующими операциями.
|
||||
count += 1
|
||||
# Проверяет условие if RUSSIAN.search(lines[i]) or (i and RUSSIAN.search(lines[i-1])) перед выполнением следующего блока.
|
||||
# Эвристика ищет кириллицу в самой строке или перед ней; русский строковый литерал тоже может дать совпадение. Это проверка наличия текста рядом, а не качества и достоверности комментария.
|
||||
if RUSSIAN.search(lines[i]) or (i and RUSSIAN.search(lines[i-1])):
|
||||
# Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется.
|
||||
continue
|
||||
@@ -225,10 +225,14 @@ def main():
|
||||
"",
|
||||
# Продолжает текущий вызов, список или выражение: "Проверка относится к редактируемым исходникам C/H, ASM, CMD, тестовым INC и Python.",; порядок аргументов сохраняется.
|
||||
"Проверка относится к редактируемым исходникам C/H, ASM, CMD, тестовым INC и Python.",
|
||||
# Продолжает текущий вызов, список или выражение: "Каждая непустая строка кода имеет русское пояснение перед ней или на ней. Пустые строки,",; порядок аргументов сохраняется.
|
||||
"Каждая непустая строка кода имеет русское пояснение перед ней или на ней. Пустые строки,",
|
||||
# Продолжает текущий вызов, список или выражение: "текст существующих комментариев и содержимое многострочных строк данных не считаются кодом.",; порядок аргументов сохраняется.
|
||||
"текст существующих комментариев и содержимое многострочных строк данных не считаются кодом.",
|
||||
# Описывает фактический критерий покрытия, не выдавая наличие кириллицы за оценку качества пояснения.
|
||||
"Для каждой непустой строки кода проверяется русский текст на ней или непосредственно перед ней.",
|
||||
# Уточняет исключения счётчика, чтобы комментарии и многострочные данные не завышали объём кода.
|
||||
"Пустые строки, текст комментариев и содержимое многострочных строк данных не считаются кодом.",
|
||||
# Предупреждает о главном ограничении: шаблонный текст или русский строковый литерал тоже проходит эвристику.
|
||||
"Качество и достоверность пояснений этой проверкой не устанавливаются; совпадение возможно и в строковом литерале.",
|
||||
# Отделяет исходники репозитория от подключаемого и генерируемого кода, отсутствующего в Git-индексе.
|
||||
"Охват: исходники из Git-индекса. Сгенерированные файлы и подключённые соседние библиотеки проверяются отдельно.",
|
||||
# Продолжает текущий вызов, список или выражение: "Исходные уведомления TI сохранены. JSON-паспорта, индексы IDE, таблицы XLS и двоичные",; порядок аргументов сохраняется.
|
||||
"Исходные уведомления TI сохранены. JSON-паспорта, индексы IDE, таблицы XLS и двоичные",
|
||||
# Продолжает текущий вызов, список или выражение: "результаты сборки не допускают исходных комментариев; их назначение описано в документации.",; порядок аргументов сохраняется.
|
||||
@@ -239,8 +243,8 @@ def main():
|
||||
f"UTF-8 проверен в {checked} текстовых файлах. Строк кода: {sum(r[1] for r in rows)}.",
|
||||
# Продолжает текущий вызов, список или выражение: "",; порядок аргументов сохраняется.
|
||||
"",
|
||||
# Продолжает текущий вызов, список или выражение: "| Файл | Строк кода | С русским пояснением |",; порядок аргументов сохраняется.
|
||||
"| Файл | Строк кода | С русским пояснением |",
|
||||
# Подписывает колонку строго по измеряемому признаку, не утверждая содержательность найденного текста.
|
||||
"| Файл | Строк кода | С русским текстом рядом |",
|
||||
# Продолжает текущий вызов, список или выражение: "| --- | ---: | ---: |",; порядок аргументов сохраняется.
|
||||
"| --- | ---: | ---: |",
|
||||
# Продолжает текущий вызов, список или выражение: ]; порядок аргументов сохраняется.
|
||||
|
||||
18
tests/eeprom_profiles/check_publication.py
Normal file
18
tests/eeprom_profiles/check_publication.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import re # Разбирает инструкции текстового дизассемблера TI C2000.
|
||||
import sys # Получает путь к проверяемому листингу OUT.
|
||||
from pathlib import Path # Читает сохранённый результат dis2000.
|
||||
text = Path(sys.argv[1]).read_text(encoding="utf-8-sig") # Использует UTF-8-вывод дизассемблера.
|
||||
for name in ("Seeprom_read", "Seeprom_write"): # Проверяет оба пути публикации задания Timer2.
|
||||
match = re.search(r"^\w+\s+_" + name + r":$", text, re.M) # Находит начало настоящей функции в готовом OUT.
|
||||
assert match, "Missing function: " + name # Не допускает успешной проверки неполного листинга.
|
||||
body = text[match.end():] # Отделяет инструкции от заголовка функции.
|
||||
end = re.search(r"^\w+\s+_\w+:$", body, re.M) # Ограничивает анализ следующим именованным символом.
|
||||
body = body[:end.start()] if end else body # Не учитывает записи из другой функции.
|
||||
request = re.search(r"\bOR\s+\*\+XAR\d\[2\], #0x000[12]", body) # Находит установку запроса чтения 2 или записи 1 в csr.
|
||||
assert request, "Missing request publication: " + name # Требует известную форму TI O3, иначе проверку нужно пересмотреть.
|
||||
stores = re.findall(r"\bMOVL\s+\*\+XAR(\d)\[(0|2|4)\],", body[:request.start()]) # Собирает только записи, выполненные до публикации запроса.
|
||||
groups = {} # Группирует смещения полей по базовому регистру дескриптора.
|
||||
for register, offset in stores: # Обрабатывает каждую инструкцию записи 32-битного поля.
|
||||
groups.setdefault(register, set()).add(int(offset)) # Отмечает указатель 0, длину 2 и адрес 4 в словах C28x.
|
||||
assert any({0, 2, 4} <= offsets for offsets in groups.values()), "Descriptor stores follow request/wait: " + name # Отвергает установленный дефект с отложенными до выхода из ожидания параметрами.
|
||||
print("PASS TI O3 publication: " + name) # Подтверждает порядок инструкций конкретной функции в данном OUT.
|
||||
@@ -206,6 +206,38 @@ int main(void) {
|
||||
request(&rs, 6, 0x7C, 9);
|
||||
/* Вызывает assert с аргументами (rs.buffer[2] == 2 && modbus[0x7C] == 0x7C) в текущей последовательности операций. */
|
||||
assert(rs.buffer[2] == 2 && modbus[0x7C] == 0x7C);
|
||||
/* Запись лимита через штатный FC06 возвращает обычное подтверждение для продолжения обмена GUI. */
|
||||
request(&rs, 6, 0x7D, 5);
|
||||
/* Проверяет подтверждение записи пяти попыток в технологическом регистре. */
|
||||
assert(sent == 10 && rs.buffer[1] == 6 && modbus[0x7D] == 5);
|
||||
/* Чтение обратно возвращает заданный лимит независимо от текущего счётчика START. */
|
||||
request(&rs, 3, 0x7D, 1);
|
||||
/* Проверяет значение 5 как 16-битное слово с нулевым старшим байтом. */
|
||||
assert(rs.buffer[3] == 0 && rs.buffer[4] == 5);
|
||||
/* Нулевая настройка отклоняется без изменения предыдущего лимита. */
|
||||
request(&rs, 6, 0x7D, 0);
|
||||
/* Код 3 обозначает недопустимое значение; прежний лимит остаётся в RAM. */
|
||||
assert(sent == 5 && rs.buffer[1] == 0x86 && rs.buffer[2] == 3 && modbus[0x7D] == 5);
|
||||
/* Верхняя граница проходит проверку без ограничения знаковым представлением int C28x. */
|
||||
request(&rs, 6, 0x7D, 65535U);
|
||||
/* Проверяет 16-битный рисунок максимального значения в записанном регистре. */
|
||||
assert(sent == 10 && (uint16_t)modbus[0x7D] == 65535U);
|
||||
/* Каждый штатный CAN-слот принимает ненулевую настройку и игнорирует ноль. */
|
||||
for (unsigned slot = 0; slot < 3; slot++) {
|
||||
/* Сдвигает начало кадра так, чтобы выбранный маской слот адресовал 0x7D. */
|
||||
native_can_slots(0x7DU - slot, 0x8000U >> slot, 7, 7, 7);
|
||||
/* Проверяет принятие лимита без изменения защищённого статуса 0x7C. */
|
||||
assert(modbus[0x7D] == 7 && modbus[0x7C] == 0x7C);
|
||||
/* Ноль в том же слоте не заменяет принятую настройку семи пусков. */
|
||||
native_can_slots(0x7DU - slot, 0x8000U >> slot, 0, 0, 0);
|
||||
/* Проверяет сохранение прежнего лимита после недопустимого CAN-значения. */
|
||||
assert(modbus[0x7D] == 7);
|
||||
/* Проверяет 65535 во всех позициях штатного кадра CAN. */
|
||||
native_can_slots(0x7DU - slot, 0x8000U >> slot, 65535U, 65535U, 65535U);
|
||||
/* Сохраняется весь 16-битный рисунок максимального числа пусков. */
|
||||
assert((uint16_t)modbus[0x7D] == 65535U);
|
||||
/* Завершает проверку каждого штатного CAN-слота. */
|
||||
}
|
||||
/* Existing UMP and protection routing must still work. */
|
||||
/* Вызывает request с аргументами (&rs, 3, 0x1000, 2) в текущей последовательности операций. */
|
||||
request(&rs, 3, 0x1000, 2);
|
||||
@@ -291,8 +323,12 @@ int main(void) {
|
||||
assert(rs.buffer[2] == 3 && modbus[0x52] == 60000);
|
||||
/* Вызывает request с аргументами (&rs, 6, 0x507D, 9) в текущей последовательности операций. */
|
||||
request(&rs, 6, 0x507D, 9);
|
||||
/* Вызывает assert с аргументами (rs.buffer[2] == 2 && modbus[0x7D] == 0x7D) в текущей последовательности операций. */
|
||||
assert(rs.buffer[2] == 2 && modbus[0x7D] == 0x7D);
|
||||
/* GAS-псевдоним возвращает подтверждение записи девяти попыток с исходным адресом запроса. */
|
||||
assert(sent == 8 && rs.buffer[1] == 6 && modbus[0x7D] == 9);
|
||||
/* Ноль отклоняется и через GAS, не перезаписывая принятый лимит. */
|
||||
request(&rs, 6, 0x507D, 0);
|
||||
/* Код 3 отличает недопустимое значение от недоступного адреса; лимит остаётся равным девяти. */
|
||||
assert(sent == 5 && rs.buffer[2] == 3 && modbus[0x7D] == 9);
|
||||
/* Вызывает request с аргументами (&rs, 6, 0x507F, 0x80) в текущей последовательности операций. */
|
||||
request(&rs, 6, 0x507F, 0x80);
|
||||
/* Вызывает assert с аргументами (sent == 8 && rs.buffer[2] == 0x50 && rs.buffer[3] == 0x7F) в текущей последовательности операций. */
|
||||
@@ -336,6 +372,14 @@ int main(void) {
|
||||
can_request(6, 0x507C, 9);
|
||||
/* Вызывает assert с аргументами ((ECanaMboxes.MBOX2.MDH.all & 255U) == 2 && modbus[0x7C] == 0x7C) в текущей последовательности операций. */
|
||||
assert((ECanaMboxes.MBOX2.MDH.all & 255U) == 2 && modbus[0x7C] == 0x7C);
|
||||
/* Служебный CAN использует тот же GAS-псевдоним для изменения лимита попыток. */
|
||||
can_request(6, 0x507D, 7);
|
||||
/* Проверяет успешный ответ с исходным GAS-адресом и новый лимит семи пусков. */
|
||||
assert((ECanaMboxes.MBOX2.MDH.all & 255U) == 0 && ECanaMboxes.MBOX2.MDL.all == 0x507D0007UL && modbus[0x7D] == 7);
|
||||
/* Недопустимый ноль отклоняется по служебному CAN без изменения последней настройки. */
|
||||
can_request(6, 0x507D, 0);
|
||||
/* Проверяет код Modbus 3 и отсутствие изменения настроенного лимита. */
|
||||
assert((ECanaMboxes.MBOX2.MDH.all & 255U) == 3 && modbus[0x7D] == 7);
|
||||
/* Вызывает can_request с аргументами (6, 0x507F, 0x40) в текущей последовательности операций. */
|
||||
can_request(6, 0x507F, 0x40);
|
||||
/* Вызывает assert с аргументами (captures == 2 && modbus[127] == 0x40) в текущей последовательности операций. */
|
||||
|
||||
@@ -63,6 +63,21 @@ routes = can_globals + "\n" + "".join(function(message, name) for name in
|
||||
("modbus_exception", "receive_ump", "ReceiveCommandModbus3", "ReceiveCommandModbus6"))
|
||||
# Задаёт routes + по выражению справа; значение используется последующими операциями.
|
||||
routes += function(ecan, "UMP_CAN_service")
|
||||
# Берёт три записи штатного CAN из рабочего обработчика, чтобы проверки не копировали его условия.
|
||||
slots_start = ecan.index("\tfor (slot = 0; slot < 3; slot++, adr++, mask <<= 1)")
|
||||
# Завершает фрагмент перед журналированием; оно не влияет на доступность технологических регистров.
|
||||
slots_end = ecan.index("/* Фиксируем применённую команду", slots_start)
|
||||
# Обёртка задаёт только поля кадра; проверки доступа остаются извлечённым рабочим кодом.
|
||||
routes += """/* Проверяет рабочие записи CAN без аппаратных mailbox и обработки остальных событий ISR. */
|
||||
static void native_can_slots(unsigned int adr, unsigned int mask, int a, int b, int c) {
|
||||
/* Индекс выбирает одно из трёх слов; маска достоверности передана вызывающим тестом в аргументе mask. */
|
||||
unsigned int slot;
|
||||
/* Передаёт исходные слова рабочим условиям записи регистра. */
|
||||
int Data[3] = {a, b, c};
|
||||
"""
|
||||
# Добавляет неизменённый фрагмент Handlai и закрывает обёртку с пояснением назначения блока.
|
||||
routes += ecan[slots_start:slots_end] + "/* Завершает записи трёх слов штатного CAN-кадра. */\n}\n"
|
||||
|
||||
# Открывает управляемый ресурс tempfile.TemporaryDirectory(prefix="gas167-test-") as tmp с автоматическим освобождением.
|
||||
with tempfile.TemporaryDirectory(prefix="gas167-test-") as tmp:
|
||||
# Задаёт directory по выражению справа; значение используется последующими операциями.
|
||||
|
||||
@@ -15,8 +15,6 @@ unsigned int test_start, test_stop, test_permission, test_tick;
|
||||
unsigned int test_starts, test_last_stop_tick, test_last_start_tick, test_init_dac;
|
||||
/* Объявляет test_bad_order — данные test_bad_order. */
|
||||
int test_bad_order;
|
||||
/* Объявляет ump_dac_ramp — ump ЦАП ramp; ump_dac_duration — ump ЦАП duration; ump_dac_go10 — ump ЦАП go 10; ump_dac_stop10 — ump ЦАП stop 10; ump_dac_position — ump ЦАП position. */
|
||||
unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position;
|
||||
/* Задаёт CHECK = do { if (!(x)) { printf("FAIL line %d: %s\n", __LINE__, #x); return 1; } } while (0); данные CHECK. */
|
||||
#define CHECK(x) do { if (!(x)) { printf("FAIL line %d: %s\n", __LINE__, #x); return 1; } } while (0)
|
||||
/* Начинает функцию setup; назначение модуля — проверка load_control на модели ПК. */
|
||||
@@ -45,10 +43,167 @@ static void tick(unsigned int n, int exchange, unsigned int volts) {
|
||||
}
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */
|
||||
/* Проверяет штатные 6 мА, трёхсекундную реакцию ЗПТ и сохранение защитных остановов на настоящем DAC.c. */
|
||||
static int startup_test(void) {
|
||||
/* mode перебирает УМП 5/6, attempt контролирует пять пусков, code хранит отправленный код, count — оставшиеся токовые такты ожидания. */
|
||||
unsigned int mode, attempt, code, count;
|
||||
/* Проверяет оба штатных CAN-индекса: ЗПТ1 у УМП 5 и ЗПТ2 у УМП 6. */
|
||||
for (mode = 5; mode <= 6; mode++) {
|
||||
/* Подаёт START при заводских 6 мА и свежем нулевом ЗПТ; первые 10 мс включают базовый и стартовый кадры ЦАП. */
|
||||
setup(mode); DAC_go = 6; Commands = 0x80; tick(10, 1, 0);
|
||||
/* Первая попытка должна удерживать разрешение и получить 6 мА вместо мгновенного STOP. */
|
||||
CHECK(test_starts == 1 && test_start && test_permission && !test_stop && modbus[0x1C] == 60 && modbus[123] != DAC_min());
|
||||
/* Запоминает код 6 мА для исключения скрытого повышения тока до подтверждённых 30 В. */
|
||||
code = modbus[123];
|
||||
/* Проверяет последний миллисекундный такт перед тремя секундами от первой отправки 6 мА. */
|
||||
tick(2999, 1, 29);
|
||||
/* До конца выдержки сохраняет одну попытку, рабочее состояние и прежнее задание в масштабе 0,1 мА. */
|
||||
CHECK(load_state == LOAD_RUN && load_attempts == 1 && modbus[0x1C] == 60 && (unsigned int)modbus[123] == code);
|
||||
/* Ровно через 3000 мс свежее ЗПТ ниже 30 В должно завершить попытку защитным сбросом. */
|
||||
tick(1, 1, 29);
|
||||
/* Проверяет STOP, снятое разрешение и передачу базового тока 4 мА через калибровочный минимум. */
|
||||
CHECK(load_state == LOAD_RELOAD && test_stop && !test_permission && modbus[0x1C] == 40 && modbus[123] == DAC_min());
|
||||
/* После секунды STOP вторая попытка должна снова получить 6 мА и собственные три секунды ожидания. */
|
||||
tick(1000, 1, 0);
|
||||
/* Исключает повторный START и немедленный STOP в одном вызове обработчика. */
|
||||
CHECK(test_starts == 2 && test_start && !test_stop && modbus[0x1C] == 60);
|
||||
/* Проходит оставшиеся четыре попытки по реальному миллисекундному времени без ускорения рампы. */
|
||||
for (attempt = 2; attempt <= 5; attempt++) {
|
||||
/* Даёт каждой попытке 3000 мс свежего нулевого ЗПТ после начальной отправки 6 мА. */
|
||||
tick(3000, 1, 0);
|
||||
/* Проверяет возврат к 4 мА и полную выдержку каждой попытки до STOP. */
|
||||
CHECK(test_stop && !test_permission && load_attempts == attempt && modbus[0x1C] == 40 && test_last_stop_tick - test_last_start_tick >= 3000);
|
||||
/* До пятой попытки соблюдает дополнительную секунду STOP, после пятой повтор запрещён. */
|
||||
if (attempt < 5) tick(1000, 1, 0);
|
||||
/* Закрывает перебор разрешённых пусков. */
|
||||
}
|
||||
/* Достаточное ЗПТ после ошибки само по себе не должно давать шестой пуск. */
|
||||
tick(3000, 1, 30);
|
||||
/* Проверяет удержание ошибки, STOP и соблюдение порядка START/STOP/разрешения. */
|
||||
CHECK(test_starts == 5 && (LOAD_STATUS & 1) && test_stop && !test_bad_order);
|
||||
/* Закрывает независимые проверки обоих адресов УМП. */
|
||||
}
|
||||
/* Подаёт достаточное ЗПТ в последний такт выдержки: порог 30 В должен иметь приоритет перед истечением ожидания. */
|
||||
setup(5); DAC_go = 6; Commands = 0x80; tick(3009, 1, 29); tick(1, 1, 30);
|
||||
/* Проверяет, что на границе 3000 мс от первого токового кадра не произошло ложного STOP или второго START. */
|
||||
CHECK(load_state == LOAD_RUN && test_starts == 1 && !test_stop && test_permission);
|
||||
/* Даёт УМП 5 две секунды низкого ЗПТ при начальном токе 6 мА: первый токовый кадр отправляется на 10 мс. */
|
||||
setup(5); DAC_go = 6; Commands = 0x80; tick(2010, 1, 29);
|
||||
/* Устройство должно продолжать ожидание на первой попытке без роста выше 6 мА. */
|
||||
CHECK(load_attempts == 1 && modbus[0x1C] == 60 && !test_stop);
|
||||
/* Запоминает начальный код для проверки роста после прихода достаточного ЗПТ. */
|
||||
code = modbus[123];
|
||||
/* Ровно 30 В разрешают разгон; за 300 мс изменение видно даже при разрешении регистра 0,1 мА. */
|
||||
tick(300, 1, 30);
|
||||
/* Проверяет продолжение первой попытки и рост отправленного токового задания. */
|
||||
CHECK(test_starts == 1 && load_state == LOAD_RUN && modbus[0x1C] > 60 && (unsigned int)modbus[123] > code);
|
||||
/* После успешного роста падение до 29 В не получает дополнительную трёхсекундную выдержку. */
|
||||
tick(5, 1, 29); CHECK(load_state == LOAD_RELOAD && test_stop && modbus[0x1C] == 40);
|
||||
/* Даже повышенная начальная уставка 9 мА должна ограничиваться 6 мА до подтверждения роста ЗПТ. */
|
||||
setup(5); DAC_go = 9; Commands = 0x80; tick(10, 1, 0);
|
||||
/* Исключает преждевременную передачу повышенного начального задания при низком ЗПТ. */
|
||||
CHECK(modbus[0x1C] == 60 && load_state == LOAD_RUN && test_starts == 1);
|
||||
/* После исчезновения CAN отправленное задание должно остаться 6 мА, даже если начальная уставка равна 9 мА. */
|
||||
tick(1000, 0, 0); CHECK((LOAD_STATUS & 2) && modbus[0x1C] == 60);
|
||||
/* Короткий тайм-аут 20 мс позволяет проверить приостановку стартовой выдержки при потере выбранного CAN-напряжения. */
|
||||
setup(5); DAC_go = 6; LOAD_CAN_TIMEOUT = 20; Commands = 0x80; tick(10, 1, 0);
|
||||
/* Дожидается устаревания последнего ЗПТ без новых кадров. */
|
||||
tick(30, 0, 0);
|
||||
/* Сохраняет остаток стартовых отправок и последний код после перехода в паузу CAN. */
|
||||
count = load_start_remaining; code = modbus[123];
|
||||
/* Отсутствие CAN дольше всей выдержки не должно расходовать её остаток или следующую попытку. */
|
||||
tick(4000, 0, 0);
|
||||
/* Проверяет удержание кода, счётчика ожидания, разрешения и первой попытки во время тайм-аута. */
|
||||
CHECK((LOAD_STATUS & 2) && load_start_remaining == count && (unsigned int)modbus[123] == code && load_attempts == 1 && !test_stop);
|
||||
/* Свежее низкое ЗПТ возобновляет отсчёт от сохранённого значения. */
|
||||
tick(5, 1, 29); CHECK(!(LOAD_STATUS & 2) && load_start_remaining == count - 1 && test_starts == 1);
|
||||
/* RESET должен прекратить ожидание сразу и отправить 4 мА на ближайшем токовом такте. */
|
||||
Commands = 0xC0; tick(5, 1, 29); CHECK(test_stop && !test_permission && modbus[0x1C] == 40);
|
||||
/* Ручная калибровка вместе со START не должна подменять стартовое задание. */
|
||||
setup(5); DAC_go = 6; Commands = 0x280; DAC_cal() = 4095; tick(6, 1, 0);
|
||||
/* Команда инициализации на первом токовом такте не подтверждает отправку 6 мА и не расходует выдержку. */
|
||||
cInitDac = 1; tick(4, 1, 0); CHECK(load_start_remaining == 600 && modbus[0x1C] == 40);
|
||||
/* Следующий такт должен выдать настоящий начальный ток вместо ручного кода 4095. */
|
||||
tick(5, 1, 0); CHECK(modbus[0x1C] == 60 && modbus[123] != 4095 && load_start_remaining == 599);
|
||||
/* Последний такт перед тремя секундами от токового кадра ещё сохраняет ожидание. */
|
||||
tick(2999, 1, 0); CHECK(load_state == LOAD_RUN);
|
||||
/* Следующий такт завершает выдержку и возвращает 4 мА без подмены ручной калибровкой. */
|
||||
tick(1, 1, 0); CHECK(load_state == LOAD_RELOAD && modbus[0x1C] == 40 && modbus[123] == DAC_min());
|
||||
/* Возвращает успех после проверки реакции ЗПТ, пяти попыток, CAN, RESET и калибровки. */
|
||||
return 0;
|
||||
/* Закрывает проверку стартового этапа нагрузки. */
|
||||
}
|
||||
/* Проверяет настраиваемый лимит, независимость счётчика, уменьшение лимита в паузе STOP и верхнюю 16-битную границу. */
|
||||
static int attempt_limit_test(void) {
|
||||
/* Адреса 5/6 выбирают оба УМП; limit задаёт общий предел START, attempt считает проверяемые неудачи. */
|
||||
unsigned int mode, limit, attempt, out[8], error;
|
||||
/* Ноль из старой EEPROM должен превратиться в прежние заводские пять пусков. */
|
||||
setup(5); CHECK(LOAD_MAX_ATTEMPTS == 5);
|
||||
/* Подготовка тактов ЦАП после загрузки параметров обязана сохранять ненулевую пользовательскую настройку. */
|
||||
LOAD_MAX_ATTEMPTS = 7; Setup_DAC_time(); CHECK(LOAD_MAX_ATTEMPTS == 7);
|
||||
/* Проверяет одинаковый смысл лимита для ЗПТ1 и ЗПТ2, выбранных штатными CAN-адресами. */
|
||||
for (mode = 5; mode <= 6; mode++) {
|
||||
/* Значения 1, 2 и 7 проверяют отсутствие дополнительных пусков и снятие прежнего жёсткого предела пяти. */
|
||||
for (limit = 1; limit <= 7; limit = limit == 1 ? 2 : 7) {
|
||||
/* Новый сеанс начинает работу с указанным пределом; START включается только штатной командой. */
|
||||
setup(mode); LOAD_MAX_ATTEMPTS = limit; Commands = 0x80;
|
||||
/* Каждая успешная реакция ЗПТ позволяет затем проверить немедленную защиту при его падении. */
|
||||
for (attempt = 1; attempt <= limit; attempt++) {
|
||||
/* Даёт 1010 мс на первый пуск либо окончание секундного STOP перед очередным START. */
|
||||
tick(1010, 1, 30);
|
||||
/* Переводит рампу выше границы 6 мА при достаточном ЗПТ, затем имитирует его падение до нуля. */
|
||||
load_count_ramp = time_dac / 6; tick(5, 1, 30); tick(5, 1, 0);
|
||||
/* Проверяет число реальных START и неизменность записанного лимита после работы Timer1. */
|
||||
CHECK(test_starts == attempt && load_attempts == attempt && LOAD_MAX_ATTEMPTS == (int)limit);
|
||||
/* До последней попытки допускается повтор; последняя неудача обязана зафиксировать LOAD_FAULT. */
|
||||
CHECK(load_state == (attempt == limit ? LOAD_FAULT : LOAD_RELOAD));
|
||||
/* Завершает проверку всех разрешённых попыток текущего сеанса. */
|
||||
}
|
||||
/* Достаточное напряжение и повышение лимита сами по себе не снимают уже зафиксированную ошибку. */
|
||||
LOAD_MAX_ATTEMPTS = limit + 1; tick(3000, 1, 30);
|
||||
/* Счётчик остаётся прежним, аппаратный STOP и запрет разрешения сохраняются после изменения настройки. */
|
||||
CHECK(test_starts == limit && load_attempts == limit && test_stop && !test_permission);
|
||||
/* Диагностический блок версии 1 продолжает возвращать текущий счётчик в слове 5, независимо от лимита 0x7D. */
|
||||
CHECK(Load_protection_prepare(3, 0x1300, 8, out, &error) == 8 && !error && out[5] == limit);
|
||||
/* Снятие START обнуляет счётчик, но сохраняет лимит для следующего сеанса пуска. */
|
||||
Commands = 0; tick(1000, 1, 30); CHECK(!load_attempts && LOAD_MAX_ATTEMPTS == (int)(limit + 1));
|
||||
/* Значение 7 — последний сценарий; выход исключает повторение итерации с неизменным limit. */
|
||||
if (limit == 7) break;
|
||||
/* Завершает перебор проверяемых пользовательских лимитов. */
|
||||
}
|
||||
/* Завершает проверку обоих адресов УМП. */
|
||||
}
|
||||
/* Подготавливает первый неудачный пуск с разрешёнными пятью попытками. */
|
||||
setup(5); Commands = 0x80; tick(1010, 1, 30);
|
||||
/* Падение уже подтверждённого ЗПТ переводит автомат в секундный STOP перед повтором. */
|
||||
load_count_ramp = time_dac / 6; tick(5, 1, 0); CHECK(load_state == LOAD_RELOAD);
|
||||
/* Уменьшает предел до уже использованной одной попытки во время STOP, проверяя защиту перед следующим START. */
|
||||
LOAD_MAX_ATTEMPTS = 1; tick(3000, 1, 30); CHECK(load_state == LOAD_FAULT && test_starts == 1);
|
||||
/* Верхняя граница регистра сохраняется после подготовки автомата и не трактуется как отрицательный лимит. */
|
||||
setup(6); LOAD_MAX_ATTEMPTS = 65535U; Setup_DAC_time(); WAKEpowse = 0;
|
||||
/* Проверяет чтение максимального 16-битного значения без обнуления пользовательской настройки. */
|
||||
CHECK((unsigned int)LOAD_MAX_ATTEMPTS == 65535U);
|
||||
/* Доводит первый пуск до защитной паузы, затем моделирует последнюю попытку без 65534 циклов ожидания. */
|
||||
Commands = 0x80; tick(1010, 1, 30); load_count_ramp = time_dac / 6; tick(5, 1, 0);
|
||||
/* Значение 65534 соответствует числу ранее выданных START перед последней разрешённой попыткой. */
|
||||
load_attempts = 65534U; tick(1000, 1, 30); CHECK(load_attempts == 65535U && test_starts == 2);
|
||||
/* Последняя неудача фиксирует ошибку до возможного переполнения 16-битного счётчика. */
|
||||
load_count_ramp = time_dac / 6; tick(5, 1, 0); tick(3000, 1, 30);
|
||||
/* Проверяет удержание максимального счётчика, отсутствие дополнительного START и неизменность лимита. */
|
||||
CHECK(load_state == LOAD_FAULT && load_attempts == 65535U && test_starts == 2 && (unsigned int)LOAD_MAX_ATTEMPTS == 65535U);
|
||||
/* Возвращает успех после проверки сохранения лимита и пограничных сценариев его применения. */
|
||||
return 0;
|
||||
/* Завершает проверки настраиваемого количества попыток запуска. */
|
||||
}
|
||||
|
||||
/* Запускает новые стартовые сценарии и прежние регрессии автомата на программных подменах периферии. */
|
||||
int main(void) {
|
||||
/* Объявляет out — данные out; error — ошибка; count — число; ramp — данные ramp; code — данные code. */
|
||||
unsigned int out[8], error, count, ramp, code, stopped_at;
|
||||
/* Сначала проверяет исправляемый штатный пуск с 6 мА, затем выполняет остальные регрессии защиты. */
|
||||
CHECK(startup_test() == 0);
|
||||
/* Дополнительно проверяет записываемый лимит 0x7D до прежних регрессий автомата нагрузки. */
|
||||
CHECK(attempt_limit_test() == 0);
|
||||
/* Вызывает setup с аргументами (5) в текущей последовательности операций. */
|
||||
setup(5);
|
||||
/* Boot ISR before parameters: no divide-by-zero and no GPIO start. */
|
||||
@@ -76,18 +231,18 @@ int main(void) {
|
||||
/* Freeze current and code at timeout; unrelated exchange cannot unfreeze. */
|
||||
/* Вызывает tick с аргументами (1000, 1, 30); tick(600, 0, 0) в текущей последовательности операций. */
|
||||
tick(1000, 1, 30); tick(600, 0, 0);
|
||||
/* Записывает ramp значением ump_dac_ramp; code = modbus[123]; данные ramp. */
|
||||
ramp = ump_dac_ramp; code = modbus[123];
|
||||
/* Вызывает tick с аргументами (2000, 0, 0); CHECK(ump_dac_ramp == ramp && (unsigned int)modbus[123] == code) в текущей последовательности операций. */
|
||||
tick(2000, 0, 0); CHECK(ump_dac_ramp == ramp && (unsigned int)modbus[123] == code);
|
||||
/* Записывает ramp значением load_count_ramp; code = modbus[123]; данные ramp. */
|
||||
ramp = load_count_ramp; code = modbus[123];
|
||||
/* Вызывает tick с аргументами (2000, 0, 0); CHECK(load_count_ramp == ramp && (unsigned int)modbus[123] == code) в текущей последовательности операций. */
|
||||
tick(2000, 0, 0); CHECK(load_count_ramp == ramp && (unsigned int)modbus[123] == code);
|
||||
/* Вызывает CHECK с аргументами (test_permission && !test_stop && (LOAD_STATUS & 2)) в текущей последовательности операций. */
|
||||
CHECK(test_permission && !test_stop && (LOAD_STATUS & 2));
|
||||
/* Вызывает Load_voltage_can. Принимает напряжение выбранной нагрузки из достоверных слов CAN и сбрасывает возраст только нужного измерения. */
|
||||
Load_voltage_can(0x8000U | 8U, 200, 0, 0); tick(10, 0, 0);
|
||||
/* Вызывает CHECK с аргументами (ump_dac_ramp == ramp) в текущей последовательности операций. */
|
||||
CHECK(ump_dac_ramp == ramp);
|
||||
/* Вызывает tick с аргументами (10, 1, 30); CHECK(ump_dac_ramp > ramp) в текущей последовательности операций. */
|
||||
tick(10, 1, 30); CHECK(ump_dac_ramp > ramp);
|
||||
/* Вызывает CHECK с аргументами (load_count_ramp == ramp) в текущей последовательности операций. */
|
||||
CHECK(load_count_ramp == ramp);
|
||||
/* Вызывает tick с аргументами (10, 1, 30); CHECK(load_count_ramp > ramp) в текущей последовательности операций. */
|
||||
tick(10, 1, 30); CHECK(load_count_ramp > ramp);
|
||||
/* Exactly 30 V permits growth; 29 V fails strictly above 6 mA. */
|
||||
/* Записывает Commands значением 0x80; tick(10, 1, 30); слово команд, технологический регистр 127. */
|
||||
setup(6); Commands = 0x80; tick(10, 1, 30);
|
||||
@@ -97,8 +252,8 @@ int main(void) {
|
||||
CHECK(load_state == LOAD_RUN && modbus[0x1C] >= 60);
|
||||
/* Вызывает tick с аргументами (5, 1, 29); CHECK(load_state == LOAD_RELOAD && test_stop && !test_permission) в текущей последовательности операций. */
|
||||
tick(5, 1, 29); CHECK(load_state == LOAD_RELOAD && test_stop && !test_permission);
|
||||
/* Вызывает CHECK с аргументами (!test_start && ump_dac_ramp == 0 && modbus[0x1C] == 40) в текущей последовательности операций. */
|
||||
CHECK(!test_start && ump_dac_ramp == 0 && modbus[0x1C] == 40);
|
||||
/* Вызывает CHECK с аргументами (!test_start && load_count_ramp == 0 && modbus[0x1C] == 40) в текущей последовательности операций. */
|
||||
CHECK(!test_start && load_count_ramp == 0 && modbus[0x1C] == 40);
|
||||
/* Записывает stopped_at значением test_last_stop_tick; данные stopped_at. */
|
||||
CHECK(modbus[123] == DAC_min()); stopped_at = test_last_stop_tick;
|
||||
/* Вызывает tick с аргументами (999, 1, 0); CHECK(test_starts == 1 && test_stop) в текущей последовательности операций. */
|
||||
@@ -116,16 +271,16 @@ int main(void) {
|
||||
if (load_state == LOAD_RELOAD) tick(1000, 1, 0);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Вызывает CHECK с аргументами (test_starts == 5 && LOAD_ATTEMPTS == 5 && (LOAD_STATUS & 1)) в текущей последовательности операций. */
|
||||
CHECK(test_starts == 5 && LOAD_ATTEMPTS == 5 && (LOAD_STATUS & 1));
|
||||
/* Вызывает CHECK с аргументами (test_starts == 5 && load_attempts == 5 && (LOAD_STATUS & 1)) в текущей последовательности операций. */
|
||||
CHECK(test_starts == 5 && load_attempts == 5 && (LOAD_STATUS & 1));
|
||||
/* Вызывает tick с аргументами (3000, 1, 200); CHECK(test_starts == 5 && test_stop && !test_permission) в текущей последовательности операций. */
|
||||
tick(3000, 1, 200); CHECK(test_starts == 5 && test_stop && !test_permission);
|
||||
/* Записывает Commands значением 0xC0; tick(10, 1, 200); CHECK(load_state == LOAD_FAULT); слово команд, технологический регистр 127. */
|
||||
Commands = 0xC0; tick(10, 1, 200); CHECK(load_state == LOAD_FAULT);
|
||||
/* Записывает Commands значением 0; tick(1000, 1, 200); CHECK(!(LOAD_STATUS & 1)); слово команд, технологический регистр 127. */
|
||||
Commands = 0; tick(1000, 1, 200); CHECK(!(LOAD_STATUS & 1));
|
||||
/* Записывает Commands значением 0x80; test_starts = 0; tick(10, 1, 200); CHECK(LOAD_ATTEMPTS == 1); слово команд, технологический регистр 127. */
|
||||
Commands = 0x80; test_starts = 0; tick(10, 1, 200); CHECK(LOAD_ATTEMPTS == 1);
|
||||
/* Записывает Commands значением 0x80; test_starts = 0; tick(10, 1, 200); CHECK(load_attempts == 1); слово команд, технологический регистр 127. */
|
||||
Commands = 0x80; test_starts = 0; tick(10, 1, 200); CHECK(load_attempts == 1);
|
||||
/* Manual reset dominates START; releasing it alone cannot start again. */
|
||||
/* Записывает Commands значением 0xC0; tick(1, 1, 200); CHECK(test_stop && !test_permission); слово команд, технологический регистр 127. */
|
||||
Commands = 0xC0; tick(1, 1, 200); CHECK(test_stop && !test_permission);
|
||||
@@ -150,12 +305,12 @@ int main(void) {
|
||||
Load_protection_prepare(6, 0x1302, 1, out, &error); CHECK(!error);
|
||||
/* Вызывает tick с аргументами (30, 1, 200); CHECK(LOAD_STATUS & 2) в текущей последовательности операций. */
|
||||
tick(30, 1, 200); CHECK(LOAD_STATUS & 2);
|
||||
/* Записывает ramp значением ump_dac_ramp; tick(100, 1, 200); CHECK(ump_dac_ramp == ramp); данные ramp. */
|
||||
ramp = ump_dac_ramp; tick(100, 1, 200); CHECK(ump_dac_ramp == ramp);
|
||||
/* Записывает ramp значением load_count_ramp; tick(100, 1, 200); CHECK(load_count_ramp == ramp); данные ramp. */
|
||||
ramp = load_count_ramp; tick(100, 1, 200); CHECK(load_count_ramp == ramp);
|
||||
/* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */
|
||||
Load_protection_prepare(6, 0x1302, 0, out, &error);
|
||||
/* Вызывает tick с аргументами (10, 1, 200); CHECK(!(LOAD_STATUS & 2) && ump_dac_ramp > ramp) в текущей последовательности операций. */
|
||||
tick(10, 1, 200); CHECK(!(LOAD_STATUS & 2) && ump_dac_ramp > ramp);
|
||||
/* Вызывает tick с аргументами (10, 1, 200); CHECK(!(LOAD_STATUS & 2) && load_count_ramp > ramp) в текущей последовательности операций. */
|
||||
tick(10, 1, 200); CHECK(!(LOAD_STATUS & 2) && load_count_ramp > ramp);
|
||||
/* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */
|
||||
Load_protection_prepare(6, 0x1302, 2, out, &error);
|
||||
/* Записывает load_count_ramp значением time_dac / 6; tick(5, 1, 200); CHECK(load_state == LOAD_RELOAD); load число ramp. */
|
||||
@@ -177,10 +332,10 @@ int main(void) {
|
||||
/* Вызывает tick с аргументами (1, 1, 200); CHECK(test_starts == 1) в текущей последовательности операций. */
|
||||
tick(1, 1, 200); CHECK(test_starts == 1);
|
||||
/* Timeout while STOP is held cannot initiate the pending retry. */
|
||||
/* Записывает Commands значением 0x80; tick(10, 1, 0); слово команд, технологический регистр 127. */
|
||||
setup(5); Commands = 0x80; tick(10, 1, 0);
|
||||
/* Записывает load_count_ramp значением time_dac / 6; tick(5, 1, 0); load число ramp. */
|
||||
load_count_ramp = time_dac / 6; tick(5, 1, 0);
|
||||
/* Начинает пуск с заводскими 6 мА и свежим нулевым ЗПТ, чтобы затем проверить исчезновение CAN во время STOP. */
|
||||
setup(5); DAC_go = 6; Commands = 0x80; tick(10, 1, 0);
|
||||
/* Даёт три секунды на реакцию ЗПТ после первой отправки 6 мА, затем проверяет потерю CAN во время защитного сброса. */
|
||||
tick(3000, 1, 0);
|
||||
/* Вызывает CHECK с аргументами (load_state == LOAD_RELOAD) в текущей последовательности операций. */
|
||||
CHECK(load_state == LOAD_RELOAD);
|
||||
/* Вызывает tick с аргументами (1500, 0, 0); CHECK(test_starts == 1 && test_stop) в текущей последовательности операций. */
|
||||
@@ -189,8 +344,9 @@ int main(void) {
|
||||
tick(1, 1, 0); CHECK(test_starts == 2 && !test_stop);
|
||||
/* Вызывает Load_control_init. Сбрасывает все переменные автомата нагрузки до разрешения прерываний; COFF не обнуляет всю .ebss. */
|
||||
Load_control_init(); CHECK(!load_simulation);
|
||||
/* Вызывает puts с аргументами ("PASS: production DAC control, timeout, CAN slots, STOP ordering, five attempts, simulation") в текущей последовательности операций. */
|
||||
puts("PASS: production DAC control, timeout, CAN slots, STOP ordering, five attempts, simulation");
|
||||
/* Сообщает об успехе проверки реального автомата, включая новый старт 6 мА с выдержкой 3 секунды и прежние защитные сценарии. */
|
||||
/* Сообщает о проверке рабочих исходников, настраиваемого лимита и прежних режимов защиты нагрузки. */
|
||||
puts("PASS: production DAC control, startup, timeout, CAN, STOP ordering, writable attempt limit, simulation");
|
||||
/* Завершает main и возвращает 0. */
|
||||
return 0;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
|
||||
@@ -25,8 +25,10 @@ extern unsigned int test_init_dac;
|
||||
#define LOAD_CAN_TIMEOUT modbus[0x52]
|
||||
/* Задаёт LOAD_STATUS = modbus[0x7C]; слово состояния защиты нагрузки для чтения, регистр 0x7C. */
|
||||
#define LOAD_STATUS modbus[0x7C]
|
||||
/* Задаёт LOAD_ATTEMPTS = modbus[0x7D]; число попыток пуска для чтения, регистр 0x7D. */
|
||||
#define LOAD_ATTEMPTS modbus[0x7D]
|
||||
/* Задаёт записываемый лимит общего числа пусков в регистре 0x7D; допустимы 1..65535 попыток, включая первый START. */
|
||||
#define LOAD_MAX_ATTEMPTS modbus[0x7D]
|
||||
/* Сохраняет прежний заводской предел пяти пусков для сброса настроек и замены нуля из старой EEPROM. */
|
||||
#define LOAD_DEFAULT_MAX_ATTEMPTS 5U
|
||||
/* Задаёт DAC_min = modbus[0x79]; ЦАП min. */
|
||||
#define DAC_min() modbus[0x79]
|
||||
/* Задаёт DAC_max = modbus[0x78]; ЦАП max. */
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
static char size_cmd15; /* Моделирует локальную настройку длины команды, которую заполняет create_uart_vars. */
|
||||
/* Проверка rs232_fifo на модели ПК. Русские пояснения сохранены в UTF-8. */
|
||||
|
||||
/* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS SciaRegs,ScibRegs;; порядок элементов сохраняется. */
|
||||
@@ -142,6 +143,15 @@ int main(void)
|
||||
unsigned data[4200],sizes[]={0,1,2,7,8,15,16,17,31,120,253,400,8194};
|
||||
/* Продолжает список аргументов, полей или выражение unsigned a,n,i,mode;unsigned request[]={16,3,0x10,0,0,16,0,0};; порядок элементов сохраняется. */
|
||||
unsigned a,n,i,mode;unsigned request[]={16,3,0x10,0,0,16,0,0};
|
||||
RS_DATA expected = {0}; /* Задаёт чистое состояние порта независимо от содержимого моделируемой RAM. */
|
||||
memset(&rs_a, 0xA5, sizeof(rs_a)); /* Воспроизводит ненулевые длины, указатели и флаги SCI-A после загрузки COFF. */
|
||||
memset(&rs_b, 0x5A, sizeof(rs_b)); /* Проверяет независимый сброс второго порта с другим рисунком мусора. */
|
||||
create_uart_vars(17); /* Вызывает настоящую загрузочную инициализацию до разрешения IRQ. */
|
||||
expected.commnumber = COM_1; /* Единственным ненулевым полем после общего сброса должен быть номер первого порта. */
|
||||
assert(memcmp(&rs_a, &expected, sizeof(rs_a)) == 0); /* Проверяет все поля и оба буфера первого порта, включая флаги готовности. */
|
||||
expected.commnumber = COM_2; /* Подготавливает ожидаемое состояние второго порта. */
|
||||
assert(memcmp(&rs_b, &expected, sizeof(rs_b)) == 0 && size_cmd15 == 17); /* Проверяет второй порт и сохранение настройки длины команды. */
|
||||
|
||||
/* Цикл for(mode=0;mode<2;mode++)for(a=0;a<sizeof(sizes)/sizeof(sizes[0]);a++) ; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for(mode=0;mode<2;mode++)for(a=0;a<sizeof(sizes)/sizeof(sizes[0]);a++) {
|
||||
/* Записывает n значением sizes[a];for(i=0;i<4200;i++)data[i]=(i*131U+17U)&65535; данные n. */
|
||||
|
||||
@@ -22,8 +22,8 @@ def read(path):
|
||||
return re.sub(r'/\*.*?\*/|//[^\n]*','',path.read_bytes().decode('utf-8').replace('\r\n','\n'),flags=re.S)
|
||||
# Задаёт source по выражению справа; значение используется последующими операциями.
|
||||
source=read(root/'Source/Internal/RS485.c')
|
||||
# Задаёт names по выражению справа; значение используется последующими операциями.
|
||||
names=['RS_RX_Handler','RS_TX_Handler','RS_Send','RS_BSend','RS_SetBitMode',
|
||||
# Извлекает инициализацию и обработчики UART, чтобы проверить старт на неочищенной RAM вместе с обменом.
|
||||
names=['create_uart_vars','RS_RX_Handler','RS_TX_Handler','RS_Send','RS_BSend','RS_SetBitMode',
|
||||
# Продолжает текущий вызов, список или выражение: 'RS_FifoWait','RS_FifoTx','RS_FifoStart','RS_FifoAbort','RS_FifoTick1ms']; порядок аргументов сохраняется.
|
||||
'RS_FifoWait','RS_FifoTx','RS_FifoStart','RS_FifoAbort','RS_FifoTick1ms']
|
||||
# Задаёт prototypes по выражению справа; значение используется последующими операциями.
|
||||
|
||||
@@ -34,25 +34,17 @@ int main(void)
|
||||
ump_archive_count = ump_archive_next = ump_generation = 0xA5A5;
|
||||
/* Записывает ump_source значением ump_post = 0xA5A5; данные ump_source. */
|
||||
ump_source = ump_post = 0xA5A5;
|
||||
/* Записывает ump_can_header значением ump_can_count = 0xA5A5; ump CAN header. */
|
||||
ump_can_header = ump_can_count = 0xA5A5;
|
||||
/* Цикл for (i = 0; i < 3; i++) ump_can_data[i] = 0xA5A5;; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 3; i++) ump_can_data[i] = 0xA5A5;
|
||||
/* Цикл for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0xA5A5;; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0xA5A5;
|
||||
/* Записывает ump_prev_commands значением ump_prev_inputs = ump_prev_outputs = 0xA5A5; данные ump_prev_commands. */
|
||||
ump_prev_commands = ump_prev_inputs = ump_prev_outputs = 0xA5A5;
|
||||
/* Записывает ump_dac_ramp значением ump_dac_duration = ump_dac_go10 = 0xA5A5; ump ЦАП ramp. */
|
||||
ump_dac_ramp = ump_dac_duration = ump_dac_go10 = 0xA5A5;
|
||||
/* Записывает ump_dac_stop10 значением ump_dac_position = 0xA5A5; ump ЦАП stop 10. */
|
||||
ump_dac_stop10 = ump_dac_position = 0xA5A5;
|
||||
|
||||
/* Вызывает ump_log_init. Явно инициализирует оба банка регистратора до включения IRQ; повторный старт записи архив не стирает. */
|
||||
ump_log_init();
|
||||
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE) == 0x554D) в текущей последовательности операций. */
|
||||
CHECK(ump_log_read(UMP_LOG_BASE) == 0x554D);
|
||||
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+1) == 3) в текущей последовательности операций. */
|
||||
CHECK(ump_log_read(UMP_LOG_BASE+1) == 3);
|
||||
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+1) == 4) в текущей последовательности операций. */
|
||||
CHECK(ump_log_read(UMP_LOG_BASE+1) == 4);
|
||||
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+2) == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_log_read(UMP_LOG_BASE+2) == 0);
|
||||
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+3) == 0) в текущей последовательности операций. */
|
||||
@@ -69,18 +61,10 @@ int main(void)
|
||||
CHECK(ump_cursor == 0 && ump_next == 0 && ump_archive_next == 0);
|
||||
/* Вызывает CHECK с аргументами (ump_divider == 0 && ump_sequence == 0 && ump_post == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_divider == 0 && ump_sequence == 0 && ump_post == 0);
|
||||
/* Вызывает CHECK с аргументами (ump_can_header == 0 && ump_can_count == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_can_header == 0 && ump_can_count == 0);
|
||||
/* Цикл for (i = 0; i < 3; i++) CHECK(ump_can_data[i] == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 3; i++) CHECK(ump_can_data[i] == 0);
|
||||
/* Цикл for (i = 0; i < 2; i++) CHECK(ump_pm67_voltage[i] == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 2; i++) CHECK(ump_pm67_voltage[i] == 0);
|
||||
/* Вызывает CHECK с аргументами (ump_prev_commands == 0 && ump_prev_inputs == 0 && ump_prev_outputs == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_prev_commands == 0 && ump_prev_inputs == 0 && ump_prev_outputs == 0);
|
||||
/* Вызывает CHECK с аргументами (ump_dac_ramp == 0 && ump_dac_duration == 0 && ump_dac_go10 == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_dac_ramp == 0 && ump_dac_duration == 0 && ump_dac_go10 == 0);
|
||||
/* Вызывает CHECK с аргументами (ump_dac_stop10 == 0 && ump_dac_position == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_dac_stop10 == 0 && ump_dac_position == 0);
|
||||
/* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE+1, 20)) в текущей последовательности операций. */
|
||||
CHECK(ump_log_write(UMP_LOG_BASE+1, 20));
|
||||
/* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */
|
||||
@@ -101,8 +85,8 @@ int main(void)
|
||||
CHECK(ump_log_write(UMP_LOG_BASE, 1));
|
||||
/* Вызывает CHECK с аргументами (ump_time == 1 && ump_archive_count == 7 && ump_generation == 2) в текущей последовательности операций. */
|
||||
CHECK(ump_time == 1 && ump_archive_count == 7 && ump_generation == 2);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 40) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 40) == 123);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 9) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 9) == 123);
|
||||
/* Завершает main и возвращает 0. */
|
||||
return 0;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
|
||||
@@ -60,10 +60,12 @@ __declspec(dllexport) int run_tests(void)
|
||||
ump_log_can(0x8000U | 306U, 999, 0, 0); /* Not a one-based CAN address. */ /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */
|
||||
/* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */
|
||||
CHECK(ump_log_write(UMP_LOG_BASE, 1));
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 40) == 123 && ump_word(0, 0, 41) == 789) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 40) == 123 && ump_word(0, 0, 41) == 789);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 9) == 123 && ump_word(0, 0, 10) == 789) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 9) == 123 && ump_word(0, 0, 10) == 789);
|
||||
/* Вызывает CHECK с аргументами (2UL * UMP_LOG_CAPACITY * UMP_LOG_WORDS <= LOG_PAGE_LEN) в текущей последовательности операций. */
|
||||
CHECK(2UL * UMP_LOG_CAPACITY * UMP_LOG_WORDS <= LOG_PAGE_LEN);
|
||||
/* Проверяет чётную ширину записи v4 и нулевой резерв, необходимый для пар слов CAN. */
|
||||
CHECK(UMP_LOG_WORDS == 12 && ump_word(0, 0, 11) == 0);
|
||||
/* Вызывает CHECK с аргументами (!ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */
|
||||
CHECK(!ump_log_write(UMP_LOG_BASE, 1));
|
||||
/* Вызывает CHECK с аргументами (!ump_log_write(UMP_LOG_BASE+1, 20)) в текущей последовательности операций. */
|
||||
@@ -76,10 +78,10 @@ __declspec(dllexport) int run_tests(void)
|
||||
CHECK(ump_word(0, 0, 0) == 901-UMP_LOG_CAPACITY);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 8) == 1234) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 8) == 1234);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 24) == 6) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 24) == 6);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 6) == 160) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 6) == 160);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 7) == 6) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 7) == 6);
|
||||
/* Короткая CAN-команда должна остаться отдельным событием. */
|
||||
/* Записывает modbus[127] значением 0x40; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
modbus[127] = 0x40;
|
||||
@@ -99,8 +101,8 @@ __declspec(dllexport) int run_tests(void)
|
||||
CHECK(ump_post == UMP_POST_POINTS);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 2) == 0x103) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 2) == 0x103);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 18) == 0x807F) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 18) == 0x807F);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 3) == 0x40) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 3) == 0x40);
|
||||
/* Цикл for (i=0; i<UMP_POST_POINTS-1; i++) ump_log_tick();; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i=0; i<UMP_POST_POINTS-1; i++) ump_log_tick();
|
||||
/* Вызывает CHECK с аргументами (ump_generation == 0) в текущей последовательности операций. */
|
||||
@@ -117,16 +119,16 @@ __declspec(dllexport) int run_tests(void)
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 2) == 5);
|
||||
/* Вызывает CHECK с аргументами (ump_count == 0 && ump_state == 1) в текущей последовательности операций. */
|
||||
CHECK(ump_count == 0 && ump_state == 1);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 41) == 789) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 41) == 789);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 9) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 9) == 123);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 10) == 789) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 10) == 789);
|
||||
/* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */
|
||||
ump_log_can(0x8000U | 305U, 999, 0, 0);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 40) == 999) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 40) == 999);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 9) == 999) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 9) == 999);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 9) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 9) == 123);
|
||||
/* Записывает generation значением ump_generation; данные generation. */
|
||||
generation = ump_generation;
|
||||
/* Записывает archived значением ump_word(1, UMP_LOG_CAPACITY-1, 0); данные archived. */
|
||||
@@ -265,8 +267,8 @@ __declspec(dllexport) int run_tests(void)
|
||||
* Запись по старым технологическим адресам через сервис запрещена. */
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_BASE, 16, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_BASE, 16, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 16 && reply[0] == 0x554D && reply[1] == 3) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 16 && reply[0] == 0x554D && reply[1] == 3);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 16 && reply[0] == 0x554D && reply[1] == 4) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 16 && reply[0] == 0x554D && reply[1] == 4);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_LIVE, 124, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_LIVE, 124, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 124) в текущей последовательности операций. */
|
||||
@@ -275,14 +277,14 @@ __declspec(dllexport) int run_tests(void)
|
||||
CHECK(reply[2] <= UMP_LOG_LIVE_RECORDS);
|
||||
/* Цикл for (i=4+reply[2]*UMP_LOG_WORDS; i<124; i++) CHECK(reply[i] == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i=4+reply[2]*UMP_LOG_WORDS; i<124; i++) CHECK(reply[i] == 0);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_DATA, 84, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_DATA, 84, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 84) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 84);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_DATA, 42, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_DATA, 42, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 42) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 42);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_DATA, 24, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_DATA, 24, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 24) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 24);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_DATA, 12, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_DATA, 12, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 12) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 12);
|
||||
/* Вызывает ump_can_prepare с аргументами (3, UMP_LOG_LIVE, 126, reply, &error) в текущей последовательности операций. */
|
||||
ump_can_prepare(3, UMP_LOG_LIVE, 126, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (error == 2) в текущей последовательности операций. */
|
||||
|
||||
Reference in New Issue
Block a user