Чт май 02, 2019 10:04:21
Чт май 02, 2019 10:14:35
Вс май 19, 2019 21:53:23
Пн май 20, 2019 02:18:13
Пн май 20, 2019 10:07:27
Пн май 20, 2019 10:16:11
Пн май 20, 2019 10:37:12
Пн май 20, 2019 10:42:22
Сб июл 27, 2019 16:55:46
uint16_t capch;
capch=*((uint16_t*)&TIM2_CCR3H);
uint16_t capch;
((uint8_t *)&capch)[0]=TIM2_CCR3H;
((uint8_t *)&capch)[1]=TIM2_CCR3L;
uint16_t capch;
((uint8_t *)&capch)[1]=TIM2_CCR3L;
((uint8_t *)&capch)[0]=TIM2_CCR3H;
Пн авг 05, 2019 15:23:49
uint16_t capch=(TIM2_CCR3H<<8)|TIM2_CCR3L;
uint16_t capch = TIM2_CCR3H<<8;
capch |= TIM2_CCR3L;
Пн авг 05, 2019 15:46:53
Спасибо. Вечно сам себе трудности нахожу, чтобы их мужественно преодолевать.VladislavS писал(а):На странице 167.
Попробовал предложенных оба варианта. Компиллится в кучу команд в том числе логики и сдвига. IAR, оптимизация максимум в режиме speed.VladislavS писал(а): Всё гораздо проще, не надо мудрить. На восьмибитке сдвиг на 8 бесплатен.
Пн авг 05, 2019 19:09:28
void foo(uint16_t data)
{
if(data) __enable_interrupt(); else __disable_interrupt();
}
int main()
{
uint16_t capch = (PORTB<<8) | PORTC;
foo(capch);
for(;;);
}
//---------- Листинг ----------
//int main()
main:
//{
// uint16_t capch = (PORTB<<8) | PORTC;
// foo(capch);
IN R19, 0x18
IN R16, 0x15
OR R16, R19
BREQ ??main_0
SEI
RJMP ??main_1
??main_0:
CLI
//for(;;);
??main_1:
RJMP ??main_1
//}
void foo(uint16_t data)
{
if(data) __enable_interrupt(); else __disable_interrupt();
}
int main()
{
uint16_t capch;
((uint8_t *)&capch)[0]= PORTB;
((uint8_t *)&capch)[1]= PORTC;
foo(capch);
for(;;);
}
//---------- Листинг ----------
//int main()
main:
//{
SBIW R29:R28, 2
// uint16_t capch;
// ((uint8_t *)&capch)[0]= PORTB;
IN R16, 0x18
ST Y, R16
//((uint8_t *)&capch)[1]= PORTC;
IN R16, 0x15
STD Y+1, R16
// foo(capch);
LD R16, Y
LDD R17, Y+1
OR R16, R17
BREQ ??main_0
SEI
RJMP ??main_1
??main_0:
CLI
//for(;;);
??main_1:
RJMP ??main_1
//}
Пн авг 05, 2019 19:45:03
Для STM8 не так много компиляторов, тем более бесплатных.VladislavS писал(а):Тот компилятор, который не сделает из этого просто две операции чтения, выкинуть и никогда не использовать
Пн авг 05, 2019 20:13:35
Вт авг 06, 2019 05:59:28
void foo(uint16_t data)
{
if(data) asm("rim"); else asm("sim");
}
int main()
{
uint16_t capch = (TIM2_CCR3H<<8) | TIM2_CCR3L;
//TIM2_CCR3L++;
foo(capch);
for(;;);
}
TIM2_CCR3L++;
TIM2_CCR3L++;
0085A5 C65316 LD A, TIM2_CCR3L
0085A8 4C INC A
0085A9 C75316 LD TIM2_CCR3L, A
asm("inc TIM2_CCR3L");
0085B0 725C5316 INC TIM2_CCR3L
Вт авг 06, 2019 07:49:38
Вт авг 06, 2019 07:52:13
Бесплатный SDCC http://sdcc.sourceforge.net/VladislavS писал(а):IAR самый бесплатный из них?
Вт авг 06, 2019 07:54:09
TIM2_CCR3L++;
TIM2_CCR3L++;
0085A5 C65316 LD A, TIM2_CCR3L
0085A8 4C INC A
0085A9 C75316 LD TIM2_CCR3L, A
Вт авг 06, 2019 08:17:35
Нельзя. IAR коммерческий продукт и рассчитывая получить прибыль с продаж, надо все же было постараться сделать компиллятор по умнее. Тем более система команд STM8 заточена под Си, да и ИАРовцы умеют же, видимо не приоритет просто. А то что демо версия подошла под радиолюбительские хотелки, это частный счастливый случай .jcxz писал(а):можно считать что он просто бесплатен.
И что? Что это меняет? Проверять пока не хочу, но стоит.jcxz писал(а):Подозреваю, что сиё связано с тем, что TIM2_CCR3L у Вас объявлен как volatile.
3.10.4 У меня.jcxz писал(а):Вы используете какую-то древнюю версию IAR.
Вт авг 06, 2019 11:14:44
И что? Что это меняет? Проверять пока не хочу, но стоит.jcxz писал(а):Подозреваю, что сиё связано с тем, что TIM2_CCR3L у Вас объявлен как volatile.
#include "iostm8s103f2.h"
#include "intrinsics.h"
#include "stdint.h"
void foo(uint16_t data)
{
if(data) __enable_interrupt(); else __disable_interrupt();
}
int main()
{
uint16_t capch = (TIM2_CCR3H<<8) | TIM2_CCR3L;
foo(capch);
for(;;);
}
// --- Листинг ----
//int main()
//{
// uint16_t capch = (TIM2_CCR3H<<8) | TIM2_CCR3L;
/ foo(capch);
main:
LD A, L:0x5315
CLRW X
LD XL, A
CLR A
RLWA X, A
LD A, L:0x5316
LD S:?b1, A
RRWA X, A
OR A, S:?b1
RRWA X, A
RRWA X, A
JREQ L:??main_0
RIM
JRA L:??main_1
??main_0:
SIM
// for(;;);
??main_1:
JRA L:??main_1
//}
#include "iostm8s103f2.h"
#include "intrinsics.h"
#include "stdint.h"
void foo(uint16_t data)
{
if(data) __enable_interrupt(); else __disable_interrupt();
}
int main()
{
uint16_t capch;
((uint8_t *)&capch)[0]= TIM2_CCR3H;
((uint8_t *)&capch)[1]= TIM2_CCR3L;
foo(capch);
for(;;);
}
// --- Листинг ----
/int main()
//{
main:
SUB SP, #0x2
// uint16_t capch;
// ((uint8_t *)&capch)[0]= TIM2_CCR3H;
LD A, L:0x5315
LD (0x1,SP), A
// ((uint8_t *)&capch)[1]= TIM2_CCR3L;
LD A, L:0x5316
LD (0x2,SP), A
//
// foo(capch);
LDW X, (0x1,SP)
JREQ L:??main_0
RIM
JRA L:??main_1
??main_0:
SIM
// for(;;);
??main_1:
JRA L:??main_1
//}
#include "iostm8s103f2.h"
#include "intrinsics.h"
#include "stdint.h"
void foo(uint16_t data)
{
if(data) __enable_interrupt(); else __disable_interrupt();
}
uint16_t capch;
int main()
{
capch = (TIM2_CCR3H<<8) | TIM2_CCR3L;
foo(capch);
for(;;);
}
// --- Листинг ----
//int main()
//{
// ((uint8_t *)&capch)[0]= TIM2_CCR3H;
main:
MOV L:capch, L:0x5315
// ((uint8_t *)&capch)[1]= TIM2_CCR3L;
MOV L:capch + 1, L:0x5316
//
// foo(capch);
LDW X, L:capch
JREQ L:??main_0
RIM
JRA L:??main_1
??main_0:
SIM
//
//for(;;);
??main_1:
JRA L:??main_1
//}