對于結構體
struct pin_ops
{
rt_err_t (*a)(int m,int n);
rt_err_t (*b)(int m,int n);
};
定義
struct pin_ops ops=
{
a,
b
};
struct pin_ops *ops_t;
對結構體物件ops_t賦值時
1)通過取ops的地址給ops_t賦值
ops_t=&ops; √
//此時可以通過ops_t來呼叫結構體中的函式,例如
ops_t->a();//√
ops_t->b();//√
這里結構體中的函式是可以成功呼叫的。
2)對結構體中的函式指標逐個進行賦值
ops_t->a=ops->a;
ops-t->b=ops->b;
此時不能通過ops_t來呼叫結構體中的函式,如下面操作都是錯誤的
ops_t->a();//×
ops_t->b();//×
這里即使給ops_t分配了記憶體也不能成功呼叫函式,有大佬知道是什么原因嗎?
在stm32中呼叫2)中的函式時會進入硬fault中的INVSTATE錯誤,查閱fault手冊知道這個錯誤是因為內核試圖轉換為ARM模式導致的錯誤,請教這里為什么內核會試圖轉為ARM模式。
uj5u.com熱心網友回復:
你分配記憶體怎么分配的,貼代碼看看uj5u.com熱心網友回復:
不應該是ops.a和ops.b嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/102838.html
標籤:驅動開發/核心開發
上一篇:【資料結構與演算法】->演算法->拓撲排序-.如何確定代碼源檔案的編譯依賴?
下一篇:2020-09-20周總結
