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 stdin
và 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_A
thay 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
main
chức năng gọi một chức năng nhưfunction_A
function_A
thay đổi một biến toàn cụcfunction_addr
thành con trỏ địa chỉ của hàmin_function_A
- Từ thời điểm đó,
main
gọi hàmfunction_addr
khi có đầu vào mới.
Vì vậy, những gì tôi cần là một main
chức năng kiểm tra nếu function_addr
bằ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_addr
sẽ được gọi. Tôi cũng cần một function_A
cái mà thay đổi function_addr
con trỏ thành in_function_A
.
Lưu ý: khi đóng chức năng hệ thống tập tin, is_function_A
chỉ nên thay đổi function_addr
thà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