Вт мар 23, 2021 21:00:59
Dimon456 писал(а):вопрос возникает - можно ли еще уменьшить размер функции если использовать так
Вт мар 23, 2021 21:33:56
Функции, использующие глобальные переменные, совершенно не гибкие и имеют побочные эффекты, о которых ничего неизвестно из их объявления (прототипа). Никогда не используйте глобальных переменных в функциях. Если надо - передавайте их в функцию через параметры (как именно - по значению или по указателю/ссылке - это уже другой вопрос).
Ср мар 24, 2021 06:59:59
NStorm писал(а):в embedded иногда имеет место использование глобальных переменных из функций именно из-за экономии ресурсов. Тут иногда приходится жертвовать гибкостью и изящностью кода в угоду лишним байтам и тактам.
Ср мар 24, 2021 16:12:39
#define DDS_NDMA 512
static uint16_t DmaBuff[DDS_NDMA] __attribute__ ((aligned(4)));
static uint32_t Omega __attribute__ ((aligned(4)));
union BytByte {
struct {
uint16_t h;
unsigned char b0: 1;
unsigned char b1: 1;
unsigned char b2: 1;
unsigned char b3: 1;
unsigned char b4: 1;
unsigned char b5: 1;
unsigned char b6: 1;
unsigned char b7: 1;
unsigned char b8: 1;
unsigned char b9: 1;
unsigned char b10: 1;
unsigned char b11: 1;
unsigned char b12: 1;
unsigned char b13: 1;
unsigned char b14: 1;
unsigned char b15: 1;
} bit;
volatile uint32_t byte;
}__attribute__ ((aligned(4)));
#define IRQ_MASK 0x0000F000 //DMA_ISR_TCIF4
void DMA1_Channel4_5_IRQHandler(void)
{
uint16_t *dp;
uint32_t irq; uint16_t n;
static union BytByte myBByte;
DMA1->IFCR = irq = DMA1->ISR & IRQ_MASK;
dp = &DmaBuff[(irq & DMA_ISR_TCIF4) ? DDS_NDMA / 2 : 0];
n = DDS_NDMA / 2;
do {
myBByte.byte += Omega;
*dp = myBByte.bit.b15;
dp += 1;
} while (--n != 0);
}
Ср мар 24, 2021 17:38:36
Ср мар 24, 2021 22:36:26
Dimon456 писал(а):вот те переменные и та функция
Ср мар 24, 2021 22:53:07
Ср мар 24, 2021 23:24:28