Сохранить русские комментарии и настройки проекта в UTF-8

Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
This commit is contained in:
2026-10-12 12:24:48 +03:00
parent 378e06a281
commit f741741cf8
137 changed files with 21576 additions and 2134 deletions

View File

@@ -1,21 +1,42 @@
# Проверка eeprom_profiles на модели пк. Комментарии и исходный текст в UTF-8.
# Продолжает текущий вызов, список или выражение: """Check SPI wire address widths for both production EEPROM configurations."""; порядок аргументов сохраняется.
"""Check SPI wire address widths for both production EEPROM configurations."""
# Импортирует необходимые имена: from pathlib import Path.
from pathlib import Path
# Подключает модуль subprocess для этой проверки или подготовки сборки.
import subprocess
# Подключает модуль os для этой проверки или подготовки сборки.
import os
# Подключает модуль shutil для этой проверки или подготовки сборки.
import shutil
# Подключает модуль tempfile для этой проверки или подготовки сборки.
import tempfile
# Задаёт root по выражению справа; значение используется последующими операциями.
root = Path(__file__).resolve().parents[2]
# Задаёт protocol по выражению справа; значение используется последующими операциями.
protocol = root.parent / 'newProject/SETGUI/third_party/templates/c/set-protocol'
# Задаёт compiler по выражению справа; значение используется последующими операциями.
compiler = os.environ.get('CC') or shutil.which('gcc') or 'C:/msys64/mingw64/bin/gcc.exe'
# Задаёт os.environ['PATH'] по выражению справа; значение используется последующими операциями.
os.environ['PATH'] = str(Path(compiler).resolve().parent) + os.pathsep + os.environ['PATH']
# Открывает управляемый ресурс tempfile.TemporaryDirectory() as folder с автоматическим освобождением.
with tempfile.TemporaryDirectory() as folder:
# Перебирает profile in (0, 1) в указанном порядке.
for profile in (0, 1):
# Задаёт exe по выражению справа; значение используется последующими операциями.
exe = Path(folder) / f'spi{profile}.exe'
# Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова.
subprocess.run([compiler, '-std=c99',
# Задаёт f'-DEEPROM_M95M02 по выражению справа; значение используется последующими операциями.
f'-DEEPROM_M95M02={profile}', '-Itests/eeprom_profiles/stubs',
# Продолжает текущий вызов, список или выражение: '-ISource/Internal/Include', '-I' + str(protocol),; порядок аргументов сохраняется.
'-ISource/Internal/Include', '-I' + str(protocol),
# Продолжает текущий вызов, список или выражение: 'tests/eeprom_profiles/spi_test.c', '-o', str(exe)],; порядок аргументов сохраняется.
'tests/eeprom_profiles/spi_test.c', '-o', str(exe)],
# Задаёт cwd по выражению справа; значение используется последующими операциями.
cwd=root, check=True)
# Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова.
subprocess.run([str(exe)], check=True, timeout=10)
# Продолжает текущий вызов, список или выражение: print(f'PASS SPI profile {profile}'); порядок аргументов сохраняется.
print(f'PASS SPI profile {profile}')

View File

