Змінюй хід війни! Допомагай ЗСУ!

Программирование ARM. Eclipse, Keil,IAR,CooCox - всё сюда.

🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #41
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #42
Неініціалізовані дані.

Ага, это нормально, я подключил библиотеки.

Я чёт не понял, кук кокосу активировать кнопку даунлоад ту флэш?

Установить КоФлэш?



Упс. А КокосФлэш не поддерживает J-link.
Вот де собака порытая - он не могет прошить. Ему не только нечем, но и некак.



Прошил сеггером.
Полное говно - не дебажится нихрена. В чем может быть глюк?
KHuinia.jpg
 
Останнє редагування:
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #43
Полное говно - не дебажится нихрена. В чем может быть глюк?
В том, что он не поддерживает j-link?;)
Я юзаю ст-линк, все нормально. Хотя дебагер кокса мне не очень нравица.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #44
J-линк поддерживает, в том-то и дело. На сайте сеггера по кокосу есть отдельный мануал как его поддерживать и соответствующая строка в листбоксе дебаггера - тоже есть.
Флэшер - тот да, не поддерживает, но язашил сеггеровским родным - и зашился и верифицировался ровно и гладко.

Мороз возникает при попытке дебажить. С ИАРом прокатывало такое - шили H-Jtag ом и на вшитый код натравливали IAR. Тут чего-то не то... какая-то лажа.



Ага, спасает DBG0 замкнуть на Vss и нажать Reset. Выставил ресет по пину - помогло. Отчего-то дебагер сам не захотел сбрасывать проц, или у меня руки кривыенах...
 
Останнє редагування:
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #45
Ув. Reset, еще вопрос к вам :) , а если в данном проце (LPC2368) поставили защиту от чтения получится J-Link-ом (или U-Link-ом) прочитать? Девайс - китайское барахло, а именно программатор SH7055.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #46
Ув. Reset, еще вопрос к вам :) , а если в данном проце (LPC2368) поставили защиту от чтения получится J-Link-ом (или U-Link-ом) прочитать? Девайс - китайское барахло, а именно программатор SH7055.

Если в камне стоИт защита от чтения - она, наверное, чтобы его не прочитали. Не?
Нет, не получится. Получится стереть. Потом записать Прочитать не получится.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #47
Reset, тогда к вам последний вопрос - а у вас есть программатор для LPC2368FBD100, чтоб считать прошивку (желательно через JTAG)? Может защиты и нет, я не знаю. Просто по разным форумам читаю, но никто не может подсказать.
В общем мне необходимо считать прошивку с этого проца, естественно не стереть ее!
Если можете помочь - помогите, не бесплатно.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #48
Reset, тогда к вам последний вопрос - а у вас есть программатор для LPC2368FBD100, чтоб считать прошивку (желательно через JTAG)? Может защиты и нет, я не знаю. Просто по разным форумам читаю, но никто не может подсказать.
В общем мне необходимо считать прошивку с этого проца, естественно не стереть ее!
Если можете помочь - помогите, не бесплатно.

Да, есть, J-Flash его может читать. Только я не буду этим заниматься.
P.S. ЭБУ от кашкая дорогой сильно. Вы его поломаете, потом мне будут предъявы.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #49
Фуфф, после долгого перерыва - долез таки до темы :)
Взагали остановился на связке STM32F103 + CooCox.
По остальным: Как-то не срослось у меня с виндой. Начинал писать в андроид и поставил Win7Х64. Оно упало, не осилив драйвер блютуса, показывало синие экраны смерти и вообще плохо себя вело.
Попросил админа перелить по запаре - он и перелил. По запаре. Поверх ебанул 7X32/
ИТОГО: EmBlocks - не работает совсем.
Keil - чёт по сравнению с прошлым разом не смог создать пустой проект так, чтобы тот откомпилился сразу. Раньше мог - списываю на корявые записи в path, которые перетащила винда (она когда 7 поверх 7 ставишь - дохуя всего перетаскивает, как оказалось). В целом работает.
IAR - просто работает, но, как всегда, требует рукопиления (ну не может он не задрачивать).
CooCox - теперь уже поддерживает и J-Link, но а) J-Link перестал поддерживать SEGGER (он роняет прошивку, а прошивку клона не признает. Видать клон v8 имеет неправильный бутлоадер, а сеггеры снова сменили защиту). б) у меня уже и ST-link приехал, и я штю им без проблем по SWD и дебажу.

