在深入了解了scons创建目标工程的内部机制,按着导师的要求,先画整个工程的数据流图,对整个项目的实现有个总体的把握。
这段时间主要做了如下工作:
- 使用qt-designer做向导界面(暂时是demo)。
- 写脚本实现编译库的功能。
- 画出项目的数据流图。
暂时代码框架如下所示:用户最终的配置都写入_rtrc文件以及对应的相应功能单元的头文件中。import os import sys import subprocess import pickle from log import * from ui_wizard import Ui_MainWindow from PyQt4 import QtGui SETTINGS = {} def userSetting(): global SETTINGS SETTINGS['CC'] = 'armcc' def storeSetting(): global SETTINGS fp = open(os.path.join(SETTINGS['BSP_DIR'], "_rtrc"), "w") pickle.dump(SETTINGS, fp) fp.close() class Ui(QtGui.QMainWindow): def __init__(self, parent=None): super(Ui, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.toolPage.setLayout(self.ui.verticalLayout) self.ui.MainWidget.setLayout(self.ui.horizontalLayout) def changePage(self, pre, cur): pass if __name__ == '__main__': app = QtGui.QApplication(sys.argv) widget = Ui() widget.show() sys.exit(app.exec_()) userSetting() ''' if os.getenv('RTT_ROOT'): RTT_ROOT = os.getenv('RTT_ROOT') else: RTT_ROOT = SETTINGS['RTT_ROOT'] ''' #what we add here should be done through userSetting() SETTINGS['RTT_ROOT'] = os.path.normpath('F:/rt-thread') SETTINGS['BSP_DIR'] = os.path.normpath(SETTINGS['RTT_ROOT'] + '/bsp/stm32f20x') SETTINGS['PROJECT_TYPE'] = 'mdk4' SETTINGS['CROSS_TOOL'] = 'keil' SETTINGS['STM32_TYPE'] = 'STM32F20X_CL' #SETTINGS['DEVICE_DRIVERS'] = [': sys.path = sys.path + [os.path.join(SETTINGS['RTT_ROOT'], 'tools'), SETTINGS['BSP_DIR']] logging.debug(SETTINGS['BSP_DIR']) logging.debug(SETTINGS['RTT_ROOT']) storeSetting() #after configuration, use scons to construct project os.chdir(SETTINGS["BSP_DIR"]) #subprocess.call('scons --target=' + SETTINGS['PROJECT_TYPE'] + ' -s', shell=True) #subprocess.call('scons --target=' + SETTINGS['PROJECT_TYPE'], shell=True) subprocess.call('scons --buildlib=Kernel', shell = True) subprocess.call('scons --target=' + SETTINGS['PROJECT_TYPE'], shell=True)
最终实现的数据流图如图所示: