作用
让两个小灯每0.3秒闪一次。
引用固件库和SmartOS库,芯片STM32F030F4P6(这芯片小指指甲那么大一点),闪存16k,内存4k
代码
1 #include "Sys.h" 2 #include "Port.h" 3 4 void LedTask(void* param) 5 { 6 OutputPort* leds = (OutputPort*)param; 7 *leds = !*leds; 8 } 9 10 int main(void) 11 { 12 // 初始化系统 13 //Sys.Clock = 136000000; 14 Sys.MessagePort = COM1; // 指定printf输出的串口 15 Sys.Init(); 16 Sys.ShowInfo(); 17 18 // 初始化为输出 19 Pin pins[] = {PD0, PD1}; 20 OutputPort leds(pins, ArrayLength(pins)); 21 Sys.AddTask(LedTask, &leds, 0, 300000); 22 23 Sys.Start(); 24 }
讲解
输出类OutputPort,这里用一组(PD组)引脚初始化,默认50M开漏输出。
当然,它有多种构造函数,可以指定速度和开漏还是推挽输出,用户根据自己需要进行选择。
想Sys添加一个轮询任务,leds对象作为参数传进去,0秒后立刻执行,每300ms执行一次
LedTask里面先把param转回来输出口指针,就是前面添加任务时传进来的那个leds,然后取反实现闪烁。
其实也可以这样:
bool flag = leds; // 读取小灯状态
leds = !flag; // 设置小灯状态
当然,完整的写法应该是这样:
bool flag = leds.Read(); // 读取小灯状态
leds.Write(!flag); // 设置小灯状态
End!
------来自新生命团队!
欢迎大家一起交流 ,分享程序员励志故事。 幸福的程序员 QQ群: 嵌入式交流群
SmartOS之------小鬼点灯,布布扣,bubuko.com
原文:http://www.cnblogs.com/1hua1ye/p/3924563.html