CooCox работает относительно - постоянно жрет память (даже когда просто ни чего не делаешь - видно как она растет в диспетчере) и, достигнув 190-210МБ - валится с ошибкой Java out of memory.
Списываю это тоже на свою невдалую винду, так как есть народ, утверждающий, что ни когда таких проблем не видел (правда, есть и те, у кого аналогично).
/* --------- Часть вторая, или "ночные бдения" ---------
------------ она же - тупняк по харьковски -------------*/

Запустил я, знач, макетко, и намылился я задействовать АЦП.
Макетко было снабжено мыслеформами по инициализации GPIO, системмной тикалки на 1кГц и UARTа, который сейчас выполняет функцию хронометра - раз в секунду шлёт время от старта на комп, и если 13 часов 13 минут 13 секунд - пишет ещё и Halloween...
Ко всему этому прикручена IntToStr, чтобы слать это всё не в хексе (я в хексе плохо читаю, медленно), и, собственно, готово для обуздания АЦП.

Но! то-ли уже 23:32 ночи и пора спать, то-ли я просто туплю, то-ли все аппноты, которые я нашел, и прочие примеры, - содержат ошибки, но...
Этот гандон не работает.

Цель: запустить на попеременное измерение 3 канала АЦП, с помощью DMA, буфер 16, по окончанию - буфер будет обработан и отфильтрованное значение посмотреть по UART в терминалке (IntToStr благо есть).

На данный момент порваная в клочья в попытках чё-та сделать инициализация выглядит так:
--.............
(RCC заведен ранее и проверен в дебагере - GPIO запитаны, всё запитано, кроме DMA - оно запитывается у себя в ините)
Код:
[SIZE="1"][I]GPIO:
  // ADCGPIO
   /*Configure GPIO pin : PA */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);[/I][/SIZE]
UART не привожу - он, как раз, без проблем работает.

Сам ADC
Код:
{
	RCC->APB2ENR |=  RCC_APB2ENR_ADC1EN;  // Подаем тактирование на АЦП 1//RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

ADC1->CR2 |= ADC_CR2_RSTCAL;
ADC1->CR2 |= ADC_CR2_CAL;


ADC1->CR2 &= ~ADC_CR2_ALIGN; //Выравнивание по правому краю
ADC1->CR2 |=( ADC_CR2_CONT|ADC_CR2_EXTTRIG|ADC_CR2_EXTSEL|ADC_CR2_TSVREFE|ADC_CR2_DMA);
//ADC1->CR2 |= ADC_CR2_EXTTRIG;
//ADC1->CR2 |= ADC_CR2_EXTSEL_2;
/* Задаем длительность выборки */
 ADC1->SMPR2 |= (ADC_SMPR2_SMP4_2 | ADC_SMPR2_SMP4_1 | ADC_SMPR2_SMP4_0);
 ADC1->CR1 |= ADC_CR1_EOCIE;
ADC1->CR1 |= ADC_CR1_SCAN;
 /* Настраиваем каналы */
 ADC1->SQR1 |= (2<<20);        // 10 - три канала
 ADC1->SQR3 |= (4<<15) | (5<<10) | (6<<5) | 7; // Сами номера каналов

ADC1->SQR3|=(ADC_SQR3_SQ1_1|ADC_SQR3_SQ1_2|ADC_SQR3_SQ1_3);

while(ADC_GetCalibrationStatus(ADC1));
ADC1->CR2 |= (ADC_CR2_ADON);
}

DMA
Код:
{
	RCC->AHBENR |= RCC_AHBENR_DMA1EN;//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
	DMA1_Channel1->CPAR |= (uint32_t) &ADC1->DR;
DMA1_Channel1->CPAR |= (uint32_t) &ADC1->DR; //DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t)(&USART1->DR);
DMA1_Channel1->CMAR |= (uint32_t) &ADC3ch.ADCbuf1[0];//DMA_InitStructure.DMA_MemoryBaseAddr = (u16)&ADC3ch.ADCbuf1;//RX1.BFR;//&RXb1;
DMA1_Channel1->CNDTR = 16;//DMA_InitStructure.DMA_BufferSize = 3;
DMA1_Channel1->CCR =  0;//DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//DST;//SRC - читать в память
DMA1_Channel1->CCR |= (DMA_CCR1_MINC|DMA_CCR1_PSIZE_0|DMA_CCR1_MSIZE_0|DMA_CCR1_PL|DMA_CCR1_TCIE);//16-бит АЦП

DMA1_Channel1->CCR &= ~DMA_CCR1_MEM2MEM;      // Режим обмена память-память - выключен
DMA1_Channel1->CCR |= DMA_CCR1_EN;            // Включаем
}

Я уже запутался. Чего не хватает в этом салате? В прерывании ADC, или DMA я активности вообще не вижу. Видимо, я неправильно понял как оно должно работать и что чего запускает.

P.S. while (!(ADC1->CR2 & ADC_CR2_CAL)){ } вызывает залипание, условие не настает ни когда. По этому применено while(ADC_GetCalibrationStatus(ADC1));

ADC1->SQR3 |= (4<<15) | (5<<10) | (6<<5) | 7; // Сами номера каналов
Как работает этот грёбаный регистр? Числа случайны и взяты из случайного примера, любые совпадения с реальными считать совпадениями.
 
Останнє редагування:
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #50
Въезжать в ЭТО не серьезно. Почему STPeriph не используешь?
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #51
Це все? Де ініціалізація NVIC?



Код:
/* Private define ------------------------------------------------------------*/
#define ADC_NbrOfDualChannel 2  // Кількість спарених каналів АЦП.

/* Private variables ---------------------------------------------------------*/
static uint32_t ADC_DualConvertedValue[ADC_NbrOfDualChannel];   // Масив спарених кодів АЦП.

/* Private functions ---------------------------------------------------------*/
/**
  * @brief  Конфігурація RCC для ADC.
  * @param  Немає
  * @retval Немає
  */
static void Adc_RCC_Configuration (void)
{
  // Вибір дільника частоти ADC.
  RCC_ADCCLKConfig(RCC_PCLK2_Div8);

  // Включення тактування DMA1.
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

  // Включення тактування ADC і GPIOA.
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 | RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
}

/**
  * @brief  Конфігурація NVIC для ADC.
  * @param  Немає
  * @retval Немає
  */
static void Adc_NVIC_Configuration (void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  // Конфігурація переривання DMA1 Channel1.
  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

/**
  * @brief  Конфігурація GPIO для ADC.
  * @param  Немає
  * @retval Немає
  */
static void Adc_GPIO_Configuration (void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  // Конфігурація PA.00 - PA.02 (ADC Channel0 - Channel2) як аналогові входи.
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_1 | GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/**
  * @brief  Конфігурація DMA для ADC.
  * @param  Немає
  * @retval Немає
  */
static void Adc_DMA_Configuration (void)
{
  DMA_InitTypeDef DMA_InitStructure;

  // Конфігурація DMA1 Channel1.
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &ADC1->DR;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) ADC_DualConvertedValue;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = ADC_NbrOfDualChannel;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);

  // Дозвіл переривання DMA1 Channel1 Transfer Complete.
  DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);

  // Дозвіл DMA1 Channel1.
  DMA_Cmd(DMA1_Channel1, ENABLE);
}

/**
  * @brief  Конфігурація каналів ADC.
  * @param  Немає
  * @retval Немає
  */
static void ADC_Configuration (void)
{
  ADC_InitTypeDef ADC_InitStructure;

  // Конфігурація ADC1 і ADC2.
  ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = ADC_NbrOfDualChannel;
  ADC_Init(ADC1, &ADC_InitStructure);
  ADC_Init(ADC2, &ADC_InitStructure);

  // Дозвіл каналу Vrefint.
  ADC_TempSensorVrefintCmd(ENABLE);

  // Конфігурація звичайних каналів ADC1 і ADC2.
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 1, ADC_SampleTime_1Cycles5);
  ADC_RegularChannelConfig(ADC2, ADC_Channel_0,  1, ADC_SampleTime_1Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1,  2, ADC_SampleTime_1Cycles5);
  ADC_RegularChannelConfig(ADC2, ADC_Channel_2,  2, ADC_SampleTime_1Cycles5);

  // Дозвіл ADC1 і ADC2.
  ADC_Cmd(ADC1, ENABLE);
  ADC_Cmd(ADC2, ENABLE);

  // Скидання регістрів калібровки ADC1 і ADC2.
  ADC_ResetCalibration(ADC1);
  ADC_ResetCalibration(ADC2);

  // Перевірка закінчення скидання регістрів калібровки ADC1 і ADC2.
  while(ADC_GetResetCalibrationStatus(ADC1));
  while(ADC_GetResetCalibrationStatus(ADC2));

  // Старт калібрування ADC1 і ADC2.
  ADC_StartCalibration(ADC1);
  ADC_StartCalibration(ADC2);

  // Перевірка закінчення калібрування ADC1 і ADC2.
  while(ADC_GetCalibrationStatus(ADC1));
  while(ADC_GetCalibrationStatus(ADC2));

  // Дозвіл ADC1 DMA.
  ADC_DMACmd(ADC1, ENABLE);

  // Дозвіл зовнішнього тригера перетворення ADC2.
  ADC_ExternalTrigConvCmd(ADC2, ENABLE);

  // Програмний старт перетворення ADC1.
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

/**
  * @brief  Ініціалізація аналогових входів.
  * @param  Немає
  * @retval Немає
  */
void AdcInit (void)
{
  Adc_RCC_Configuration();      // Конфігурація RCC для ADC.
  Adc_NVIC_Configuration();     // Конфігурація NVIC для ADC.
  Adc_GPIO_Configuration();     // Конфігурація GPIO для ADC.
  Adc_DMA_Configuration();      // Конфігурація DMA для ADC.
  ADC_Configuration();          // Конфігурація ADC.
}

/**
  * @brief  Обробка буфера з результатами АЦП.
  * @param  Немає
  * @retval Немає
  */
void DMA1_Channel1_IRQHandler (void)
{
  if(DMA_GetITStatus(DMA1_IT_TC1))
  {
    DMA_ClearITPendingBit(DMA1_IT_GL1);
  }
}
 
Останнє редагування:
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #52
Ув. Reset, позволю совет - сейчас St толкает CubeMx - генератор кода для stm32. Есть масса достоинств. Недостатки конечно то-же есть. Как всегда ( приколы с Spi, Rtc, Ethernet, нет пока emWin для Stm32f4 - приходиться самому, по старинке ). Но инициализация периферии таки обычно работает.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #53
Ув. Reset, позволю совет - сейчас St толкает CubeMx - генератор кода для stm32. Есть масса достоинств. Недостатки конечно то-же есть. Как всегда ( приколы с Spi, Rtc, Ethernet, нет пока emWin для Stm32f4 - приходиться самому, по старинке ). Но инициализация периферии таки обычно работает.

Дополню:

STM32CubeMX = бывший MicroXplorer.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #54
Так что-бы да, так вроде нет. Значительно мощнее и удобнее. Скорее ближе к генератору в 5 кейле с его паками. Я например уже и подзабыл как FreeRTOS вручную накатывать ( оно понятно что и вспомнить недолго ). С lwIp ( с его туевой хучей настроек ) - просто песня. В кейле правда emWin есть в генераторе. Когда-то было важно. Но вроде пока обхожусь.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #55
Въезжать в ЭТО не серьезно. Почему STPeriph не используешь?
Жрёт много. Переведя иниты с перифа на прямые записи регистров экономится чуть-ли не 1 кБ.

Ув. Reset, позволю совет - сейчас St толкает CubeMx - генератор кода для stm32. Есть масса достоинств. Недостатки конечно то-же есть. Как всегда ( приколы с Spi, Rtc, Ethernet, нет пока emWin для Stm32f4 - приходиться самому, по старинке ). Но инициализация периферии таки обычно работает.
Собсно, им и пользовался, но какое он имеет к DMA отношение? Скачал вчера последний - не заметил там вообще DMA, как и его разрешения для АЦП. Как по мне - ещё писать и писать этот продукт. Но в копилку положил - он из полезного, красненьким подсвечивает периферию двойного применения, которую уже задействовали.

Дополню:

STM32CubeMX = бывший MicroXplorer.
Не знаю кто это. Такоэ себе. Далёк от совершенства, как я от французского балета.

