Portar, Atmel 32-bit CORTEX
Postat: 11 november 2015, 18:56:53
Köpte detta utvecklingskort:
http://www.atmel.com/tools/ATSAMD10-XMI ... b=overview
Laddade hem nya Atmel Studio 7, och tog fram exemplet som blinkar en lysdiod:
När jag klickar mig runt bland koden/funktionerna som hanterar porten/pinnarna, hamnar jag i djup djungel av structar och funktioner i många många lager.
Sånt här gör mig nästan förtvivlad. Jag vill bara sätta några bitar i port, inte skicka upp en raket till månen.
Är det såhär det är tänkt att man ska jobba med sådana här processorer?
Känns ju som att det blir ett enormt overhead, för något som på gamla 8-bit-tiden tog en instruktion.
Möjligtvis kommer kompilatorn optimera bort (gissar) 5 fem anropsnivåer och (gissar) 100 rader kod, för att toggla pinnen. Så att det i slutändan blir den där enkla instruktionen. Men jag tvivlar. Tror det blir 10 instruktioner, minst. Sånt här får mig verkligen att tappa kraften i fingrarna. Jag undrar vad jag gett mig in på, och varför i hela friden sånt här är nödvändigt. Jag vill ju ha koll på allt i mitt program. Jag brukar inte ens använda enkla libs när jag programmerar, utan jag skriver hela programmen själv. Så gör vi på jobbet också. Skriver allt själva.
Den här tröskeln var verkligen mycket högre än vad jag hade väntat mig. När Atmel Studio 7 dessutom är otroligt slött, och tar upp 1GB minne, då känner jag att jag nästan vill spy.
Nu sitter jag med ett helt nytt projekt, som är så rent som möjligt (dock är ändå största delen av interrupttabellen redan ifylld...), och inser att jag inte kan lista ut hur jag skriver till porten ens (direkt).
Hör gör jag det?
Känner mig helt maktlös här.
http://www.atmel.com/tools/ATSAMD10-XMI ... b=overview
Laddade hem nya Atmel Studio 7, och tog fram exemplet som blinkar en lysdiod:
Kod: Markera allt
void SysTick_Handler(void)
{
port_pin_toggle_output_level(LED_0_PIN);
}
/** Configure LED0, turn it off*/
static void config_led(void)
{
struct port_config pin_conf;
port_get_config_defaults(&pin_conf);
pin_conf.direction = PORT_PIN_DIR_OUTPUT;
port_pin_set_config(LED_0_PIN, &pin_conf);
port_pin_set_output_level(LED_0_PIN, LED_0_INACTIVE);
}
int main(void)
{
system_init();
/*Configure system tick to generate periodic interrupts */
SysTick_Config(system_gclk_gen_get_hz(GCLK_GENERATOR_0)/1000);
config_led();
while (true)
{
}
}
Sånt här gör mig nästan förtvivlad. Jag vill bara sätta några bitar i port, inte skicka upp en raket till månen.
Är det såhär det är tänkt att man ska jobba med sådana här processorer?
Känns ju som att det blir ett enormt overhead, för något som på gamla 8-bit-tiden tog en instruktion.
Möjligtvis kommer kompilatorn optimera bort (gissar) 5 fem anropsnivåer och (gissar) 100 rader kod, för att toggla pinnen. Så att det i slutändan blir den där enkla instruktionen. Men jag tvivlar. Tror det blir 10 instruktioner, minst. Sånt här får mig verkligen att tappa kraften i fingrarna. Jag undrar vad jag gett mig in på, och varför i hela friden sånt här är nödvändigt. Jag vill ju ha koll på allt i mitt program. Jag brukar inte ens använda enkla libs när jag programmerar, utan jag skriver hela programmen själv. Så gör vi på jobbet också. Skriver allt själva.
Den här tröskeln var verkligen mycket högre än vad jag hade väntat mig. När Atmel Studio 7 dessutom är otroligt slött, och tar upp 1GB minne, då känner jag att jag nästan vill spy.
Nu sitter jag med ett helt nytt projekt, som är så rent som möjligt (dock är ändå största delen av interrupttabellen redan ifylld...), och inser att jag inte kan lista ut hur jag skriver till porten ens (direkt).
Hör gör jag det?
Känner mig helt maktlös här.