Browse Source

fix hardfault when RT_CAN_USING_BUS_HOOK is enabled in bsp/stm32f10x

function `rt_pin_write` is invoked by  function `can_bus_hook`, and it should to be initialized by gpio.c.
but gpio.c was not added in SConscript
gbcwbz 9 years ago
parent
commit
0d63eb5f6d
3 changed files with 7 additions and 1 deletions
  1. 3 0
      bsp/stm32f10x/drivers/SConscript
  2. 1 1
      bsp/stm32f10x/rtconfig.h
  3. 3 0
      components/drivers/misc/pin.c

+ 3 - 0
bsp/stm32f10x/drivers/SConscript

@@ -12,6 +12,9 @@ led.c
 usart.c
 usart.c
 """)
 """)
 
 
+if GetDepend(['RT_USING_PIN']):
+    src += ['gpio.c']
+
 # add canbus driver.
 # add canbus driver.
 if GetDepend('RT_USING_CAN'):
 if GetDepend('RT_USING_CAN'):
     src += ['bxcan.c']
     src += ['bxcan.c']

+ 1 - 1
bsp/stm32f10x/rtconfig.h

@@ -84,7 +84,7 @@
 
 
 #define RT_USING_CAN
 #define RT_USING_CAN
 
 
-//#define RT_CAN_USING_BUS_HOOK
+#define RT_CAN_USING_BUS_HOOK
 
 
 #define RT_CAN_USING_HDR
 #define RT_CAN_USING_HDR
 /* SECTION: device filesystem */
 /* SECTION: device filesystem */

+ 3 - 0
components/drivers/misc/pin.c

@@ -101,18 +101,21 @@ int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void
 /* RT-Thread Hardware PIN APIs */
 /* RT-Thread Hardware PIN APIs */
 void rt_pin_mode(rt_base_t pin, rt_base_t mode)
 void rt_pin_mode(rt_base_t pin, rt_base_t mode)
 {
 {
+	RT_ASSERT(_hw_pin.ops != RT_NULL);
     _hw_pin.ops->pin_mode(&_hw_pin.parent, pin, mode);
     _hw_pin.ops->pin_mode(&_hw_pin.parent, pin, mode);
 }
 }
 FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_mode, pinMode, set hardware pin mode);
 FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_mode, pinMode, set hardware pin mode);
 
 
 void rt_pin_write(rt_base_t pin, rt_base_t value)
 void rt_pin_write(rt_base_t pin, rt_base_t value)
 {
 {
+	RT_ASSERT(_hw_pin.ops != RT_NULL);
     _hw_pin.ops->pin_write(&_hw_pin.parent, pin, value);
     _hw_pin.ops->pin_write(&_hw_pin.parent, pin, value);
 }
 }
 FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_write, pinWrite, write value to hardware pin);
 FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_write, pinWrite, write value to hardware pin);
 
 
 int  rt_pin_read(rt_base_t pin)
 int  rt_pin_read(rt_base_t pin)
 {
 {
+	RT_ASSERT(_hw_pin.ops != RT_NULL);
     return _hw_pin.ops->pin_read(&_hw_pin.parent, pin);
     return _hw_pin.ops->pin_read(&_hw_pin.parent, pin);
 }
 }
 FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_read, pinRead, read status from hardware pin);
 FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_read, pinRead, read status from hardware pin);