Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.02 KB | None | 0 0
  1. #include "mcu_support_package/inc/stm32f10x.h"
  2. #include "string.h"
  3.  
  4. uint16_t reverseBits( uint16_t n){
  5. uint16_t reversed = 0;
  6. for(uint8_t i = 0; i < 16; i++){
  7. if ((n & (1<<15)) !=0){
  8. reversed |= (1<<i);
  9. }
  10. n = n<<1;
  11. }
  12. return reversed;
  13. };
  14.  
  15. int simple_snprintf(char * output, size_t output_size, const char * input, int a, float b, long long c){
  16. uint8_t n=0;
  17. for(uint8_t i=0; input[i] !=0; i++,n++){
  18. if(input[i] == '%'){
  19. if(input[i+1] == 'i') {
  20. int temp = a;
  21. int8_t digits_in_a = 0;
  22. char reversed_out[10];//т.к. у INT_MAX 10 цифр
  23. while( a!=0){
  24. temp = a%10;
  25. a=a/10;
  26. reversed_out[digits_in_a++] = (char)(temp+0x30);
  27. if ((n + digits_in_a - 1) == output_size ){
  28. output[n] = 0;
  29. return n;
  30. }
  31. }
  32. for(;digits_in_a != 0;digits_in_a --)
  33. output[n++] = reversed_out[digits_in_a - 1];
  34. i+=2;
  35. n--;
  36. }
  37. if(input[i+1] == 'f') {
  38. char temp = (char) (b * 10);
  39. output[n++] = temp / 10;
  40. output[n++] = '.';
  41. output[n++] = temp % 10;
  42. i+=2;
  43. }
  44. if((input[i+1] == 'l')&&(input[i+2] == 'l')) {
  45. long long temp = c;
  46. int8_t digits_in_c = 0;
  47. char reversed_out[20];//т.к. у LONG_INT_MAX 20 цифр
  48. while( c!=0){
  49. temp = c%10;
  50. c=c/10;
  51. reversed_out[digits_in_c++] = (char)(temp+0x30);
  52. if ((n + digits_in_c - 1) == output_size ){
  53. output[n] = 0;
  54. return n;
  55. }
  56. }
  57. for(;digits_in_c != 0;digits_in_c --)
  58. output[n++] = reversed_out[digits_in_c - 1];
  59. i+=3;
  60. n--;
  61. }
  62. }
  63. if((n+1) == output_size) {
  64. n++;
  65. break;
  66. }
  67. output[n] = input[i];
  68. }
  69. output[n] = '\0';
  70. return n;
  71. }
  72.  
  73.  
  74. int main(void){
  75. char buf[120];
  76. uint16_t rev = reverseBits(7);
  77. uint16_t re2 = reverseBits(0x8901);
  78. simple_snprintf(buf,120, "Jack has %i eyes, %f legs and %ll heads", 3433442, 5.9, 6909799999);
  79. return 0;
  80. }
  81.  
  82.  
  83.  
  84. // В Project->Options->Linker, Scatter File выбран файл stack_protection.sct
  85. // он обеспечивает падение в HardFault при переполнении стека
  86. // Из-за этого может выдаваться ложное предупреждение "AppData\Local\Temp\p2830-2(34): warning: #1-D: last line of file ends without a newline"
  87.  
  88. #ifdef USE_FULL_ASSERT
  89.  
  90. // эта функция вызывается, если assert_param обнаружил ошибку
  91. void assert_failed(uint8_t * file, uint32_t line) {
  92. /* User can add his own implementation to report the file name and line number,
  93. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  94.  
  95. (void)file;
  96. (void)line;
  97.  
  98. __disable_irq();
  99. while(1) {
  100. // это ассемблерная инструкция "отладчик, стой тут"
  101. // если вы попали сюда, значит вы ошиблись в параметрах вызова функции из SPL.
  102. // Смотрите в call stack, чтобы найти ее
  103. __BKPT(0xAB);
  104. }
  105. }
  106.  
  107. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement