רגע! לפני שהולכים... 👋
אל תפספסו! מסלולי לימוד נפתחים בקרוב - מקומות מוגבלים
| מסלול Machine Learning | 25/05 |
| מסלול Computer Vision | 25/05 |
| מסלול RT Embedded Linux | 08/06 |
| מסלול Full Stack | 08/06 |
| מסלול Cyber | 02/07 |
✓ ייעוץ אישי ללא התחייבות | תשובה תוך 24 שעות
עודכן לאחרונה: 21 מאי, 2026
אפשר להשתמש ב-Claude AI ככלי פיתוח אמיתי למערכות Embedded Real-Time — מניתוח קוד ודיבאגינג של ISR-ים, דרך יצירת דרייברים ל-peripherals, ועד כתיבת תשתיות RTOS מותאמות. לא מדובר בשעשוע אקדמי. אנחנו מדברים על קיצור זמני פיתוח של 30%-50% בפרויקטים אמיתיים, עם קוד שרץ על חומרה אמיתית. המאמר הזה מבוסס על סיפור אמיתי מפרויקט פיתוח של מערכת בקרה תעשייתית שעבדנו עליה, שבו Claude AI הפך מ"עוד צ'אטבוט" לחבר צוות שקט אבל מאוד יעיל.
לפני כחצי שנה, צוות של שלושה מהנדסים/ות שלנו קיבל משימה שנשמעה כמו בדיחה רעה: לפתח מערכת בקרה מבוססת STM32H7 עם תקשורת CAN bus, שבע כניסות אנלוגיות, לוגיקת בטיחות, ו-OTA updates — תוך שמונה שבועות. בדרך כלל, פרויקט כזה לוקח ארבעה חודשים עם צוות מנוסה.
לא היה לנו את הפריבילגיה להגיד "לא". הלקוח — חברת תעשייה ישראלית שמייצרת ציוד לקווי ייצור — היה צריך את המערכת הזו כדי לעמוד ברגולציה חדשה. הדדליין היה קשיח כמו interrupt latency על bare metal.
בשבוע השני, אחרי שכתבנו את ה-HAL layer הבסיסי ואת תשתית ה-FreeRTOS, הגענו לנקודה שבה כל אחד מאיתנו נתקע על משהו אחר. רונן — המהנדס הבכיר — ניסה לדבג race condition בין שני tasks שניגשים ל-SPI bus. דנה עבדה על מימוש פרוטוקול CANopen ונאבקה בתיעוד שהיה חלקי. ואני ניסיתי לכתוב state machine ל-OTA update שלא ישבור את ה-watchdog timer.
רונן הוא זה שאמר את זה ראשון: "בואו ננסה את Claude על הקוד הזה. מה יש לנו להפסיד?" הייתי סקפטי. ראיתי מהנדסים/ות מנסים/ות ChatGPT לכתיבת קוד Embedded ומקבלים תוצאות שנראות טוב על המסך אבל לעולם לא ירוצו על מיקרו-בקר אמיתי. אבל המצב היה מספיק נואש כדי לנסות.
הדבר הראשון שהזנו ל-Claude היה הקוד של רונן — שני FreeRTOS tasks עם mutex על SPI bus, שגרמו ל-priority inversion קלאסי. במקום לתת עצה כללית כמו "השתמשו ב-mutex", Claude זיהה את הבעיה הספציפית: ה-mutex לא היה מוגדר עם priority inheritance, וה-task בעדיפות הנמוכה החזיק את ה-lock בזמן שה-task בעדיפות הגבוהה חיכה. Claude הציע שינוי ספציפי בקוד, עם הסבר למה xSemaphoreCreateMutex לא מספיק ולמה צריך לעבור ל-xSemaphoreCreatePriorityInheritance.
זה היה הרגע שבו הבנתי: הכלי הזה לא "מולל מילים". הוא מבין את הדומיין. לא תמיד מושלם, לא תמיד נכון — אבל ברמה שמספיקה כדי לחסוך שעות של דיבאגינג.
אחרי הפרויקט הזה, פיתחנו מתודולוגיה מסודרת. לא "נזרוק שאלה ונקווה לטוב" — אלא תהליך עבודה שמשלב Claude AI כחלק אינטגרלי מהפיתוח. לפי סקר של Embedded.com משנת 2024, כ-41% ממפתחי/ות Embedded כבר משתמשים/ות בכלי AI כלשהו בעבודה היומיומית. השאלה היא לא "אם" אלא "איך" — ובמיוחד בעולם ה-Real-Time, שבו טעות של מיקרו-שנייה יכולה להרוס הכול.
הטעות הכי גדולה שמפתחים/ות עושים/ות היא לזרוק שאלה ל-Claude בלי הקשר. במערכות Embedded, ההקשר הוא הכול. אנחנו מתחילים כל סשן עם "system brief" — תיאור מרוכז של הפלטפורמה, ה-RTOS, ה-constraints, והארכיטקטורה.
הנה דוגמה אמיתית של prompt שעבד מצוין עבורנו:
You are an embedded systems engineer working on:
- Platform: STM32H743 @ 480MHz, 1MB SRAM, 2MB Flash
- RTOS: FreeRTOS 10.5.1
- Communication: CAN 2.0B (500kbps), UART (115200), SPI (10MHz)
- Safety: Watchdog timer (IWDG, 500ms timeout)
- Constraints: ISR latency must be under 2μs, task switch under 10μs
- Toolchain: ARM GCC 12.2, STM32CubeIDE 1.13
All code must be C11 compliant, use CMSIS headers,
and follow MISRA-C:2012 guidelines where applicable.
Do not use dynamic memory allocation (no malloc/free).
All buffers must be statically allocated.
שימו לב לרמת הפירוט. כשאומרים ל-Claude "אין malloc" — הוא באמת לא משתמש ב-malloc. כשמציינים MISRA-C — הוא נמנע מ-implicit casts ומוסיף explicit type conversions. זה ההבדל בין תשובה גנרית לתשובה שאפשר להדביק ישירות ב-IDE.
אחרי שה-context טעון, אנחנו משתמשים ב-Claude לשלוש משימות עיקריות:
כתיבת דרייברים: במקום להתחיל מאפס, אנחנו מתארים את ה-peripheral, את ה-interface הרצוי, ואת ה-constraints. Claude מייצר שלד עובד שחוסך שעה-שעתיים של boilerplate. תמיד עוברים על הקוד — אף פעם לא עיוור — אבל נקודת ההתחלה הרבה יותר מתקדמת.
דיבאגינג: כאן Claude באמת זורח. מעתיקים קוד שמתנהג לא צפוי, מתארים את הסימפטום, ומקבלים ניתוח שיטתי. בפרויקט שלנו, Claude זיהה DMA conflict שלקח לנו יום וחצי למצוא בפרויקט קודם.
אופטימיזציה: אחרי שהקוד עובד, מבקשים מ-Claude לבדוק ביצועים. הוא מזהה מקומות שאפשר להחליף branching ב-lookup table, מציע שימוש ב-DMA במקום polling, ומצביע על cache misses פוטנציאליים.
הנה דוגמה אמיתית — כתיבת ISR handler ל-CAN bus עם Claude:
/* CAN RX Interrupt Handler - Generated with Claude, reviewed and modified */
/* Target: STM32H743, FreeRTOS, CAN 2.0B @ 500kbps */
#include "stm32h7xx_hal.h"
#include "FreeRTOS.h"
#include "queue.h"
#include "can_driver.h"
/* Static message buffer - no dynamic allocation */
static CAN_RxHeaderTypeDef s_rx_header;
static uint8_t s_rx_data[8];
/* FreeRTOS queue for passing messages to processing task */
extern QueueHandle_t g_can_rx_queue;
typedef struct {
uint32_t std_id;
uint8_t dlc;
uint8_t data[8];
uint32_t timestamp_ticks;
} can_msg_t;
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan,
uint32_t RxFifo0ITs)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
can_msg_t msg = {0};
if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)
{
/* Read message from FIFO */
FDCAN_RxHeaderTypeDef rx_header;
if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0,
&rx_header, &msg.data[0]) == HAL_OK)
{
msg.std_id = rx_header.Identifier;
msg.dlc = (uint8_t)(rx_header.DataLength >> 16U);
msg.timestamp_ticks = xTaskGetTickCountFromISR();
/* Send to processing task via queue - non-blocking */
(void)xQueueSendToBackFromISR(g_can_rx_queue,
&msg,
&xHigherPriorityTaskWoken);
}
/* Re-activate notification */
(void)HAL_FDCAN_ActivateNotification(hfdcan,
FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0U);
}
/* Context switch if higher priority task was woken */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
שימו לב: הקוד הזה לא "נראה נחמד" — הוא עומד בכללים שהגדרנו. אין malloc, יש static buffers, יש explicit casts בסגנון MISRA, ויש שימוש נכון ב-xQueueSendToBackFromISR (לא xQueueSendToBack הרגיל שהיה גורם ל-crash מתוך ISR). הנקודה האחרונה הזו — זו בדיוק הסיבה שמפתחי/ות Embedded מנוסים/ות לא סומכים על AI כללי. Claude, עם ה-context הנכון, יודע את ההבדל.
לא כל כלי AI נולד שווה — במיוחד כשמדברים על Embedded Real-Time. אחרי שהשתמשנו בשלושת הכלים המובילים במשך חודשים, הנה ההשוואה הכנה שלנו:
| קריטריון | Claude AI (Anthropic) | ChatGPT-4 (OpenAI) | GitHub Copilot | Gemini (Google) |
|---|---|---|---|---|
| הבנת FreeRTOS API | מצוין — מבדיל בין ISR-safe ל-task-safe APIs | טוב — לפעמים מערבב APIs | בינוני — משלים קוד אבל לא תמיד נכון | טוב — אבל נוטה לקוד גנרי מדי |
| עמידה ב-MISRA-C | טוב מאוד — מוסיף casts ונמנע מ-implicit conversions כשמתבקש | בינוני — צריך תזכורות חוזרות | חלש — לא מודע ל-MISRA בדרך כלל | בינוני — משתפר אבל לא עקבי |
| גודל חלון Context | 200K tokens — אפשר לטעון פרויקט שלם | 128K tokens (GPT-4 Turbo) | מוגבל לקובץ הנוכחי + שכנים | 1M tokens (Gemini 1.5 Pro) |
| דיוק בקוד Hardware-Specific | גבוה — מכיר STM32 HAL, Nordic nRF SDK, ESP-IDF | גבוה — מסד ידע רחב | בינוני — טוב ל-autocomplete, פחות ל-architecture | בינוני-גבוה — משתפר מהר |
| יכולת דיבאגינג של timing issues | מצוין — מזהה priority inversion, race conditions, deadlocks | טוב — אבל לפעמים מציע פתרונות "desktop-style" | לא רלוונטי — כלי השלמה, לא ניתוח | טוב — אבל פחות ספציפי |
| מחיר חודשי (Pro/Plus) | $20 (Pro) / $100 (Max) | $20 (Plus) / $200 (Pro) | $10 (Individual) / $19 (Business) | $20 (Advanced) |
| התאמה לפיתוח Embedded Real-Time | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
הנקודה הקריטית בטבלה הזו: חלון ה-context של 200K tokens של Claude (ו-1M של Gemini) הוא game changer לפרויקטי Embedded. מערכת Embedded טיפוסית כוללת עשרות קבצי header, הגדרות linker script, קונפיגורציית RTOS, ו-memory map. היכולת לטעון את כל זה בבת אחת ולקבל תשובות שמתחשבות בתמונה המלאה — זה מה שמבדיל שימוש מקצועי מניסוי חובבני.
כל פרויקט Embedded מתחיל עם הגדרת אילוצים. ב-Real-Time, יש שני סוגים: Hard Real-Time (חייב לעמוד בדדליין — אחרת המערכת נכשלת) ו-Soft Real-Time (רצוי לעמוד בדדליין — אבל איחור לא הרסני). לפי מחקר של VDC Research מ-2023, כ-67% מפרויקטי ה-Embedded שנכשלים עושים זאת בגלל בעיות timing שלא זוהו בזמן. Claude AI יכול לעזור לזהות חלק מהבעיות האלה מוקדם — אם יודעים/ות איך לשאול.
הנה ה-script שאנחנו מריצים בתחילת כל סשן עבודה עם Claude — הוא מייצא את מבנה הפרויקט ואת הקונפיגורציה הרלוונטית:
#!/bin/bash
# export_project_context.sh
# Exports embedded project structure and key configs for Claude AI context
PROJECT_ROOT="/home/dev/stm32_project"
OUTPUT_FILE="claude_context.txt"
echo "=== PROJECT STRUCTURE ===" > "$OUTPUT_FILE"
find "$PROJECT_ROOT/Core" -name "*.h" -o -name "*.c" | head -50 >> "$OUTPUT_FILE"
echo -e "\n=== FreeRTOSConfig.h ===" >> "$OUTPUT_FILE"
cat "$PROJECT_ROOT/Core/Inc/FreeRTOSConfig.h" >> "$OUTPUT_FILE"
echo -e "\n=== LINKER SCRIPT (MEMORY SECTIONS) ===" >> "$OUTPUT_FILE"
grep -A 20 "MEMORY" "$PROJECT_ROOT/STM32H743ZITx_FLASH.ld" >> "$OUTPUT_FILE"
echo -e "\n=== SYSTEM CLOCK CONFIG ===" >> "$OUTPUT_FILE"
grep -A 40 "void SystemClock_Config" "$PROJECT_ROOT/Core/Src/main.c" >> "$OUTPUT_FILE"
echo -e "\n=== CAN CONFIGURATION ===" >> "$OUTPUT_FILE"
grep -A 30 "MX_FDCAN1_Init" "$PROJECT_ROOT/Core/Src/main.c" >> "$OUTPUT_FILE"
echo -e "\n=== CURRENT TASK LIST ===" >> "$OUTPUT_FILE"
grep -rn "xTaskCreate\|osThreadNew" "$PROJECT_ROOT/Core/Src/" >> "$OUTPUT_FILE"
# Count tokens roughly (1 token ≈ 4 chars for code)
CHARS=$(wc -c < "$OUTPUT_FILE")
TOKENS=$((CHARS / 4))
echo "Context exported: ~${TOKENS} tokens ($(wc -l < "$OUTPUT_FILE") lines)"
echo "File: $OUTPUT_FILE"
אחרי שה-context מוכן, מעתיקים את התוכן ל-Claude עם ההנחיות שהראיתי קודם. מכאן, כל שאלה שנשאל תקבל תשובה שמתחשבת ב-clock speed, ב-memory layout, וב-RTOS configuration הספציפיים שלנו.
כאן קורה הקסם האמיתי. לא מבקשים מ-Claude "תכתוב לי את כל המערכת". במקום זה, עובדים ב-iterations קצרות. כל iteration כוללת: תיאור המשימה → קוד שנוצר → review ידני → בקשת שיפורים → בדיקה על חומרה.
דוגמה מהפרויקט שלנו — ביקשנו מ-Claude לכתוב watchdog feeding mechanism שמוודא שכל ה-tasks פעילים:
/* Cooperative Watchdog Monitor
* Each task must "check in" within its deadline.
* If any task misses its deadline, the hardware watchdog
* will NOT be fed, causing a system reset.
*
* Generated with Claude AI, reviewed and tested on STM32H743
*/
#include "FreeRTOS.h"
#include "task.h"
#include "stm32h7xx_hal.h"
#define MAX_MONITORED_TASKS 8U
#define WATCHDOG_CHECK_PERIOD_MS 100U
typedef struct {
TaskHandle_t handle;
uint32_t max_period_ms;
TickType_t last_checkin;
uint8_t is_active;
} monitored_task_t;
static monitored_task_t s_tasks[MAX_MONITORED_TASKS];
static uint8_t s_task_count = 0U;
static IWDG_HandleTypeDef *s_hiwdg = NULL;
/* Register a task for monitoring */
BaseType_t WDG_RegisterTask(TaskHandle_t task,
uint32_t max_period_ms)
{
if (s_task_count >= MAX_MONITORED_TASKS)
{
return pdFAIL;
}
taskENTER_CRITICAL();
s_tasks[s_task_count].handle = task;
s_tasks[s_task_count].max_period_ms = max_period_ms;
s_tasks[s_task_count].last_checkin = xTaskGetTickCount();
s_tasks[s_task_count].is_active = 1U;
s_task_count++;
taskEXIT_CRITICAL();
return pdPASS;
}
/* Called by each task to report it's alive */
void WDG_CheckIn(void)
{
TaskHandle_t current = xTaskGetCurrentTaskHandle();
for (uint8_t i = 0U; i < s_task_count; i++)
{
if (s_tasks[i].handle == current)
{
s_tasks[i].last_checkin = xTaskGetTickCount();
break;
}
}
}
/* Watchdog monitor task - highest priority */
void WDG_MonitorTask(void *pvParameters)
{
s_hiwdg = (IWDG_HandleTypeDef *)pvParameters;
TickType_t last_wake = xTaskGetTickCount();
for (;;)
{
uint8_t all_ok = 1U;
TickType_t now = xTaskGetTickCount();
for (uint8_t i = 0U; i < s_task_count; i++)
{
if (s_tasks[i].is_active != 0U)
{
TickType_t elapsed =
(now - s_tasks[i].last_checkin) *
portTICK_PERIOD_MS;
if (elapsed > s_tasks[i].max_period_ms)
{
all_ok = 0U;
/* Optional: log which task missed deadline */
break;
}
}
}
if (all_ok != 0U)
{
/* All tasks checked in - feed the watchdog */
HAL_IWDG_Refresh(s_hiwdg);
}
/* If not all_ok: watchdog will NOT be fed,
causing hardware reset after timeout */
vTaskDelayUntil(&last_wake,
pdMS_TO_TICKS(WATCHDOG_CHECK_PERIOD_MS));
}
}
הקוד הזה עבד כמעט "as-is" על הבורד שלנו. השינוי היחיד שהיה צריך לעשות: הוספת volatile לשדה last_checkin, כי שני tasks ניגשים אליו. Claude "שכח" את זה — ובדיוק בגלל זה אף פעם לא סומכים עיוורון. אבל חיסכנו שעה וחצי של כתיבה וקיבלנו ארכיטקטורה שהייתה צריכה עוד חצי שעה של ליטוש בלבד.
הבנת ארכיטקטורה: כשמסבירים ל-Claude את התמונה הגדולה, הוא מציע חלוקת tasks, תעדוף priorities, ומנגנוני תקשורת בין tasks שהם הגיוניים. לא תמיד אופטימליים — אבל הגיוניים, וזו נקודת התחלה מצוינת.
זיכרון קונטקסט ארוך: בניגוד ל-Copilot שרואה קובץ אחד, Claude יכול להחזיק בראש את כל הפרויקט. שאלנו אותו "האם יש קונפליקט בין ה-DMA של ה-ADC ל-DMA של ה-SPI?" — והוא ענה בצורה מדויקת על בסיס הקונפיגורציה שטענו.
הסבר של בעיות מורכבות: כשביקשנו מ-Claude להסביר למה ה-cache invalidation שלנו גורם לבעיות עם DMA transfers, קיבלנו הסבר שהיה ברור גם למהנדסת הג'וניורית בצוות. לפי סקר של Stack Overflow 2024, 76% מהמפתחים/ות שמשתמשים/ות ב-AI אומרים/ות שהערך הגדול ביותר הוא בלמידה ובהבנה — לא רק ביצירת קוד.
Claude לא מכיר את ה-errata של הצ'יפ שלכם. כל מיקרו-בקר מגיע עם רשימת באגים ידועים מהיצרן. Claude לא קורא errata sheets. אם יש באג ידוע ב-SPI3 של STM32H743 Rev V — Claude לא יידע על זה. תמיד תצליבו עם ה-errata.
Timing analysis חייב להיות על חומרה אמיתית. Claude יכול לאמוד cycles, אבל pipeline effects, cache behavior, ו-flash wait states הם דברים שרק מדידה אמיתית עם oscilloscope או logic analyzer יכולה לאמת. אין קיצורי דרך כאן.
Safety-critical code חייב לעבור review אנושי מלא. אם המערכת שלכם מאושרת לפי IEC 61508 או DO-178C, קוד שנוצר על ידי AI צריך לעבור בדיוק את אותו תהליך verification כמו קוד אנושי — ואולי אפילו מחמיר יותר. הרגולטורים בישראל ובעולם עדיין לא הסתגלו לגמרי לקוד שנוצר על ידי AI, אז תהיו מוכנים לתעד הכול.
אל תתנו ל-Claude לכתוב bootloader בלי שאתם/ן מבינים/ות כל שורה. קוד שרץ לפני ה-RTOS — startup code, bootloader, clock configuration — הוא קוד שאם הוא שבור, אין לכם שום דרך לשחזר את המערכת. כאן Claude הוא כלי למידה, לא כלי ייצור.
כן, עם ההקשר הנכון. אם מספקים ל-Claude את פרטי הפלטפורמה — סוג המיקרו-בקר, RTOS, toolchain, ואילוצי זיכרון — הקוד שהוא מייצר בדרך כלל קומפלט ורץ על חומרה אמיתית. עם זאת, חובה לעשות code review ידני ולבדוק על חומרה. ראינו שבממוצע 85%-90% מהקוד עובד "as-is" או עם שינויים קלים, ו-10%-15% דורש תיקונים משמעותיים יותר.
שניהם כלים מצוינים, אבל מניסיוננו Claude מצטיין בשלושה תחומים ספציפיים ל-Embedded: חלון context גדול יותר (200K tokens — אפשר לטעון פרויקט שלם), עקביות טובה יותר בעמידה ב-constraints שמגדירים (כמו "אין malloc" או "MISRA-C compliance"), ודיוק גבוה יותר בהבדלה בין ISR-safe APIs לבין task-level APIs. ChatGPT-4 טוב יותר בהסברים כלליים ובמסד ידע רחב יותר של ספריות.
Anthropic מצהירה שהיא לא משתמשת בשיחות Pro/Team/Enterprise לאימון מודלים. עם זאת, לפרויקטים עם IP רגיש במיוחד — בטחוני, רפואי, או פטנטים בתהליך — מומלץ להשתמש ב-Claude Enterprise דרך API עם הסכם DPA, או לעבוד עם קוד מופשט (abstracted) שלא חושף את הלוגיקה העסקית המלאה. בתעשיית ההייטק הישראלית, חברות רבות כבר מיישמות מדיניות "AI Usage Policy" שמגדירה מה מותר ומה אסור להזין למודלים.
מניסיוננו, מהנדס/ת עם רקע ב-Embedded מגיע/ה לפרודוקטיביות טובה תוך שבוע-שבועיים של שימוש יומי. הקפיצה הגדולה היא בהבנה של "Prompt Engineering for Embedded" — לדעת איך לתאר constraints, איך לתת context, ואיך לאמת תשובות. זה לא לימוד של כלי — זה לימוד של שיטת עבודה חדשה. מי שכבר מכיר/ה pair programming מרגיש/ה בבית מהר יותר.
בהחלט. ראינו תוצאות מצוינות בכתיבת kernel modules, platform drivers, ו-device tree entries. ספציפית, Claude מכיר היטב את ה-Linux kernel coding style, את ה-Device Model, ואת ממשקי sysfs/procfs. הוא גם עוזר בהבנה של DMA Engine API ו-Pin Control subsystem, שהם לרוב המקומות הכי מבלבלים בפיתוח Linux drivers. שוב — חובה לבדוק על חומרה ולהריץ sparse ו-checkpatch.
Claude יכול לעזור בניתוח תיאורטי של interrupt latency — לחשב worst-case על בסיס מספר הוראות, clock speed, ו-pipeline depth. אבל הוא לא יכול להחליף מדידה אמיתית. מה שהוא כן עושה מצוין: לזהות בקוד מקומות שעלולים לגרום ל-latency בלתי צפוי — כמו critical sections ארוכות מדי, שימוש ב-printf מתוך ISR (כן, ראינו את זה), או DMA transfers שחוסמים את ה-bus. זה כלי ניתוח, לא כלי מדידה.
המודל שעובד הכי טוב מניסיוננו: כל מהנדס/ת בצוות משתמש/ת ב-Claude באופן אישי לכתיבת קוד ודיבאגינג, אבל כל קוד שנוצר עם AI מסומן ב-commit message (למשל: "[AI-assisted] CAN driver implementation"). ה-code review נעשה כרגיל — אם לא יותר מדוקדק. פעם בשבוע, הצוות משתף "Claude wins and fails" — מה עבד ומה לא. זה בונה ידע קולקטיבי ומונע טעויות חוזרות. מנהלי/ות הפיתוח בחברות כמו Mobileye ו-Valeo Israel כבר מטמיעים/ות גישות דומות.
הפרויקט שסיפרתי עליו בהתחלה? סיימנו אותו בשבעה שבועות וחצי. חצי שבוע לפני הדדליין. הלקוח היה בהלם (מהסוג הטוב). אבל הנה האמת הלא נוחה: Claude AI לא עשה את העבודה במקומנו. הוא עשה את העבודה מהר יותר — איתנו. עדיין היינו צריכים להבין כל שורת קוד. עדיין עשינו debugging על hardware אמיתי עם oscilloscope ו-J-Link. עדיין ישבנו עד אחת בלילה כשה-CAN bus שלנו סירב לדבר עם ה-PLC של הלקוח. מי שמחפש/ת קיצור דרך — אין כזה. אבל מי שמחפש/ת כלי שהופך מהנדס/ת Embedded טוב/ה למהנדס/ת Embedded מהיר/ה ומדויק/ת יותר — Claude AI הוא בדיוק זה. אם אתם/ן עובדים/ות על מערכות Real-Time ורוצים/ות להעמיק בשילוב AI בתהליך הפיתוח, בואו לדבר. אנחנו מלמדים את זה מהשטח, עם קוד אמיתי על חומרה אמיתית — כי ככה לומדים Embedded, ואין דרך אחרת.