Tôi có PIC18F46K22 và lập trình nó với trình biên dịch XC8. Cuối cùng, tôi sẽ có một hệ thống giống như một máy tính với stdinvà stdout. Vì vậy, trong vòng lặp chính sẽ có một chức năng đang kiểm tra nếu có đầu vào mới. Nếu có đầu vào, một hàm sẽ được gọi tương ứng. Vì vậy, ví dụ khi tôi nhập A vào stdin, PIC sẽ chạy một hàm như function_Athay vì function_Bđược gọi khi tôi nhập B.
Khi PIC được thực hiện với chức năng, tôi muốn rằng đầu vào mới được gửi đến chức năng. Vì vậy, khi nhấn A sẽ mở bộ phát RS232, từ thời điểm đó, mọi đầu vào sẽ được gửi qua RS232. Cuối cùng, dự án là một trình soạn thảo văn bản độc lập. Vì vậy, khi nhấn A sẽ mở hệ thống tệp, từ lúc đó bạn không chỉnh sửa văn bản nữa mà xem qua danh sách các tệp. Điều đó có nghĩa là nhấn Lên và Xuống có nghĩa là một cái gì đó khác với trong môi trường chỉnh sửa văn bản.
Tôi đã suy nghĩ rất nhiều về cách lập trình này trong C. Tôi đã nghĩ đến chuyện tối qua và muốn biết liệu nó có thể không và nếu có thì làm thế nào. Điều tôi muốn làm là:
- Các
mainchức năng gọi một chức năng nhưfunction_A function_Athay đổi một biến toàn cụcfunction_addrthành con trỏ địa chỉ của hàmin_function_A- Từ thời điểm đó,
maingọi hàmfunction_addrkhi có đầu vào mới.
Vì vậy, những gì tôi cần là một mainchức năng kiểm tra nếu function_addrbằng không. Nếu đúng như vậy, một hàm 'bình thường' sẽ được gọi, như thế function_A. Nếu không, hàm function_addrsẽ được gọi. Tôi cũng cần một function_Acái mà thay đổi function_addrcon trỏ thành in_function_A.
Lưu ý: khi đóng chức năng hệ thống tập tin, is_function_Achỉ nên thay đổi function_addrthành 0.
Vì vậy, về cơ bản câu hỏi của tôi là làm thế nào tôi có thể
- Lấy địa chỉ của hàm (và lưu nó trong một biến)
- Gọi một chức năng tại một địa chỉ được chỉ định