Вы ещё не поняли, что это звиздобол, котрый не знает ни Си, ни языка ассемблера?
Просто объем знаний мал для вступления в спор по такому вопросу как ASM vs C/C++
…
де Диван не знает ничего, он просто пустое место. Это было ясно с его первого поста … ну может второго, лень искать.
Про фьюзы было уже достаточно.
Я же давно написал, что
обрывки старых знаний уже не способны прикрыть стыд невежества
Не понимаю коллег Садмана и Командира, которые не прекращают с ним общаться “по-существу”.
Так от скуки …
Форум иногда часами мертв …
А тут @dedivan с самозакапывающей лопатой …
Сила в умении комбинировать ASM + C/C++
или C/C++ + ASM
и сразу пример:
Код из первого сообщения темы - Провел тест. OLED дисплей 128x64 на чипе SSD1306 подключен через I2C, соплями, без пайки и работает с частотой 271+ FPS
Глубоко не полезу - одна функция __reset
...
uint32_t const __Vector_Table [] __attribute__ ((section ("RESET")))={
(uint32_t) &__Vector_Table [2], //Top of stack
(uint32_t) &__reset, //Reset handler
0x20005000,
PERIPH_BB_BASE+((uint32_t)&RCC->CR-PERIPH_BASE)*32+RCC_CR_HSION_Pos*4,
PERIPH_BB_BASE+((uint32_t)&FLASH->ACR-PERIPH_BASE)*32+POS(FLASH_ACR_LATENCY_1)*4,
(uint32_t)&RCC->CFGR,
RCC_CFGR_PLLMULL9|RCC_CFGR_PLLSRC|RCC_CFGR_PPRE1_DIV2,
PERIPH_BB_BASE+((uint32_t)&RCC->CFGR-PERIPH_BASE)*32+POS(RCC_CFGR_SW_1)*4
};
...
void __attribute__ ((naked)) __reset(void){
__asm volatile(
"POP {r1-r6,r8,r9,r10} \n\t"
"MOV sp,r1 \n\t"
"MOVS r1,1 \n\t"
"STR r1,[r2,%0] \n\t" //HSE On
"STR r1,[r3] \n\t" //FLASH LATENCY = 2
"wait_HSERDY: \n\t"
"LDR r0,[r2,%1] \n\t"
"MOVS r0,r0 \n\t"
"BEQ wait_HSERDY \n\t"
"STR r5,[r4] \n\t" //PLL MULL = 9
"STR r1,[r2,%2] \n\t" //PLL On
"wait_PLLRDY: \n\t"
"LDR r0,[r2,%3] \n\t"
"MOVS r0,r0 \n\t"
"BEQ wait_PLLRDY \n\t"
"STR r1,[r6] \n\t" //PLL selected as system clock
"wait_PLL: \n\t"
"LDR r0,[r6,%4] \n\t"
"MOVS r0,r0 \n\t"
"BEQ wait_PLL \n\t"
"STR r7,[r2] \n\t" //HSI Off
"STR r9,[r8,4] \n\t"
"STR r10,[r8] \n\t"
"B __main \n\t"
:
: "X" ((RCC_CR_HSEON_Pos-RCC_CR_HSION_Pos)*4),
"X" ((RCC_CR_HSERDY_Pos-RCC_CR_HSION_Pos)*4),
"X" ((RCC_CR_PLLON_Pos-RCC_CR_HSION_Pos)*4),
"X" ((RCC_CR_PLLRDY_Pos-RCC_CR_HSION_Pos)*4),
"X" ((POS(RCC_CFGR_SWS_1)-POS(RCC_CFGR_SW_1))*4)
:
);
}
Первый же POP заполнит кучу регистров данными из “таблицы векторов” и с этими данными (в основном через bit-banding) STM32 запустится на 72 МГц …
Считанные байты кода и процессор готов к main …
Какого размера код под STM32 порождает запуск на 72 МГц (void Set_SysClock72Mhz(void)) и пустой main у вас ?
На чём этот код ??? C/C++ + ASM …
И снять старый и впять новый, так ты значит паяльщик а программист.
Интересно, как он “через барышню” постит нам тут ссылки? Или все же на нормальный пэка влез и от винды его не тошнит?
Плохо Вы знаете.
Во-первых, Вы, похоже, не знаете, что стеки бывают самые разные, и большинству из них никакие вызовы метода или функции не страшны.
Во-вторых, метод или функция совсем не обязательно что-то вообще делают со стеком. В языке Си (Си = это Вам не Ассемблер!) специально для таких случаев есть зарезервированное слово inline
.
Зато я сильно подозреваю, что Вы мало с кем из “Си-писателей” знакомы. Точнее, либо вообще ни с кем, либо с парочкой самых-самых зеленых, которых то и в Си-писатели записывать рано.
Отнюдь.
Тока ща имел возможность, все это прочитать, у меня на душе спокоествие настало, очередной, не признаный гений уходит в быль…
Пойду в полянах отмечусь))
Так то и я смогу… (цы) скомпилируй, посмотрим тогда.
Все, Командир, сливайся
У него нет пэка, у него “писюк”. Нет, не так, ПИСЮК!
Это же не мне понадобилось … это @dedivan что то там пытался на ASM разглядеть в стеке …
На Си можно применять ко всем вызовам различные квалификаторы, в том числе и такие, которые затрагивают стек.
А вот случай с USB не показатель. Зачем создавать проблему, а потом её героически решать? Я не знаю кто и зачем этот v-USB сделал, но не проще ли использовать специализированные средства?
Пипец ребята… вы все еще кормите этого тролля? Я и не знал… я еще на первой сотне заблочил у себя всю тему и даже не подозревал, что тут столько всего “навалили”.
Кстати, рекомендую - под окном ответа ставите режим темы “Без уведомлений” - и вы просто перестанете видеть эту тему в списках форума, как будто ее никогда и не было.
Только штоп в другие топики не прорвался.
Тут на форуме и так особой активности нет. Ежели еще и тролей заблочить - то вообще нечего будет почитать.
Книжки нужно читать, пока еще не окончательно запретили Ну и поговаривают, за пределами forum.arduino.ru есть другие сайты. Хотя это не точно
Вопрос надо ставить шире- кто добавил в язык си асм-вставки, зачем, если на чистом си всё можно написать?
Вопрос к местным троллям.
И вообще самые правильные и красивые стихи должны писаться пером на бумаге из берёзы.
И зачем на автомобилях дураки придумали заднюю передачу? Мы ведь вперёд ездим. А ещё и инструмент(ассемблер) в багажнике, когда проще вызвать эвакуатор за 100км и отогнать в сервис(Си) для замены колеса.