Post on 06-Apr-2015
transcript
Softwareentwicklung für Palm OS
Vortrag zu PUM 2008
● Übersicht über verfügbare Programmiersprachen
● Weitere Tools, Testen und Debuggen● Emulator, Simulator, Gerät● Besonderheiten● Beschränkungen● Ein Beispiel
Vorwort
● Warum ich?● Fast alles ist machbar!● FAQ
Programmiersprachen: C/C++
● PODS (Freeware, Eclipse + gcc, ACCESS)
● prc-tools (Freeware, gcc, keine IDE)● CodeWarrior ($399, †††)● Pocket C (ab $18,50, auch auf Palm)● OrbForms (ab $55)● OnBoard-C (Freeware, auf Palm)● Palmphi (Freeware)
Programmiersprachen: Basic
● HotPaw Basic (16,95 €, auf Palm)● NS Basic (ab $149,95, ähnlich VB)● AppForge ($$, VB AddOn, nicht mehr
verfügbar?)● SmallBasic (Freeware)● HB++ (ab 149 €)● iziBasic ($25, auf Palm)
Programmiersprachen: Weitere
● RAD (Rapid Application Dev.)-Tools Satellite Forms ($795) CASL ($299, Anwendung auch auf Pocket PC
und Windows)● Pascal
HS Pascal (Spendenbasis) PocketStudio (ab $69,99) PPCompiler (Freeware, auf Palm)
● Java SuperWaba (Freeware/$495, Anwendungen
laufen auch auf Pocket PC und Windows)
Tipps
● Programmieranfänger? Basic oder RAD, Freeware
● Umsteiger? Abhängig von bestehender Erfahrung
● Für mich? C mit CodeWarrior oder prc-tools
Tools
● PILRC Standard
Resourcecompiler
● PRC-Explorer Aufbau der
PRC-Datei
● Reporter Ausgabekonsol
e für Emulator oder Simulator
Testen: Emulator
● Emulator bis OS < 5 emuliert Prozessor + Hardware (VM) sehr robust braucht Original-ROM vom Gerät (beim
ADN nur spezielle 2 ROMs) alte ROM-Dateien wegen Graffiti 1 Patent
nicht mehr erhältlich download beim AccessDeveloperNetwork,
spezielle Versionen bei den jeweiligen Herstellern der Geräte (Sony, Handera usw.)
Emulator
bemängelt mehr
Fehler als das echte
Gerät kein Hires(+), keine
moderne Sound-API...
Testen: Simulator
● Simulator ab OS 5 OS 5 als Windowsanwendung compiliert
Nur m68k Code, ARMlets für Intel compiliert
Wenn Anwendungsfehler, dann meistens
Absturz (Debugversion manchmal robuster)
Erhältlich beim ADN, spezielle Versionen bei
den jeweiligen Herstellern der Geräte (Palm)
oder verschollen (Sony, Tapwave)
Simulator
selbst die Gerätesimulatoren funktionieren manchmal etwas anders, als das richtige Gerät
Debuggen
● Mit Emulator oder Simulator: In CodeWarrior geht's prima...
mit PODS geht's auch...
mit prc-tools ist es schwierig.
● Auf dem Gerät: von brauchbar (m68k Code) bis
katastrophal (ARM Code)
Besonderheiten
● Creator ID: 4-stellige Buchstaben/Zahlenkombination. Wichtig eine je Anwendung, Registrieren auf www.developerpavilion.com
Beschränkungen
● limitierter Arbeitsspeicher (wird aber von Gerät zu Gerät besser)
● Segmentierung (32KB große Codesegmente im m68k Code -> MultiSegmentApp)
● Keine C-lib vorhanden, aber API hat viele ähnliche Aufrufe (strlen() -> StrLen() usw.)
● Tastenbelegung und Anordnung bei jedem Gerät anders: JogDial, 5-Way (Nav oder Rocker), Page Up/Down, Tastatur
Display-Auflösung
● bis OS < 5: 160x160 Standard (Lowres)● ab OS 5: 320x320 (Double Density, Hires)
und 320x480 (Hires+)● Wegen Kompatibilität normalerweise immer
alle Koordinaten in Lowres● spezielle APIs für OS < 5 von z.B. Sony und
Handera
Prozessor
● Geräte mit OS < 5 haben m68k: Motorola Dragonball Prozessor
● Geräte ab OS 5 haben ARM Prozessor mit m68k Emulation im ROM
● Anwendungen sind weiterhin im m68k Code, spezielle ARMlets (oder PNOlets) laufen auf direkt auf dem ARM Prozessor, werden aber gewöhnlich von einem m68k Launcher gestartet (siehe PalmPDF)
● ARM ist schneller, keine Segmentierung, ideal für Portierungen...
Infos, Webseiten, Foren, Links
● Palm OS SDK, Docs (API Reference, Companion 1 & 2) und Creator ID bei www.accessdevnet.com
● SDK zu Palm Geräten (Zire, Tungsten, Treo) bei pdn.palm.com
● SDK zu anderen Geräten auf den Herstellerseiten oder teilweise verschollen (Sony, Tapwave)
● News-Foren auf news.palmos.com
● Foren auf pdn.palm.com
● Wikis, Tutorials (z.B. www.flippinbits/twiki)
Ein Beispiel: Übersicht
● PilotMain (Test sysAppLaunchCmdNormalLaunch)
● StartApplication (enthält FrmGotoForm)● EventLoop (bis appStopEvent)● Event-Handler● StopApplication
Ein Beispiel: The Main
UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 flags);
● cmd - LaunchCode vom System● cmdPBP - Argumente je nach
LaunchCode● flags - Anwendung läuft bereits,
Anwendung hat Zugriff auf globale
Variablen usw.
Ein Beispiel: Start und Stop
● Start: PrefGetAppPreferences FrmGotoForm
● Stop: FrmCloseAllForms PrefSetAppPreferences
Ein Beispiel: Warten auf Godot
● EventLoop: Schleife bis appStopEvent kommt EvtGetEvent (Wartet auf Event, mit TimeOut) SysHandleEvent (Event nur für System?) Form wird geladen (frmLoadEvent): FrmInitForm, FrmSetActiveForm und FrmSetEventHandler
Sonst einfach: FrmDispatchEvent
Ein Beispiel: Oberfläche
● PILRC übersetzt .rcp-Datei:FORM ID MainForm AT ( 0 0 160 160 )BEGINTITLE "Nexave.de"
BUTTON "Enable" ID EnableBtn AT ( 40 30 80 20)BUTTON "Disable" ID DisableBtn AT ( PREVLEFT PREVTOP+30 PREVWIDTH PREVHEIGHT)
LABEL "Palm User Meeting 2008" AUTOID AT ( CENTER@80 113 )
END
Ein Beispiel: Makefile
all: nexave.prc
nexave.prc: main main.ro m68k-palmos-obj-res main build-prc -o nexave.prc -n "Nexave" -c NxVe *.grc *.ro
main: main.omain.o: main.c main.h Main_Rsc.h
Main_Rsc.h: main.rcp pilrc -ro main.rcp
Ein Beispiel: Test
Ein Beispiel: Launchcodes, Events, Notifications
● LaunchCodes:NormalLaunch, Reset, Find, GoTo...
● Events:frmOpenEvent, ctlSelectEvent, appStopEvent...
● Notifications: sysNotifyVirtualCharHandlingEvent, sysNotifyLateWakeupEvent
Ein Beispiel: Das Ergebnis
Nachwort
Alles nochmal zum Nachlesen, die Beispielanwendung und der Sourcecode auf
● http://www.metaviewsoft.de/PUM-2008