@@ -1,47 +1,93 @@
/* Проверка eeprom_profiles на модели ПК. Русские пояснения сохранены в UTF-8. */
/* Exercise the production Timer2 SPI state machine; no hardware writes. */
/* Подключает <assert.h>: настройки и интерфейс assert. */
#include <assert.h>
/* Подключает "../../Source/Internal/spise2p.c": драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */
#include "../../Source/Internal/spise2p.c"
/* Продолжает список аргументов, полей или выражение static unsigned trace[300], widths[300], used;; порядок элементов сохраняется. */
static unsigned trace[300], widths[300], used;
/* Начинает функцию transfer; назначение модуля — проверка eeprom_profiles на модели ПК. */
static void transfer(unsigned long address, int write)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает buf[2] значением {0x1234,0x5678}, i; данные buf. */
unsigned buf[2]={0x1234,0x5678}, i;
/* Записывает message значением {buf,2,address}; данные message. */
SE2P_DATA message={buf,2,address};
/* Записывает used значением 0; данные used. */
used=0;
/* Проверяет if(write) spiSe2pWrite(&se2p,&message); else spiSe2pRead(&se2p,&message); последующий оператор выполняется только при истинном условии. */
if(write) spiSe2pWrite(&se2p,&message); else spiSe2pRead(&se2p,&message);
/* Цикл for(i=0;i<100 && !spiSe2pFree(&se2p);i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0;i<100 && !spiSe2pFree(&se2p);i++) {
/* Записывает SpiaRegs.SPITXBUF значением 0xdead; данные SPITXBUF. */
SpiaRegs.SPITXBUF=0xdead;
SpiaRegs.SPIRXBUF=0; /* WIP clear for write, deterministic read data. */
SpiaRegs.SPIRXBUF=0; /* WIP clear for write, deterministic read data. */ /* Записывает SpiaRegs.SPIRXBUF значением 0; данные SPIRXBUF. */
/* Записывает SpiaRegs.SPISTS.bit.INT_FLAG значением 1; INT флаг. */
SpiaRegs.SPISTS.bit.INT_FLAG=1;
/* Вызывает SPISE2P_DRV_tick. Продвигает неблокирующий автомат SPI EEPROM: команда, адрес, данные и ожидание завершения записи. */
SPISE2P_DRV_tick(&se2p);
/* Проверяет if(SpiaRegs.SPITXBUF!=0xdead); последующий оператор выполняется только при истинном условии. */
if(SpiaRegs.SPITXBUF!=0xdead) {
/* Вызывает assert с аргументами (GpioDataRegs.GPADAT.bit.GPIO19==0) в текущей последовательности операций. */
assert(GpioDataRegs.GPADAT.bit.GPIO19==0);
/* Записывает trace[used] значением SpiaRegs.SPITXBUF; данные trace. */
trace[used]=SpiaRegs.SPITXBUF;
/* Записывает widths[used++] значением (SpiaRegs.SPICCR.all&15)+1; данные widths. */
widths[used++]=(SpiaRegs.SPICCR.all&15)+1;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Вызывает assert с аргументами (spiSe2pFree(&se2p) && GpioDataRegs.GPADAT.bit.GPIO19==1) в текущей последовательности операций. */
assert(spiSe2pFree(&se2p) && GpioDataRegs.GPADAT.bit.GPIO19==1);
/* Записывает i значением 0; данные i. */
i=0;
/* Проверяет if(write); последующий оператор выполняется только при истинном условии. */
if(write) { assert(trace[i]==0x0600 && widths[i++]==8); }
/* Вызывает assert с аргументами (trace[i]==(write ? 0x0200 : 0x0300) && widths[i++]==8) в текущей последовательности операций. */
assert(trace[i]==(write ? 0x0200 : 0x0300) && widths[i++]==8);
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
#if EEPROM_M95M02
/* Вызывает assert с аргументами (trace[i]==((address>>16)<<8) && widths[i++]==8) в текущей последовательности операций. */
assert(trace[i]==((address>>16)<<8) && widths[i++]==8);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Вызывает assert с аргументами (trace[i]==(address&65535) && widths[i++]==16) в текущей последовательности операций. */
assert(trace[i]==(address&65535) && widths[i++]==16);
/* Вызывает assert с аргументами (trace[i]==(write ? 0x1234 : 0) && widths[i++]==16) в текущей последовательности операций. */
assert(trace[i]==(write ? 0x1234 : 0) && widths[i++]==16);
/* Вызывает assert с аргументами (trace[i]==(write ? 0x5678 : 0) && widths[i++]==16) в текущей последовательности операций. */
assert(trace[i]==(write ? 0x5678 : 0) && widths[i++]==16);
/* Проверяет if(write); последующий оператор выполняется только при истинном условии. */
if(write) { assert(trace[i]==0x0500 && widths[i++]==8); assert(trace[i++]==0); }
/* Вызывает assert с аргументами (i==used) в текущей последовательности операций. */
assert(i==used);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */
int main(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Вызывает SPISE2P_DRV_init с аргументами (&se2p) в текущей последовательности операций. */
SPISE2P_DRV_init(&se2p);
/* Вызывает transfer с аргументами (0x7ffc,0); transfer(0x7ffc,1) в текущей последовательности операций. */
transfer(0x7ffc,0); transfer(0x7ffc,1);
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
#if EEPROM_M95M02
/* Вызывает assert с аргументами (BALSAM167_EEPROM_FIRMWARE_BYTES==261884UL) в текущей последовательности операций. */
assert(BALSAM167_EEPROM_FIRMWARE_BYTES==261884UL);
/* Вызывает transfer с аргументами (0xfffe,0); transfer(0x10000,0) в текущей последовательности операций. */
transfer(0xfffe,0); transfer(0x10000,0);
/* Вызывает transfer с аргументами (0x20000,1); transfer(0x3fffc,0); transfer(0x3fffc,1) в текущей последовательности операций. */
transfer(0x20000,1); transfer(0x3fffc,0); transfer(0x3fffc,1);
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Вызывает assert с аргументами (BALSAM167_EEPROM_FIRMWARE_BYTES==32508) в текущей последовательности операций. */
assert(BALSAM167_EEPROM_FIRMWARE_BYTES==32508);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Завершает main и возвращает 0. */
return 0;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}

View File

@@ -1,22 +1,45 @@
/* Проверка eeprom_profiles/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: EEPROM_TEST_DEVICE_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef EEPROM_TEST_DEVICE_H
/* Определяет защитный символ или переключатель EEPROM_TEST_DEVICE_H для последующей компиляции. */
#define EEPROM_TEST_DEVICE_H
/* Подключает <stdint.h>: настройки и интерфейс stdint. */
#include <stdint.h>
/* Определяет защитный символ или переключатель interrupt для последующей компиляции. */
#define interrupt
/* Определяет защитный символ или переключатель EALLOW для последующей компиляции. */
#define EALLOW
/* Определяет защитный символ или переключатель EDIS для последующей компиляции. */
#define EDIS
/* Задаёт CLKMULT = 2; данные CLKMULT. */
#define CLKMULT 2
/* Задаёт SYSCLKOUT = 60000000UL; данные SYSCLKOUT. */
#define SYSCLKOUT 60000000UL
/* Задаёт M_INT14 = 0x2000; данные M_INT14. */
#define M_INT14 0x2000
/* Продолжает список аргументов, полей или выражение static unsigned IER;; порядок элементов сохраняется. */
static unsigned IER;
/* Описывает структуру bits; порядок полей определяет расположение данных. */
struct bits { unsigned GPIO16,GPIO17,GPIO18,GPIO19,SPISWRESET,BUFFULL_FLAG,INT_FLAG; };
/* Описывает структуру reg; порядок полей определяет расположение данных. */
struct reg { unsigned all; struct bits bit; };
/* Продолжает список аргументов, полей или выражение static struct { struct reg GPAMUX2,GPADIR; } GpioCtrlRegs;; порядок элементов сохраняется. */
static struct { struct reg GPAMUX2,GPADIR; } GpioCtrlRegs;
/* Продолжает список аргументов, полей или выражение static struct { struct reg GPADAT; } GpioDataRegs;; порядок элементов сохраняется. */
static struct { struct reg GPADAT; } GpioDataRegs;
/* Продолжает список аргументов, полей или выражение static struct { void (*TINT2)(void); } PieVectTable;; порядок элементов сохраняется. */
static struct { void (*TINT2)(void); } PieVectTable;
/* Продолжает список аргументов, полей или выражение static struct { unsigned InterruptCount; } CpuTimer2;; порядок элементов сохраняется. */
static struct { unsigned InterruptCount; } CpuTimer2;
/* Продолжает список аргументов, полей или выражение static struct { struct reg TCR; } CpuTimer2Regs;; порядок элементов сохраняется. */
static struct { struct reg TCR; } CpuTimer2Regs;
/* Продолжает список аргументов, полей или выражение static struct { struct reg SPICCR,SPICTL,SPISTS,SPIFFTX,SPIFFRX,SPIFFCT,SPIPRI;; порядок элементов сохраняется. */
static struct { struct reg SPICCR,SPICTL,SPISTS,SPIFFTX,SPIFFRX,SPIFFCT,SPIPRI;
/* Продолжает список аргументов, полей или выражение unsigned SPIBRR; uint16_t SPITXBUF,SPIRXBUF; } SpiaRegs;; порядок элементов сохраняется. */
unsigned SPIBRR; uint16_t SPITXBUF,SPIRXBUF; } SpiaRegs;
/* Начинает функцию InitCpuTimers; назначение модуля — проверка eeprom_profiles/stubs на модели ПК. */
static void InitCpuTimers(void) {}
/* Начинает функцию ConfigCpuTimer; назначение модуля — проверка eeprom_profiles/stubs на модели ПК. */
static void ConfigCpuTimer(void *p, unsigned long f, unsigned t) {(void)p;(void)f;(void)t;}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif