Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Alex2016 писал(а):// ВОТ ЗДЕСЬ НИЧЕГО НЕ ПРОИСХОДИТ.
Хотите сказать, что в остальных местах что-то происходит? Что за компилятор, который молчит на такое:

Код: Выделить всё

unsigned char MIN_THRESHOLD_SHORT_PULSE = 889;
unsigned char MAX_THRESHOLD_SHORT_PULSE = 1333; 
unsigned char MIN_THRESHOLD_LONG_PULSE =1334; 
unsigned char MAX_THRESHOLD_LONG_PULSE = 2220;
, и чего Вы ждете от переменных, инициализированных таким вот боком? Точно ли при этом MAX больше MIN? :)))

Кроме того, Вы уверены, что процедура "EXTI_PB7" вообще вызывается?

P.S. Если Timer_value меняется в прерывании, то она волатильная и скрывать этот факт от компилятора означает ставить себе грабли на будущее. ;)
Реклама
Родился
Сообщения: 2
Зарегистрирован: Вс дек 27, 2015 22:06:18

Сообщение Alex2016 »

Что за компилятор, который молчит на такое:
unsigned char MIN_THRESHOLD_SHORT_PULSE = 889;
unsigned char MAX_THRESHOLD_SHORT_PULSE = 1333;
unsigned char MIN_THRESHOLD_LONG_PULSE =1334;
unsigned char MAX_THRESHOLD_LONG_PULSE = 2220;
:facepalm: действительно, такие значения в char не влезут, заменил на unsigned short :oops:
Но IARовский компилятор не агрился на такую писанину :dont_know:
Кроме того, Вы уверены, что процедура "EXTI_PB7" вообще вызывается?
Да, выполнение кода заходит в обработчик прерывания, когда нажимаешь на кнопку пульта,я тестировал в дебаге.
Если Timer_value меняется в прерывании, то она волатильная и скрывать этот факт от компилятора означает ставить себе грабли на будущее.
Вот за этот совет, вялики дзякуй :beer:

P.s оказывается, что чтение из счетного регистра буферизирован :))
вместо:

Код: Выделить всё

volatile unsigned short Timer_value |= ((TIM3_CNTRH << 8)|TIM3_CNTRL);
Корректнее писать:

Код: Выделить всё

Timer_value = TIM3_CNTRH << 8;
Timer_value |= TIM3_CNTRL;
Реклама
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Alex2016 писал(а):Но IARовский компилятор не агрился на такую писанину :dont_know:
Вы из тех, кто считает, что warnings придумали трусы? А Pe069 и вовсе действует на Вас, как красная тряпка на быка? :)))
Alex2016 писал(а):Корректнее писать:

Код: Выделить всё

...
Timer_value |= TIM3_CNTRL;
Это присвоение упомянуто уже трижды - один раз как "равно" и дважды, как "или равно" - а зачем побитово ИЛИть с предыдущим значением? А теперь вот еще и только с младшей его частью...? :shock:
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Ну так первой строчкой мы установили старшую часть (TIM3_CNTRH сдвинутый на 8 бит) младшая при этом равна нулю. Второй строчкой OR-им младшую часть в ту же переменную, а по нулям значение очень хорошо ложится 1 в 1.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Alexeyslav писал(а):Ну так первой строчкой мы установили старшую часть (TIM3_CNTRH сдвинутый на 8 бит) младшая при этом равна нулю. Второй строчкой OR-им младшую часть в ту же переменную, а по нулям значение очень хорошо ложится 1 в 1.
Вы тоже не поняли моего вопроса. О том, что младший разряд, при сдвиге к старшим, заполняется нулями, даше хреновые-химеры знают, не надо никого равнять с ними - вопрос конечно же был о другом:
Alex2016 писал(а):Изображение
Как я уже говорил, это присвоение было упомянуто трижды и все три раза по-разному... так вот было интересно - нафига было в процитированном варианте ИЛИть-то с битами предыдущего результата?
Вложения
codingSTM8_f1.png
(2.57 КБ) 1696 скачиваний
Последний раз редактировалось Pnjom-Penb Пт янв 01, 2016 23:53:34, всего редактировалось 1 раз.
Реклама
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Ещё раз... к чему твои дурные вопросы??? ТС не дочитал референс... пробовал выпутаться из ситуации по разному... там что угодно можно было увидеть... Когда ему указали на порядок чтения-записи...он указал решение в послесловии...
И вообще... тебе не кажется странным... что тебя вообще никто не понимает... похоже что и даже ты сам???
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

HHIMERA писал(а):вообще никто не понимает
Меньшинство - это не никто. И по-мне - лучше быть с ними, чем с тем большинством, что типа тебя.
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Сообщение service47 »

Как сделать такое же от STM32, но для STM8 в IAR:
Спойлер

Код: Выделить всё



#define F_APB1 20000000UL
void delay_ms(uint16_t delay)
{
    TIM14->PSC = F_APB1 / 1000 + 1; //устанавливаем предделитель
    TIM14->ARR = delay; //устанавливаем значение переполнения таймера, а значит и значение при котором генерируется Событие обновления
    TIM14->EGR |= TIM_EGR_UG; //Генерируем Событие обновления для записи данных в регистры PSC и ARR
    TIM14->CR1 |= (TIM_CR1_CEN | TIM_CR1_OPM); //Запускаем таймер записью бита CEN и устанавливаем режим Одного прохода установкой бита OPM
    while ((TIM14->CR1 & TIM_CR1_CEN) != 0);
}
void delay_mc(uint16_t delay)
{
    TIM14->PSC = F_APB1 / 1000000 + 1; //устанавливаем предделитель
    TIM14->ARR = delay; //устанавливаем значение переполнения таймера, а значит и значение при котором генерируется Событие обновления
    TIM14->EGR |= TIM_EGR_UG; //Генерируем Событие обновления для записи данных в регистры PSC и ARR
    TIM14->CR1 |= (TIM_CR1_CEN | TIM_CR1_OPM); //Запускаем таймер записью бита CEN и устанавливаем режим Одного прохода установкой бита OPM
    while ((TIM14->CR1 & TIM_CR1_CEN) != 0);
}



    GPIO_ResetBits(GPIOA, GPIO_Pin_14);
    GPIO_SetBits(GPIOF, GPIO_Pin_0);
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

service47 писал(а):Как сделать такое же...
можно как нибудь так:

Код: Выделить всё

void delay_1ms()
{
    TIM2->SR1 &= ~TIM2_SR1_UIF;
    TIM2->PSCR = 0x06; // //Предделитель на 2^6=64 16000000/64 = 250000 Hz
    TIM2->ARRH = 0; ///Значение перезагрузки 250000/250 = 1000 Гц
    TIM2->ARRL = 250;
    TIM2->CR1 |= TIM2_CR1_CEN; // Разрешаем счет.
    while((TIM2->SR1 & TIM2_SR1_UIF)==0);
}

uint16_t c = 500; //delay 500ms
    while(--c)
    {
        delay_1ms();
    }
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Сообщение service47 »

Спасибо, а как это сделать для STM8:
Спойлер

Код: Выделить всё

void Configure_PA0(void) 
{
    /* Set variables used */
    GPIO_InitTypeDef GPIO_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
  
    // Enable clock for GPIOA 
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    // Enable clock for SYSCFG 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
    
    // Set pin as input 
    PA_DDR_bit.DDR0 = 0; // Set PA0 as input
    PA_ODR_bit.ODR0 = 0; // Latch "1" in output register
    PA_CR1_bit.C10  = 1; // Input with pull-up
    PA_CR2_bit.C20  = 0; // External interrupt disabled
    //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    // Tell system that you will use PA0 for EXTI_Line0 
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
    EXTI_ClearITPendingBit(EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 | EXTI_Line4
                          | EXTI_Line5 | EXTI_Line6 | EXTI_Line7 | EXTI_Line8
                          | EXTI_Line9 | EXTI_Line10 | EXTI_Line11 | EXTI_Line12
                          | EXTI_Line13 | EXTI_Line14 | EXTI_Line15 | EXTI_Line16
                          | EXTI_Line17 | EXTI_Line18 | EXTI_Line19 | EXTI_Line20
                          | EXTI_Line21 | EXTI_Line22 | EXTI_Line23 | EXTI_Line25
                          | EXTI_Line26 | EXTI_Line27 | EXTI_Line31);/**/
    // PA13 is connected to EXTI_Line0 
    EXTI_InitStructure.EXTI_Line = EXTI_Line0;
    // Enable interrupt 
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    // Interrupt mode 
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    // Triggers on rising and falling edge 
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    // Add to EXTI 
    EXTI_Init(&EXTI_InitStructure);
 
    // Разрешаем прерывания в периферии для выводов 0
    EXTI->IMR |=(EXTI_IMR_MR0);
   /* 
    // Configure external interrupts
    CPU_CFG_GCR_bit.AL = 1; // Interrupt-only activation level (IRET causes the CPU to go back to Halt mode)
    EXTI_CR1_bit.P0IS = 0x02; // EXTI0 on falling edge only
    //ITC_SPR3_bit.VECT8SPR  = 0x03; // EXTI0 IRQ level 3 (high priority) (EXTI0 IRQ = Vector 8)
    asm("RIM"); // Enable global interrupts (enable priorities)
    */
    // Add IRQ vector to NVIC 
    // PA0 is connected to EXTI_Line0, which has EXTI0_IRQn vector 
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
    // Set priority 
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
    // Set sub priority 
    //NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00;
    // Enable interrupt 
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    // Add to NVIC 
    NVIC_Init(&NVIC_InitStructure);
    NVIC_EnableIRQ(EXTI0_1_IRQn);
    NVIC_SetPriority(EXTI0_1_IRQn,0);
}

 GPIO_ResetBits(GPIOA, GPIO_Pin_14);
 GPIO_SetBits(GPIOF, GPIO_Pin_0);
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

см. STM8S/A Standard peripheral library http://www.st.com/web/catalog/tools/FM1 ... 4/PF258009
пример в папке FWLib\examples\EXTI
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

service47 писал(а):Как сделать такое же от STM32, но для STM8 в IAR:
Да строчку в строчку... Для TIM1 уж точно... Для других таймеров... с учётом особенностей прескалера... Таймера то похожи...
А вообще... смысла в этом никакого нет... только минус таймер... Этот идиотизм только для Мега-Пых ногодрыга и годится...
"Я не даю готовых решений, я заставляю думать!"(С)
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

Сообщение service47 »

В проекте добавлены:
Спойлер

Код: Выделить всё

#include "stm8l15x_conf.h"
#include "stm8l15x_it.h"

#include "stm8l15x.h"

#include "stm8l15x_adc.h"
#include "stm8l15x_aes.h"
#include "stm8l15x_beep.h"
#include "stm8l15x_clk.h"
#include "stm8l15x_comp.h"
#include "stm8l15x_dac.h"
#include "stm8l15x_dma.h"
#include "stm8l15x_exti.h"
#include "stm8l15x_flash.h"
#include "stm8l15x_gpio.h"
#include "stm8l15x_i2c.h"
#include "stm8l15x_irtim.h"
#include "stm8l15x_itc.h"
#include "stm8l15x_iwdg.h"
#include "stm8l15x_lcd.h"
#include "stm8l15x_pwr.h"
#include "stm8l15x_rst.h"
#include "stm8l15x_rtc.h"
#include "stm8l15x_spi.h"
#include "stm8l15x_syscfg.h"
#include "stm8l15x_tim1.h"
#include "stm8l15x_tim2.h"
#include "stm8l15x_tim3.h"
#include "stm8l15x_tim4.h"
#include "stm8l15x_tim5.h"
#include "stm8l15x_usart.h"
#include "stm8l15x_wfe.h"
#include "stm8l15x_wwdg.h"
Файлы .с тоже добавлены. Но:
Error[Pe020]: identifier "TIM1_SR1_bit" is undefined
Error[Pe020]: identifier "TIM1_CR1" is undefined и т.д.

Если же добавить из самого IAR'а:
#include "iostm8.h"
#include <iostm8l051f3.h>
и закомментировать:
//#include "stm8l15x.h"
то:
Error[Pe256]: invalid redeclaration of type name "__BITS_PA_ODR" (declared at line 45 of "D:\...\iostm8l051f3.h 45

Какие файлы должны быть добавлены для STM8L051F3?
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт ноя 29, 2013 06:26:40

Сообщение Рена »

Помогите увеличить число разрядов на индикатор.
Надо задействовать порт В целиком, а не только первые четыре.
Displaying variable voltage on a bar of LEDs using STM8S-DISCOVERY (AN3280)
Спойлер

Код: Выделить всё

/**
  ******************************************************************************
  * @file main.c
  * @brief Displaying variable voltage on a bar of LEDs Application example.
  * @author STMicroelectronics - MCD Application Team
  * @version 2.0.0
  * @date 15-MAR-2011
  ******************************************************************************
  *
  * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
  * @image html logo.bmp
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"                // file needed only for registers mask 
#include "parameter.h"
/**
  * @addtogroup ADC1_Example1
  * @{
  */

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

#define ALL_LEDs ((u8)0x0F)				// LEDs mask 

/* Private macro -------------------------------------------------------------*/

#define switch_all_LEDs_on		{ GPIOB->ODR|= ALL_LEDs; }	//LEDs control : all on
#define switch_all_LEDs_off	  { GPIOB->ODR&=~ALL_LEDs; }    //LEDs control : all off

/* Private variables ---------------------------------------------------------*/
	u8  temp_AD_H;					   // temporary registers for reading ADC result (MSB)
	u8  temp_AD_L;             // temporary registers for reading ADC result (LSB)
	u8	ADInit;						     // flag for ADC initialized
	u8	ADSampRdy;				     // flag for filed of samples ready
	u8  AD_samp;						   // counter of stored samples
	u16 AD_sample[NUMB_SAMP];	 // store samples field 
	u16 AD_avg_value;				   // average of ADC result
	
	u8 peak_memo;					     // variables for peak level detector
	u8 peak_filt;					     // variables for peak level detector*/

/* Private function prototypes -----------------------------------------------*/
/**
  * @brief Count average of samples stored in the u16 field
  * @par Parameters:
  *  *p: pointer to the begin of the field
  * smp: number of samples in the field
  * @retval Average u16 value
  */
u16 u16_average(u16 *p, u8 smp) { 
	u8 i;
	u16 sum;
	
	for(i=0, sum= 0; i < smp; ++i)
		sum+= *p++;		
	return sum / smp;
}
/* -------------------------------------------------------------------------- */
/**
  * @brief Prepare data for four LED bar of signal and peak indicator
  * @par Parameters:
  * val: Level of the mesured signal [0-4]
  * @retval 4 bits (low nibble) of the composite bar graph information
  */
u8 signal_and_peak_level(u8 val) {
	u8 signal;
	u8 peak;
	
	switch(val) {
		case 0: peak= 0; signal=  0; break;	//set peak and signal levels
		case 1: peak= 1; signal=  1; break;
		case 2: peak= 2; signal=  3; break;
		case 3: peak= 4; signal=  7; break;
		case 4: peak= 8; signal= 15; break;
		default: peak= signal= 15;
	};
	if(peak_filt == 0) {									// slow fall of peak level indicator 
		if(peak_memo) {
			peak_memo>>= 1;
			peak_filt= PEAK_FILTER;
		};
	}
	else
		--peak_filt;
	if(peak >= peak_memo) {				       // check the highest level value
		peak_memo= peak;					         // and copy it to peak indicator
		peak_filt= PEAK_FILTER;			       // with fall speed refresh
	};
	return (signal | peak_memo);		     // return bar graph information
}

/* Public functions ----------------------------------------------------------*/
/**
  * @brief Validation firmware main entry point.
  * @par Parameters:
  * None
  * @retval void None
  */  
void main(void) {
	u8 leds;
// 								*** GPIO INIT ***
	GPIOB->ODR&=~ALL_LEDs; 				// LEDs - as push-pull outputs, all off
	GPIOB->DDR|= ALL_LEDs;				// 
	GPIOB->CR1|= ALL_LEDs;
	
	GPIOC->DDR|= 0x02;						// PC.1 as push-pull outputs
	GPIOC->CR1|= 0x02;
		
	GPIOE->CR1&=~0x40;					  // PE.6 as a floating input
	GPIOE->DDR&=~0x40;
	
// 								*** ADC INITIALIZATION ***
	TIM1->ARRH= (u8)(AUTORELOAD >> 8);		          // set autoreload register for trigger period
	TIM1->ARRL= (u8)(AUTORELOAD);				            // 
	TIM1->CCR1H= (u8)((AUTORELOAD-AD_STAB) >> 8);   // set compare register for trigger period
	TIM1->CCR1L= (u8)(AUTORELOAD-AD_STAB);
	TIM1->CR1|= TIM1_CR1_ARPE;					            // auto reload register is buferred
	
	TIM1->CR2= (4<<4) & TIM1_CR2_MMS;		            // CC1REF is used as TRGO
	TIM1->CCMR1= (6<<4) & TIM1_CCMR_OCM;	          // CC1REF in PWM 1 mode
	TIM1->IER|= TIM1_IER_CC1IE;				              // CC1 interrupt enable
	TIM1->CCER1|= TIM1_CCER1_CC1P;			            // CC1 negative polarity
	TIM1->CCER1|= TIM1_CCER1_CC1E;			            // CC1 output enable
	TIM1->BKR|= TIM1_BKR_MOE;												
	
	TIM1->SMCR|=  TIM1_SMCR_MSM;				            // synchronization of TRGO with ADC
	
	TIM1->CR1|= TIM1_CR1_CEN;					              // timer 1 enable
		
	ADC1->CSR= ADC1_CSR_EOCIE | (9 & ADC1_CSR_CH);  // ADC EOC interrupt enable, channel 9
	ADC1->CR1= 4<<4 & ADC1_CR1_SPSEL;			          // master clock/8, single conversion
	ADC1->CR2= ADC1_CR2_EXTTRIG;					          // external trigger on timer 1 TRGO, left alignment
	ADC1->TDRH= 2;									                // disable Schmitt trigger on AD input 9
	ADC1->TDRL= 0;                                  //

  // init ADC variables
	AD_samp= 0;						                          // number of stored samples 0
	ADInit= TRUE;                                   // ADC initialized 
	ADSampRdy= FALSE;                               // No sample 
	
	ADC1->CR1|= ADC1_CR1_ADON;					            // ADC on

	enableInterrupts();							                // enable all interrupts 
	
// 								*** MAIN LOOP ***	
	while (1) {
		if (ADSampRdy == TRUE) {				                     // field of ADC samples is ready?
			AD_avg_value= u16_average(&AD_sample[0], AD_samp); // average of samples
			
			AD_samp= 0;								                         // reinitalize ADC variables
			ADSampRdy= FALSE;
						
			leds= signal_and_peak_level((u8)((AD_avg_value + 128) / 256)); // setting LED status
			
			GPIOB->ODR&= leds | (~ALL_LEDs);	// LEDs settings in according to LED status
			GPIOB->ODR|= leds;
		};
	};
}
/**
  * @}
  */

/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Рена писал(а):Надо задействовать порт В целиком, а не только первые четыре.
А что конкретно не выходит?
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт ноя 29, 2013 06:26:40

Сообщение Рена »

Хотел подключить остальные вывода PB4-PB7 на св. диоды чтобы индикация входного напряжения была не 4,. а 8 светодиодов.
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Ну так, купите паяльник и подключите. Или не паяется никак? Возможно флюса недостатошно?
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Пт ноя 29, 2013 06:26:40

Сообщение Рена »

Программно
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

"Мочи мочало, начинай сначала..." ©

Что конкретно не выходит "программно"? Целые не целятся? Массивы не массивятся? 'Goto' огрызается, типа "сам пошел"? Какие были предприняты действия, к чему они привели и что не получилось?

ЗЫ
В коде понравилась индусская тема - "if (ADSampRdy == TRUE)"... Как-то половинчато написано, нет завершенности...
Надо было так написать:

Код: Выделить всё

    if (
         (ADSampRdy == TRUE) && 
         (ADSampRdy != FALSE)
       )
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Сообщение axillent »

скажите, в IAR есть ли возможность в коде определить тип МК под который идет компилирование?
на подобие того, как в атмел студии дефайнятся специальные переменные препроцессора о наличию которых можно установить конкретный МК
Ответить

Вернуться в «Разные вопросы по МК»