68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/goplus/lib/c"
|
||
|
|
)
|
||
|
|
|
||
|
|
// This demo shows how to use //export with different symbol names on embedded targets.
|
||
|
|
//
|
||
|
|
// On embedded targets, you can export Go functions with different C symbol names.
|
||
|
|
// This is useful for hardware interrupt handlers that require specific names.
|
||
|
|
|
||
|
|
// Standard Go export - same name
|
||
|
|
//
|
||
|
|
//export HelloWorld
|
||
|
|
func HelloWorld() {
|
||
|
|
c.Printf(c.Str("Hello from "))
|
||
|
|
c.Printf(c.Str("HelloWorld\n"))
|
||
|
|
}
|
||
|
|
|
||
|
|
// Embedded target export - different name
|
||
|
|
// Go function name: interruptLPSPI2
|
||
|
|
// Exported C symbol: LPSPI2_IRQHandler
|
||
|
|
//
|
||
|
|
//export LPSPI2_IRQHandler
|
||
|
|
func interruptLPSPI2() {
|
||
|
|
c.Printf(c.Str("LPSPI2 interrupt "))
|
||
|
|
c.Printf(c.Str("handler called\n"))
|
||
|
|
}
|
||
|
|
|
||
|
|
// Embedded target export - different name
|
||
|
|
// Go function name: systemTickHandler
|
||
|
|
// Exported C symbol: SysTick_Handler
|
||
|
|
//
|
||
|
|
//export SysTick_Handler
|
||
|
|
func systemTickHandler() {
|
||
|
|
c.Printf(c.Str("SysTick "))
|
||
|
|
c.Printf(c.Str("handler called\n"))
|
||
|
|
}
|
||
|
|
|
||
|
|
// Embedded target export - different name
|
||
|
|
// Go function name: Add
|
||
|
|
// Exported C symbol: AddFunc
|
||
|
|
//
|
||
|
|
//export AddFunc
|
||
|
|
func Add(a, b int) int {
|
||
|
|
result := a + b
|
||
|
|
c.Printf(c.Str("AddFunc(%d, %d) = %d\n"), a, b, result)
|
||
|
|
return result
|
||
|
|
}
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
c.Printf(c.Str("=== Export Demo ===\n\n"))
|
||
|
|
|
||
|
|
// Call exported functions directly from Go
|
||
|
|
c.Printf(c.Str("Calling HelloWorld:\n"))
|
||
|
|
HelloWorld()
|
||
|
|
|
||
|
|
c.Printf(c.Str("\nSimulating hardware interrupts:\n"))
|
||
|
|
interruptLPSPI2()
|
||
|
|
systemTickHandler()
|
||
|
|
|
||
|
|
c.Printf(c.Str("\nTesting function with return value:\n"))
|
||
|
|
result := Add(10, 20)
|
||
|
|
c.Printf(c.Str("Result: %d\n"), result)
|
||
|
|
|
||
|
|
c.Printf(c.Str("\n=== Demo Complete ===\n"))
|
||
|
|
}
|