关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7119|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 A, L+ A0 P$ m- C1 e
; ~+ c2 ?6 \9 D# q4 G" @2 u0 M0 e/ V! D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ ]. B5 |' s: \* T- r) @9 q# W% d/ a# b4 k* q' M, S
其他程序段。。。。。
# V' S% d6 G$ M5 [# n. g9 k
7 H: c- o8 Z3 H* O   free(x_d);6 u0 h# _- X" I8 h# a: d) |

: V/ Q) q6 k: ~9 k! ?/ Q使用DSP侧单独调试功能,验证动态申请没有问题,) h/ s* J0 O" p7 Q2 _  U

# {( K! [* p. `4 c  }但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" i& L% n" i& ^
, k1 G9 i7 Y7 p1 D: l
: m9 ]+ l# _% s' \' r, I

  s8 A; p! |; \5 t( V
6 ]5 l0 V% m3 q7 z- f0 r
* R( @; j' P# O# ?8 \
3 U; j* X. T7 h0 L8 z  f& x* q$ c8 u0 ^  N- E; b) e% ]
8 Y8 S1 p7 a: W" H& b9 ~+ ^

" Z4 Q8 r2 v. \1 n* x1 {9 ]" B8 D, n
2 ?- T6 K, S. f) H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ L. H% n/ h8 d' C我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 d  \: a4 N, N: f/ _# B(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; F3 }# T, e/ f7 _2 t& m

3 g) n/ B3 F+ E0 t是不是需要在DSP.CFG中进行配置5 X% @' q/ Z. Y" U2 q# I  D
我现在的配置为
; ^; j: |  o) K
# g  H* K! g/ M5 B' S/*
6 R7 M3 C7 A1 |2 U: L *  ======== Operating System Configuration ========
+ z2 {4 h4 A% Q* s/ F% T# h */
  x" X5 n0 `7 f* x8 @: O3 `, P- m: M% T- [
/* no rts heap */" ]1 l  e- |+ f( ]4 b
Program.heap = 0;5 \1 T2 S3 b5 K3 c( `1 M5 |5 ]& |
Program.argSize = 100;  /* minimum size */
* _2 ?+ L- G5 `1 q7 s& XProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: s7 N7 \! G& a& C2 ]
1 }! U1 |1 ^* H
/* create a default heap */
& \6 [* g& m6 ]( ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ q" o" D5 i* v% x
var heapMemParams = new HeapMem.Params();
. S2 j5 L' ?" b1 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 D9 K, P3 Q2 m1 J- A* g4 z

9 `) s' X. v' m# |3 Z1 i  P2 i
var Memory = xdc.useModule('xdc.runtime.Memory');  w2 c, Z, q! x* R3 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 u+ D6 G; f- G  X) E+ m5 \
+ H5 z9 A- a- N6 L; o
/* configure System module */
- m. g5 l2 a# Y7 {7 Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');+ X  G1 m% e; S2 z" U+ u
SysMin.bufSize = 0x1000;
" ~7 t% n" a6 t/ e" c6 _SysMin.flushAtExit = false;
; H# S8 v/ a6 @. A) O- x( k8 D6 l" q- l* S+ f: |; K
var System = xdc.useModule('xdc.runtime.System');
/ t& g7 y" T  R: N( t+ qSystem.SupportProxy = SysMin;
/ y6 a0 n( U9 Q- a' O; O  K& Y& R  ~- @1 W, c
/* configure SysBios to use the lower half of Timer 1 */
9 I: p; m9 Z% Yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 b$ j; s% ?/ E; q- u3 Rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');4 W2 Y6 ], ?% P. f9 P
Timer.timerSettings[1].master = true;  g- T7 `" g/ X) Y& G2 F* @% u
Timer.defaultHalf = Timer.Half_LOWER;
  {5 e. Q9 ^- t& Q1 w) ^Clock.timerId = 1;
# ]! j4 T8 I! J7 j0 K$ y
3 x0 X  n# M, \/ ~9 e1 X+ r) R+ W; T0 Z) O2 U1 n! J% M
/*) P! r  f5 q$ V
*  ======== Miscellaneous Configuration ========2 w7 _, v7 P5 m* m  V" n4 ~5 G
*/7 l2 e* R$ u4 Y3 H  w$ S- d

+ q" n+ m/ h; I& D" G/* set default diags mask */2 j( o5 H* e/ h; M" l! w
var Diags = xdc.useModule('xdc.runtime.Diags');
6 M( r  }, Y4 e; x- y4 n% C2 s+ i3 \var Defaults = xdc.useModule('xdc.runtime.Defaults');  P/ U" b! b$ r# C

: g8 W- ]" P4 m% F; ?4 ]! hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 J; l4 O: G7 i- m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) N) d6 b* v1 XDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* I; I7 x5 g' C( ^; P& q$ A- R
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 p% w2 f+ Z; ]9 R- C3 L/ n3 |7 jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 v5 o) S7 d$ }5 N' n7 ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: `% G1 a* v5 k* b% V& p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 G, i( E' `( [! D
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! L  f6 B5 n6 K; tDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 D" h- V1 f; J5 l0 }* GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ ~+ i5 Y/ K; }% C( }0 d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 U7 ~  h0 {/ Q" V! I/ D6 f; e) @5 i$ mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& F4 P# U( ?0 }: b8 j+ DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 I( f" t' _# H' bDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- H- j4 z$ Y; D: e+ b% c7 L& @! n3 a* Y
/* override diags mask for selected modules */
. K4 w- @) X, |$ m# U; a/ U; cxdc.useModule('xdc.runtime.Main');
, s0 O, f( a5 D+ L8 ]1 h" y5 T, HDiags.setMaskMeta(
8 b7 k" r7 F9 z  K) E% E    "xdc.runtime.Main",- L6 n% G# c9 X% ?0 ~& {
    Diags.ENTRY | Diags.EXIT | Diags.INFO,: h; K0 D0 [. N5 y) I
    Diags.RUNTIME_ON
0 W' k6 D1 q" s2 O% {* i$ X6 k) ]);
  D' |, I8 r* ?3 w- }, A, m( ^# `- g- M
