Перейти к содержанию
    

Polaris

Свой
  • Постов

    299
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Polaris


  1. 16 hours ago, Grizzly said:

    Это сборка out of source, когда она ведется отдельно от исходных файлов. Мне она тоже более симпатична.

    Согласен, не вижу смысла гадить в каталог с исходниками, даже если это делает CMake

  2. 2 hours ago, Grizzly said:

    А сами объектные файлы во время компиляции создаются? И где вообще .out находится, если указать CMake'у результат сборки класть в bin?

    Не уверен по этому поводу, потому что если он где-то и находится, то make его сразу же после ошиьки стирает. Но предполагаю, что находится он действительно в bin.

    На другом форуме обратили внимание на то, что arm-none-eabi-size обращается к ${EXECUTABLE}, который предполагается найти в корне, поэтому нужно обращаться к ./bin/${EXECUTABLE}.

    Но я выяснил еще одну вещь - даже если такой подход сработает, то все равно основная работа будет вестись в корне, чего мне не хотелось бы, проблема тут больше с запуском cmake.

    Я это делал вот так:

    cmake -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi-gcc.cmake
    mingw32-make

    Теперь же делаю вот так:

    cmake -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi-gcc.cmake . -Bbin
    cmake --build ./bin

    Теперь вся служебная информация оказывается в bin, включая и генерируемые map, hex, bin

  3. Вот полный текст CMakeLists.txt:

    cmake_minimum_required(VERSION 3.5)
    project(xxx)
    
    enable_language(C ASM)
    set(CMAKE_C_STANDARD 99)
    set(CMAKE_C_STANDARD_REQUIRED ON)
    set(CMAKE_C_EXTENSIONS OFF)
    
    set(EXECUTABLE ${PROJECT_NAME}.out)
    
    include_directories(src)
    set(sources 
    	src/main.c
    	)
    add_executable (${EXECUTABLE} ${sources})
    
    target_compile_definitions(${EXECUTABLE} PRIVATE
            -D__ATSAMC21E18A__ 
    		-D__TARGET_CPU_CORTEX_M0
    		)
    		
    target_compile_options(${EXECUTABLE} PRIVATE
            -mcpu=cortex-m0plus
    		-march=armv6-m
            -mthumb
            -mfloat-abi=soft
            -fdata-sections
            -ffunction-sections
    		-fno-strict-aliasing
            -Wall
            -O2
    		)
    
    target_link_options(${EXECUTABLE} PRIVATE
            -Tsys/samc21g18a_release.ld
            -mcpu=cortex-m0plus
    		-march=armv6-m
            -mthumb
            -mfloat-abi=soft
            -Wl,-Map=${PROJECT_NAME}.map,--cref
            -specs=nano.specs
            -Wl,--gc-sections
            -lm
            -lc
            -lnosys
            )
    
    target_link_libraries(${EXECUTABLE} PRIVATE
    		m
    		)
    
    add_custom_command(TARGET ${EXECUTABLE}
            POST_BUILD
            COMMAND arm-none-eabi-size ${EXECUTABLE})
    		
    add_custom_command(TARGET ${EXECUTABLE}
            POST_BUILD
            COMMAND arm-none-eabi-objcopy -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex
            COMMAND arm-none-eabi-objcopy -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin)

     

  4. Пытаюсь заставить собираться проект под Cortex-M0+ при помощи GCC и CMake, в принципе, все получается, но один момент никак не хочет работать так, как нужно мне.

    Мне хотелось бы, чтобы результат работы линкера сбрасывался не в корень проекта, где лежит CMakeLists.txt, а в подкаталог проекта, например, в bin.

    Пишу что-то такое:

    #set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin)

    Каталог bin в результате прогона make создается, но он пуст, а прогон make дает следующую ошибку:

    [100%] Linking C executable bin\xxx.out
    arm-none-eabi-size: 'xxx.out': No such file
    mingw32-make[2]: *** [CMakeFiles\xxx.out.dir\build.make:913: bin/xxx.out] Error 1
    mingw32-make[2]: *** Deleting file 'bin/xxx.out'
    mingw32-make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/xxx.out.dir/all] Error 2
    mingw32-make: *** [Makefile:90: all] Error 2

    Если убрать определение CMAKE_RUNTIME_OUTPUT_DIRECTORY, то все работает, но файлы бросаются в корневой каталог, что неудобно.

    В чем может быть проблема?

    В данный момент я работаю с Windows и mingw.

  5. Да, и чтобы два раза тему не открывать, у меня тут тоже проблемка нарисовалась с ADC.

    Раньше я всегда использовал только ADC0, теперь стало необходимо опрашивать несколько каналов с ADC0, а ADC1 запускать на конвертацию сразу целого блока по DMA. Все вроде бы хорошо, но выяснилось, что теперь при обращении к ADC0, когда я меняю канал измерения, код виснет на ранее совершенно безопасной строчке.

      /**< Disable ADC */
      channel->CTRLA.bit.ENABLE = 0;
      while (channel->SYNCBUSY.reg & ADC_SYNCBUSY_ENABLE);
      /**< Set channel */
      channel->INPUTCTRL.bit.MUXPOS = input;
      /**< Enable ADC */
      channel->CTRLA.bit.ENABLE = 1;
      while (channel->SYNCBUSY.reg & ADC_SYNCBUSY_ENABLE);
      /**< Reset ready flag */
      channel->INTFLAG.reg |= ADC_INTFLAG_RESRDY;
      /**< Start conversion */
      channel->SWTRIG.bit.START = 1;

    Строчка эта: 

    Quote

    while (channel->SYNCBUSY.reg & ADC_SYNCBUSY_ENABLE)

    Отладчик показывает, что в SYNCBUSY бит ENABLE больше не сбрасывается. Если отключить ADC1, то все работает нормально.

    Очень странно, что одна инстанция так влияет на другую. Вроде бы в эррате ничего про подобные коллизии нет. Если вдруг кто имеет объяснение этому поведению - буду рад послушать.

  6. Если есть инкремент в назначении или источнике, то нужно модифицировать адрес, 

    dmadescr.BTCNT.reg = DMAC_BTCNT_BTCNT(4);
    

    будет недостаточно, нужно еще сделать:

    dmadescr.DSTADDR.reg =	(uint32_t) &adcresult;
    
    descriptor.DSTADDR.reg += 4 * sizeof(uint16_t);

    В даташите стоит:

    DSTADDR[31:0] Transfer Destination Address
    This bit group holds the destination address corresponding to the last beat transfer address in the block transfer.

     

    Уж не знаю, зачем они это сделали, но у меня работает.

  7. On 6/26/2020 at 8:59 PM, ivan24190 said:

    Для того чтобы АЦП запускался по событию 'CaptureCompare', необходимо в регистре CCER таймера установить бит разрешения нужного канала, например TIM3->CCER |= TIM_CCER_CC1E; При этом АЦП уже должен быть настроен на запуск от данного события.

     

    Ставил, эффект нулевой, что работает с третьим, не работает с первым.

  8. On 5/20/2013 at 3:15 PM, digitAll said:

    Обобщаю вопрос:

    Кто делал запуск АЦП по любому ADC_ExternalTrigConv_Tх_CCх, а не ADC_ExternalTrigConv_Tх_TRGO любого таймера? Поделитесь кодом плз.

    Таймер тикает как надо, пробовал ШИМ с него, прерывания работают, а вот запустить АЦП - никак...

    Перепробовал все мыслимые и не очень комбинации, но лыжи не едут :(

    Аналогичная ситуация, STM32F446, ADC_ExternalTrigConv_T1_CCх не захотел работать ни под каким соусом.

  9. 17 hours ago, esaulenka said:

    Мда. Пока не наступишь на эти грабли, и не догадаешься...

    А проблема документирована, на самом деле: http://ww1.microchip.com/downloads/en/DeviceDoc/80000740D.pdf 
    "The FDPLL96M exhibits high period jitter and is not suitable for accurate clocking."

    В новых ревизиях поправлено.

     

    Но насколько этот PLL inaccurate, ни атмел, ни микрочип не сознались...

    Да, интересный факт, я там даже не искал, смотрел исключительно главу про CAN. Но на самом деле у меня ревизия E, так что, думаю, поправили не слишком хорошо. Но с их качеством документации оно и неудивительно.

  10. 6 hours ago, esaulenka said:

    Я правильно понимаю, что величина этого выброса - заметно больше 5 вольт? Проверьте ещё разик, что земли у всех участников соединены.

     

    Попробуйте ткнуть осциллографом в TXD между контроллером и трансивером.

    Да, с землей есть такое, но суть оказалась не в этом. Проблема была в слишком большом разбросе частот у висящих на шине устройств, для такой скорости в ATSAMC21 нельзя использовать PLL, у него точность оказалась даже ниже, чем у внутреннего генератора, когда запитал ядро от внутреннего, а CAN от внешнего кварца без всякого умножителя, проблема исчезла начисто.

    Но все равно спасибо за идею!

  11. Занимаюсь реализацией самописного протокола для CAN на ATSAMC21, в целом все понятно и четко, скорость работы - 500 кбит/с. Для отладки и управления со стороны компьютера использую CAN-USB адаптер от Kvaser. Вроде бы все работало, начал смотреть, что там происходит на шине и обнаружил достаточно большое количество Error frames. Причем обнаруживаются они только в том случае, когда на шине более одного участника. Если к адптеру подключена одна плата - все хорошо, подключаешь вторую - до одного процента пакетов испорчены. Выглядит это вот так:

    SCR02.thumb.jpg.e6251a42a77beb5cde0c2f8961ddd705.jpg

    SCR03.thumb.jpg.da73a727099fb6c08906f2396dcdfac1.jpg

    SCR04.thumb.jpg.6851bb805b08cb974859f33527f5c3dd.jpg

    Зеленый канал - это состояние питания микроконтроллера, желтый - сама шина.

    Второй участник при этом совершенно точно ничего не передает, я специально становился в отладке на функцию передачи - она ни разу не вызывалась. Кабель достаточно короткий, с обеих сторон терминирован 120 Ом.

    Как видно из скриншотов, выброс связан с искажение бита ACK, но кто это может делать - я совершенно не понимаю. Фильтры на участниках настраивал и таким образом, чтобы отбрасывать чужие пакеты, ничего не дало, в принципе, и не должно было дать, это же ACK.

     

    Что бы это могло быть?

  12. On 12/6/2019 at 5:20 PM, DASM said:

    Вы имеете в виду чисто трансиверов? Такое и у Силабса ,к примеру есть. Правда там тоже уровень команд для встроенного проца неизвестной породы. Если подумать - то оно и правда ни к чему, коэффициенты fir фильтров что ли ручками задавать?

    Но вот сильно печалит, когда это API  работает под ОСей, как есть например у СС13хх серии Техаса, что влечет категорические рекомендации ее использовать, а вот такой футбол нам уже не нужен. Силабс, похоже, тоже использует купленный ими микриум с UCOS,  но заставлять использовать не требует с внешней стороны.

    Нет, на Нордике вполне можно организовать собственный протокол или использовать их же минималистичный Shockburst, вся работа радио там доступна для управления на достаточно высоком уровне.

  13. 3 hours ago, DASM said:

    общая практика для всего, что попадает под вские FCC . Дается API и либы. Все. Это у Техаса, Силабса, Нордика так, да по-моему у всех почти так. Впрочем к видеоядрам процев - так же. Да что там, уже и на процы - uboot есть, линух есть - что вам еще надо ? :)

    не сомневайтесь. Не дадут.

    Описание голого радио у Nordic все-таки есть

  14. Доброго всем времени суток.

    Столкнулся тут со странным поведением DMA у STM32F446 при использовании DMA2 для комутации GPIO. Необходимость возникла из-за того, что на новой плате не были предусмотрены инвертеры уровня UART, а ведомое устройство в режиме загрузчика их, как оказалось, требует. С STM32F302 проблем бы не было, там есть инверсия уровней, но вот в более быстром и сложном F446 такой инверсии нет, плату переделывать не хотелось, пришлось искать решение в виде софтового UART на DMA.

    В плане передачи проблем никаких нет, все работает, тайминги и уровни не вызывают никаких вопросов, а вот в плане приема бьюсь уже неделю.

    Вот так выглядит инициализация DMA:

      static uint32_t Buff[128];
    
      DMA_DeInit(DMA2_Stream1);
      DMA_StructInit(&DMA_InitStructure);
      DMA_InitStructure.DMA_BufferSize = 0;
      DMA_InitStructure.DMA_Channel = DMA_Channel_7;
      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
      DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
      DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
      DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&Buff;
      DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
      DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
      DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(GPIOA->IDR);
      DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
      DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
      DMA_Init(DMA2_Stream1, &DMA_InitStructure);

    Вот так инициализирую таймер, который будет задавать тактовую частоту (57600):

      TIM_DeInit(TIM8);
    
      TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
      TIM_TimeBaseStructure.TIM_Period = TIMER_PERIOD - 1;
      TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t)(SystemCoreClock / 1 / TIMER_FREQ) - 1;
      TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
      TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
      TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
    
      TIM_GenerateEvent(TIM8, TIM_EventSource_Update);
      TIM_Cmd(TIM8, ENABLE);
      TIM_DMACmd(TIM8, TIM_DMA_Update, ENABLE);

    Частоты однозначно верные, потому что тот же таймер используется для передачи, а там все ок, как в плане приема на стороне прибора, так и на осциллографе.

    И вот так происходит прием:

      uint8_t i;
      uint8_t val = 0;
    
      /**< Empty buffer */
      memset(Buff, 0, 10);
      DMA_Cmd(DMA2_Stream1, DISABLE);
      DMA_ClearFlag(DMA2_Stream1, (DMA_FLAG_TCIF1 | DMA_FLAG_HTIF1 | DMA_FLAG_TEIF1));
      /**< Activate edge interrupt */
      WaitingRxUART = true;
      EXTI_ClearITPendingBit(EXTI_Line1);
      NVIC_EnableIRQ(EXTI1_IRQn);
      /**< Wait till DMA transmission is ready */
      while ((DMA2_Stream1->CR & DMA_SxCR_EN) || (WaitingRxUART == true));
      /**< Stop edge interrupt */
      NVIC_DisableIRQ(EXTI1_IRQn);
      DMA_Cmd(DMA2_Stream1, DISABLE);
      /**< Decode data from DMA buffer */
      /**< We are processing 8 data bits, don't know yet why it should be started with Buff[2]? */
      for (i = 2; i < 10; i++)
      {
        val >>= 1;
        if ((Buff[i] & (1 << 1)) == 0)
          val |= 0x80;
      }  

    При комутации приемопередатчика возникает короткий импульс, который нужно фильтровать, это происходит в прерывании:

    /**< External interrupt for detecting rising edge of UART packet */
    void EXTI1_IRQHandler(void)
    {
      if (EXTI_GetITStatus(EXTI_Line1) != RESET)
      {
        /**< Clear the UART EXTI line pending bit */
        EXTI_ClearITPendingBit(EXTI_Line1);
        /**< Wait 1 us and check input */
        TIM10->CNT = 0;
        TIM10->SR = 0;
        while ((TIM10->SR & TIM_IT_Update) == 0);
        if ((GPIOA->IDR & (1 << 1)) == 0)
          return;
        /**< Real start bit received, no spike */
        /**< Stop edge interrupt */
        NVIC_DisableIRQ(EXTI1_IRQn);
        WaitingRxUART = false;
        /**< Start DMA GPIO capture */
        /**< Receive 10 bits (8 data bits * 2 stop bits) */
        TIM8->CR1 &= ~TIM_CR1_CEN;
        TIM_SetCounter(TIM8, TIM8->ARR / 2);
        TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
        TIM8->CR1 |= TIM_CR1_CEN;
        DMA_SetCurrDataCounter(DMA2_Stream1, 10);
        DMA_Cmd(DMA2_Stream1, ENABLE);
      }
    }

    Все вроде бы хорошо работает, прием идет, выбросы отфильтровываются, но есть одно но - периодически, причем достаточно часто, происходит сбой, вместо, к примеру 0xAA принимается 0xAB, я посмотрел, что оказывается в буфере, куда собираются значения IDR, и обнаружил там наряду с нормальными значениями состояния входов GPIO пару нулевых значений, причем они идут не первыми и не последними, то есть, буффер выглядит так:

    0x9B6C, 0x00, 0x00, 0x9B6C, 0x9B6E, ...

    Такого не может быть, потому что просто не может быть. Такое впечатление, что канал DMA  с чем-то коллидирует и пишет в буфер нули.

    Может быть, кто-то сталкивался с подобным? Буду рад услышать какие-то советы, потому что голова уже сломалась.

    На осциллографе данные выглядят нормально (за исключением выбросов), но они точно фильтруются.

  15. 1 hour ago, iiv said:

    Вы наверное удивитесь, но стандартная зарплата посдока в настоящий момент (свежезащитившегося кандидата наук) в Германии составляет сейчас 44к в год. Да, с возрастом она доходит до 55к, но обычно и не превышает. А если вспомнить практику большинства немецких универов взять на 1/2 или 3/4 ставки, то вообще весело бывает.

    Не удивлюсь. Потому и сваливают все в производство, если не удалось поймать хороший грант. Но прикольно, конечно, осознавать эти цифры на фоне всех нынешних разговоров про инвестиции в образование, дигитализацию и прочее. Видимо, очередные проекты по распилу на очереди, деньги инвестируются не в кадры, а в то, что можно расписать с друзьями.

    15 hours ago, Alexey.L. said:

    Да, спасибо. Странно, вот тут другая цифра. Впрочем, разница незначительна. Как я уже говорил, меньше чем достаточно для голубой карты все равно не будет.

    Я думаю, Вы не на этом сайте оформлять сотрудника будете, а в BAMF

  16. 16 minutes ago, Alexey.L. said:

    Ссылка на источник?

    Сайт BAMF подойдет?

     

    Quote

     

    Voraussetzungen für die Erteilung sind:

    • grundsätzlich Nachweis eines jährlichen Mindestbruttogehalts von 53.600 Euro. Ausnahme: Bei Erteilung einer Blauen Karte EU an Naturwissenschaftler, Mathematiker und Ingenieure sowie an Ärzte und IT-Fachkräfte wird eine niedrigere Gehaltsgrenze von 41.808 Euro zu Grunde gelegt.

     

    http://www.bamf.de/DE/Migration/Arbeiten/BuergerDrittstaat/BlaueKarte/blaue-karte-node.html

  17. 1 hour ago, jcxz said:

    Один бывший коллега, уехавший несколько лет назад из Канады, красочно рассказывал о целых тамошних улицах коттеджей по соседству с его жильём, заполненных тунеядцами-сомалийцами. Пинающими балду, в то время как он ехал на работу. В том числе и на деньги с его налогов.  :smile:

    Не думаю, что кто-то смог обогнать в этом деле Германию или Швецию.

  18. Даже за 40 тысяч по нынешним временам разве что студента можно нанять, только что из института. И то только до того момента, пока он что-то другое себе не найдет. А уж в разделе Embedded Linux и Qt вообще нереально. Это я уже молчу про то, что за такие деньги невозможно оформить Blaue Karte, нужно минимум 42 тысячи по текущим требованиям. Ну и вообще, на такие деньги никому из России не советовал бы переезжать, помимо проблем с языком, ксенофобии, отсутствия перспектив карьерного роста, с такой зарплатой и местными ценами почти на все это реально грозит выживанием и сведением концов с концами, разве что одному как-то худо-бедно. Такие предложения интересны разве что одиноким жителям глубинки.

    12 hours ago, iiv said:

    в Германии прогрессивка, а не как в РФ, поэтому если говорить чисто по налогу, то при неработающей жене с 30к в год налогов будет чуть меньше, чем в РФ, другое дело, что социальные страховки они с этой суммы и с работодателя, а не с работодателя как в РФ. Но всяко на 30К до налогов семьей можно разве что в ГДР жить, да и то это жизнью не назовешь, а побирательством ничем от социаля не отличающемся.

     

    Классика жанра. Когда-то почти 20 лет назад был я в местном немецком мухосранском универе юниор-профессором. Снимал с семьей этаж одного дома. Этажом выше жила семья русскоговорящая - два взрослых, два ребенка. За их пол-дома в 100кв м им все оплачивал социаль (мне мои пол дома обходились в 700 евро в месяц), на руки им давали на всех примерно 1к в месяц, ну и два раза в год они одним чеком на пару тысяч могли отоварится шмотками. Когда они хотели поменять машину, глава семейства выходил на работу на пару месяцев, менял машину, потом сваливался снова на социаль. А, ну да, времени у них было много, и на рыбалку ездили в соседнюю Францию, да и просто целый день балду пинали. А да, к чему это. Я со своей семьей чувствовал себя один в один по доходу, хотя работал на "престижной" профессорской должности с окладом около 40к (молодым профессорам платят мало, тут зарплаты от возраста и стажа зависят). С тех пор в Германии мало чего изменилось.

     

    EDIT: специально акцентирую внимание, что с зарплаты 35К в год даже если жена не работает, на руки после налогов остается 1900 в месяц (в холостом состоянии будет 1700). В мной выше указанном примере семья социальщиков имела 1700 в месяц (в Баварии будет в полтора раза больше, так как жилье дорогое). Докинем хотя бы 200 евро в месяц на бензин (пусть машина с развала или кто подарил) чтоб до работы доехать, вот и будет то самое. Так что давайте не проводить большую разделительную черту между социальщиком и работником за 35К в год, социальщик в любом случае, в выигрыше - так как у него куча времени, а тот, кто работает, по крайней мере на работе должен появляться и что-то да делать.

    Да, так и есть, если зарплата меньше 2000 в месяц, то особого смысла работать, в принципе, и нет. Государство пожирает само себя, устанавливая такие правила, поощряющие тунеядство и экономическую миграцию с единственной целью интеграции в социальную систему.

    11 hours ago, iiv said:


     

    мопед не мой, а с официального сайта голубой карты. Я честно говоря думал подняли еще, но из-за того, что тут столько сирийцев с дипломами из РФ понаехало, планку оказывается снова вниз уронили. То ли дело Трамп - как пришел, так входную зарплату высококвалифицированных от 160к в год сделал. Так что делайте выводы куда ехать.

    Уже 41800 с 2019 года, так что даже с максимально предложенной автором ставкой и слезными письмами не прокатит.

  19. On 12/21/2018 at 3:37 AM, haker_fox said:

    А, если не секрет, что за девайс потребовал столько экзотического подхода программирования на ассемблере? Только про ошибки компилятора мне, пожалуйста, не говорите)))

    Тоже интересно послушать. Одно дело - писать ассемблерные вставки для ускорения тонких мест, а другое - бизнес-логику на 8000 строк. Могу себе представить отличия в скорости разработки.

  20. 3 hours ago, KnightIgor said:

    В EFM32 нет boot пинов. Там в первых 2KB есть встроенный загрузчик (во всяком случае, в процессоре топик стартера, я тоже с таким работал), поддерживающий XMODEM. Свою программу надо изначально размещать, начиная с 2К (с перемещением векторов), если хочется сохранить этот самый родной загрузчик, который весьма полезен для производства, например: можно прошивать процессоры через последовательный порт с помощью макро для TERATERM.

     

    Нет, мне загрузчик не нужен. Проблема в скриптах для j-link, которые идут в комплекте с EmBitz, что конкретно - я до сих пор понять не могу.

×
×
  • Создать...