[uquote="VladislavS",url="/forum/viewtopic.php?p=3493949#p3493949"]
a5021, подгорает? Я три дня за вами скакал, чтобы сказать как вы мне безразличны? Отобрали победу в упражнении "последнее слово за мной" ввиду неявки соперника ?

[/uquote]
У вас довольно причудливые фантазии. Лучше бы на вопросы ответили по поводу вашего аутентичного бреда.
Мурик, извини, подставил тебя, но это лишний раз показывает "прозрачность" кода. А представь, в таком стиле не один регистр записан, а все!
Кем он так записан и почему? В силу каких подвижек сознания могли образоваться такие искажения окружающей действительности? Даже крайние криворучки вполне могут перенести копипастой дифайны из заголовочного файла без ошибок. Какая нелегкая так надругалась над двумя славными программерами, что они не в состоянии без ошибок скопировать несколько строк?
Тут мне подумалось, что нельзя инвалидов умственного труда бросать в трудную минуту. Если у вас трясутся руки, двоится в глазах, звенит в ушах и мысли с глухим стуком бьются друг об друга, что копирование нескольких строк представляет непосильную задачу, то предлагаю воспользоваться специальным протезом когнитивных способностей, что я для вас только что сваял на коленке:
Спойлер
Код: Выделить всё
import sys, re
(p, q, d, t, pad, rxp) = (0, 0, [], sys.argv[1].split('->'), lambda a, b, c : (len(a[1]) if len(a[1]) > b else b, len(a[0]) if len(a[0]) > c else c), re.compile(r'//.*?(\r\n?|\n)|/\*.*?\*/'))
for line in sys.stdin:
if line.find(t[0] + "_" + t[1]) != -1:
w = line.split()
if w[0] == "#define" and not w[1].endswith("_Pos"):
s = rxp.search(line)
w[0] = s.group(0).replace("!<", " ").rstrip(' \t\n\r\*\/') if s else "/* "
d.append((w[1], w[0]));
(p, q) = pad(w, p, q)
for x in d:
print(" ", sys.argv[1] + " = (\n " if x[0] == d[0][0] else "", " 0 *", x[0].ljust(p), "| " + x[1].ljust(q + 1) + "*/" if x[0] != d[-1][0] else " " + x[1].ljust(q + 1) + "*/" + "\n );")
Это скрипт на питоне. Двенадцать строк на все про все. Со стандартного ввода он берет содержимое CMSIS файла для соответствующего МК STM32. Также в командной строке указывается регистр, инициализацию которого надлежит сформировать. Например, для получения кода инициализации регистра SPI->CR1 для STM32F103xb вызов скрипта должен выглядеть так:
reg_init.py "SPI->CR1" < Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h
код на выходе при этом получится такой:
Спойлер
Код: Выделить всё
SPI->CR1 = (
0 * SPI_CR1_CPHA_Msk | /* 0x00000001 */
0 * SPI_CR1_CPHA | /* Clock Phase */
0 * SPI_CR1_CPOL_Msk | /* 0x00000002 */
0 * SPI_CR1_CPOL | /* Clock Polarity */
0 * SPI_CR1_MSTR_Msk | /* 0x00000004 */
0 * SPI_CR1_MSTR | /* Master Selection */
0 * SPI_CR1_BR_Msk | /* 0x00000038 */
0 * SPI_CR1_BR | /* BR[2:0] bits (Baud Rate Control) */
0 * SPI_CR1_BR_0 | /* 0x00000008 */
0 * SPI_CR1_BR_1 | /* 0x00000010 */
0 * SPI_CR1_BR_2 | /* 0x00000020 */
0 * SPI_CR1_SPE_Msk | /* 0x00000040 */
0 * SPI_CR1_SPE | /* SPI Enable */
0 * SPI_CR1_LSBFIRST_Msk | /* 0x00000080 */
0 * SPI_CR1_LSBFIRST | /* Frame Format */
0 * SPI_CR1_SSI_Msk | /* 0x00000100 */
0 * SPI_CR1_SSI | /* Internal slave select */
0 * SPI_CR1_SSM_Msk | /* 0x00000200 */
0 * SPI_CR1_SSM | /* Software slave management */
0 * SPI_CR1_RXONLY_Msk | /* 0x00000400 */
0 * SPI_CR1_RXONLY | /* Receive only */
0 * SPI_CR1_DFF_Msk | /* 0x00000800 */
0 * SPI_CR1_DFF | /* Data Frame Format */
0 * SPI_CR1_CRCNEXT_Msk | /* 0x00001000 */
0 * SPI_CR1_CRCNEXT | /* Transmit CRC next */
0 * SPI_CR1_CRCEN_Msk | /* 0x00002000 */
0 * SPI_CR1_CRCEN | /* Hardware CRC calculation enable */
0 * SPI_CR1_BIDIOE_Msk | /* 0x00004000 */
0 * SPI_CR1_BIDIOE | /* Output enable in bidirectional mode */
0 * SPI_CR1_BIDIMODE_Msk | /* 0x00008000 */
0 * SPI_CR1_BIDIMODE /* Bidirectional data mode enable */
);
Все дифайны и комментарии выдираются, форматируются и подаются в удобной для дальнейшей ручной подгонки форме. Поклонники волшебных чисел, разумеется, не оценят, но мне показалось вполне употребимым. Покрутил на разных заголовочных файлах и разных регистрах, вроде формируется все правильно.