Цитата(Haamu @ Mar 19 2014, 06:17)

Такое ощущение складывается, что ASF писала не одна команда программистов, а будто куски нахватали из разных мест и собрали в кучу.
Категорически неправильное ощущение. Все дело в том, что ASF API работает на всех камнях от Atmel'а (AVR, AVR32, xMega, Cortex'ы). Как следствие универсальности усложненность и избыточность. Поэтому подходит для быстрого прототипирования, но не желательно (не невозможно, а нежелательно) применять его в конечном изделии. Но тенденция в Ваших вопросах мне нравится. Еще немного и Вы поймете, что ASF или STM Lib всего лишь средство прототипирования.
Что до кокретно взятого SPI. Возъмем его
API. Что мы имеем?
Код
spi_set_baudrate_div(...)
spi_set_bits_per_transfer(...)
spi_set_clock_phase(...)
spi_set_clock_polarity(...)
spi_enable_clock(...)
Вы видите более удобной запись в стиле ST:
Код
struct {
.baud = ...
.bits = ....
.CPA = ....
.CPH = ....
} spi_master;
eneble_periph_clock(...)
spi_deinit();
spi_init(spi_master):
Ну не знаю... Я даже не буду говорить о том, что память под структуру выделяется либо глобально (и забирает ее у проекта) либо в стеке и тем самым заставляя его расти. Но он просто выглядит куда более громозко и неиформативно. Конечно, если знать что такое SPI, какие главные параметры ему надо выставить. Но ведь даже ST не снимает этого ограничения. Я в свое время долго думал над этой их структурой. Половина структуры относится к SPI, половина к I2S при этом что к чему неочевидно. А еще и есть поля, относящиеся и к одному и к другому. А хваленые коментарии в коде не помогают чуть меньше чем совсем. Только чтение datasheet и понимание текста функции init(). Здесь (IHMO) все гораздо прозрачнее.
Да и вообще, но по моим ощущениям именно это и есть крайне неудобная часть в STM библиотеке. Хуже только USB стек с бесконечными
Код
unsigned char devDesc[] = {
0xFA, 0xFB, // wVendorId
0x00, 0x01, // wProductId
....
}
Только за это расстрелял бы на месте.
Сообщение отредактировал Alex A. Mihaylov - Mar 20 2014, 00:32