Так что-бы да, так вроде нет. Значительно мощнее и удобнее. Скорее ближе к генератору в 5 кейле с его паками. Я например уже и подзабыл как FreeRTOS вручную накатывать ( оно понятно что и вспомнить недолго ). С lwIp ( с его туевой хучей настроек ) - просто песня. В кейле правда emWin есть в генераторе. Когда-то было важно. Но вроде пока обхожусь.
А объясните мне, в чём заключается эйфория от этой хрени? Может я не ту версию скачал? Или там глубже лезть надо?
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #56
Жрёт много. Переведя иниты с перифа на прямые записи регистров экономится чуть-ли не 1 кБ.
Чего? Все это делается на этапе компиляции. Результатом есть такая же прямая загрузка значения в регистры.


Лучше подскажите мне что еще сохранить в функции на асме вставленой в си в cvavr чтобы она не херила данные. Там довольно сложно и разбирать полный промежуточный асм код я уже затрахался мочи нет. Но некоторые флаги( глобальные переменные) в процессе работы слетают при использовании асм функции. Все регистры посохранял.
 
Останнє редагування:
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #57
Эйфория ? Не, это не там. Там просто инструмент, с достоинствами и недостатками.
А-ля CodeVision. Берущий на себя кучу черновой работы ( что отнють не означает возможность забыть Reference manual ).
Не поленился, создал проект под 100 семейство - реально ограничен функционал. Видимо St не считает нужным уже их поддерживать. Да и я уже подзабыл.
Создай проект под 4 семейство ( перед этим паки нужно поставить ) - сравни.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #58
Лучше подскажите мне что еще сохранить в функции на асме вставленой в си в cvavr чтобы она не херила данные. Там довольно сложно и разбирать полный промежуточный асм код я уже затрахался мочи нет. Но некоторые флаги( глобальные переменные) в процессе работы слетают при использовании асм функции. Все регистры посохранял.
Исходник фстудию. Писал бутлоадер с асм-функцией. Работает нормально.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #59
Чего? Все это делается на этапе компиляции. Результатом есть такая же прямая загрузка значения в регистры.
Не правда. Или мы о разном. если через
XXX_InitStructure.xxxx - код получается гораздо больше. Библиотечные функции содержат больше проверок и странных телодвижений.


Лучше подскажите мне что еще сохранить в функции на асме вставленой в си в cvavr чтобы она не херила данные. Там довольно сложно и разбирать полный промежуточный асм код я уже затрахался мочи нет. Но некоторые флаги( глобальные переменные) в процессе работы слетают при использовании асм функции. Все регистры посохранял.

эммм... что значит "что ещё сохранить"? А что Вы УЖЕ сохранили? И что именно она херит?
Если глобальные переменные слетают - значит функция в них пишет.
Это может происходить по нескольким причинам:
1. асм пишет в память, где лежит переменная, о чем он совершенно не догадывается.
2. Переменная объявлена как регистровая, или на момент вызова асма числится в регистре (не имею понятия как именно cvavr компилит, но Сиспользует ограниченный и жестко фиксированный набор регистров)
3. У Вас молоко убежало стек закончился, или с ним неправильно обращаются.
4. неведомаёбанахуйня.

В любом случае без кода не разобраться.

Не поленился, создал проект под 100 семейство - реально ограничен функционал. Видимо St не считает нужным уже их поддерживать. Да и я уже подзабыл.
Создай проект под 4 семейство ( перед этим паки нужно поставить ) - сравни.

Странно, 100 семейство полным ходом вытесняет AVR и PIC и отказываться от него было бы несколько преждевременным. Есть полно применений, где нет смысла ставить проц за 8 баксов, а хватит за 1,7-2 бакса.
 
  • 🟡 14:00 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #60
CVAVR еще раз доказал, что он удобный, но иногда херню порет полную. Благо это всего третий раз в моей жизни. Правда самый крутой.
Выкладывать код смысла нет, он самый что ни на есть обычный, использует только разрешенные компилятором регистры, которые не надо сохранять и восстанавливать. Но даже сохранение ВСЕХ регистров ничего не давало.
В результате просмотра листинга оказалось, что компилятор при выходе из функции прыгает НЕ ТУДА откуда он в нее пришел. Хз как так, путается в своих же subrou для передачи параметров и возвращения при оптимизации. С самого начала была проблема не только с флагами, но и с явным переходом после функции не туда. То есть сразу после функции задержка, а оно педалит без задержки, которая когда-то потом происходит.
 
Назад
Зверху Знизу