var Registry = xdc.useModule('xdc.runtime.Registry');0 h9 w4 q, l: y) @" o/ P
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. L; Z8 x6 `" ~, G+ f& B
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( w2 i4 {) z8 l/ m! r8 V$ y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;& B$ g! P- B0 _; `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ A2 D6 W+ y9 \
6 r& p: ?5 w+ Y+ y! u. }( |. U2 [
/* create a logger instance */7 Z0 u' d5 u) E# \" ?) Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 c' @) P( p! E2 {9 C& n# |var loggerBufP = new LoggerBuf.Params();
* d/ u* D: q; ?/ V9 D4 L& zloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* E* C) v/ z, e( E0 F! N4 b6 @loggerBufP.bufType = LoggerBuf.BufType_FIXED;! g5 |* X) q. t- W

0 o7 u# Q$ i8 A* C3 \' i$ Svar appLogger = LoggerBuf.create(loggerBufP);
  M* B  P1 J4 H: p$ C2 L' qappLogger.instance.name = "AppLog_Core1";
) I" K& b; c, o4 vDefaults.common$.logger = appLogger;4 \! J, [( c+ U5 Z
Memory.defaultHeapSize = 0x8192;    $ I" O  _7 H; W; X
Idle.idleFxns[0] = "&LEDStatus";
. o. o4 F/ Y# B' i1 J! A0 R* t8 MCache.initSize.l2Size = Cache.L2Size_32K;
1 p7 I/ |  t0 e+ p( a" V' a) W! k. I- k7 `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */- g! ?3 g$ ^! [; @2 V4 Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 {2 d# A8 d% p
var heapMemParams = new HeapMem.Params();, `! @+ `  ]4 M3 k* {# P
heapMemParams.size = 0x4000;! N- o6 Z+ U" Z

. P1 G- _* S, J7 P8 o. ?! b3 O7 Jvar Memory = xdc.useModule('xdc.runtime.Memory');- n' K5 ]6 U1 ^4 ^  b/ s/ w$ Y* F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; b% p1 o$ x" g  X" J3 Q
2 h  P2 a5 [" m
我大约calloc  每次共计大小为5K*16bits,
% |/ B& e2 V& R5 n3 x而默认配置才0x4000、需要改大。* x# X, v6 q- r& {

* }/ J6 E1 X& T- T" D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# V) x3 e0 l) o' a/ a# {. [6 s- g! J
Program.heap = 0;4 ^. V9 c3 }2 b) W7 o
Program.argSize = 100;  /* minimum size */
. V0 d; H2 p1 m2 {" H8 I# D5 [Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-19 06:34 , Processed in 0.038744 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表