问题2:直接跳入函数好还是,打开函数入口好?
不存在跳入函数这么个操作,主要的问题是函数调用前有入栈出栈操作,即便没有参数没有返回值也不行,情况比较复杂还是让编译器安排的好。
方案2: if(SWITCH==0;) return; //这是主程序扫描程序之一,获取键值后赋值SWITCH,打开按键处理入口,让单片机扫过去处理键值,然后下一句是。。。
如果KEY_Deal()函数里有 if(SWITCH==0;) return; 那你就画蛇添足了
问题3: 包含过多.h文件会增加代码长度吗?
头文件内容过多会影响编译速度(一点点而已),不会影响代码,倒是过多的头文件可能会有意外的重名或冲突。不嫌麻烦只包含最少的头文件当然好。
问题4: 我想先在第一次上电时检查FLASH的某些位置(如0x8555之类任意的)数据是否是自己赋值,然后在程序在第一次上电时往这些flash位置写入多个数据,这么做是想防止复制烧录文件,这种方法可行吗?对程序加密不是很懂,望指教。
数据可以用define定义一下,你这个方法有几个问题:第一flash的修改是要先擦除然后才能写,擦除要按块来操作,一擦一块,即便你只写两个字节也要先缓存原块里的数据,stm32块大小不统一有些位置的块有32K大小,很麻烦。第二假设别人复制了你flash里所有内容那么连你做的标记也一起复制了,你又如何界定什么时候是第一次上电执行呢? |