关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( ^4 w  c8 [2 V
& T: F9 X4 n' B2 r0 h7 G1 T1 t; _
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 {  w6 Z- n; u! P# ?/ {

" O& B, d, A2 C其他程序段。。。。。
5 J* n, C3 g( P3 H9 g8 a % {0 \/ A: q9 I- a& S: u
   free(x_d);' Y) G- o7 q2 V* w" D2 Q% ~* }

- t$ r# W5 X1 \* P使用DSP侧单独调试功能,验证动态申请没有问题,
" S, f0 c4 P8 n. i
  y4 J4 e/ F0 C$ M但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 g/ z8 O6 Z# ^, B
/ i3 k) F, m9 w; N# b: [
8 ]/ A5 v2 ^/ Y# a. }0 ?1 N; n
7 U5 x7 J( N+ p5 {

% S9 ]) E3 R' h( l9 A4 Y8 R1 H

) P$ ]( {7 A2 G+ Q8 m
; M. ^+ ]$ K( f) h9 @, J: Q
! @) A1 i6 s- i7 W- q; y% C/ q5 l& r9 L+ g2 v
- ?' |- G3 T% J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
3 N7 r$ e& O  Q/ P) YProgram.heap = 0;! A1 B* b$ e9 |7 |$ j8 x, ]
Program.argSize = 100;  /* minimum size */9 J; Q6 ?' B6 N. L* X; _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
2 Q# j9 u+ x. Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, y7 u/ m: e5 }! p' m$ J$ z4 t
var heapMemParams = new HeapMem.Params();
+ k0 B# K1 ^/ d, i' k3 R2 r) `heapMemParams.size = 0x4000;
! l1 ~- `! \1 o; v% {" L# J3 H( _8 y. R7 r
var Memory = xdc.useModule('xdc.runtime.Memory');% \/ E# _) _9 K% E1 h4 s* Y! z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ w; J4 K- F. E5 q, Z7 w: N3 ~' C
4 h; u' R$ N- ]0 n我大约calloc  每次共计大小为5K*16bits,
( B* j$ E: f& M1 ~8 |7 C/ p而默认配置才0x4000、需要改大。) a$ I% `# a9 O: \( J7 F! p
, O) ]' f0 }# b3 v% F9 d3 k( T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% I$ Z, z" q5 ?& V8 ~我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 C; W- @( G! F9 z8 t- E
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% W& B) u% W0 W: d1 Y5 H4 w

; w) P. Q3 X! q7 s2 [7 O是不是需要在DSP.CFG中进行配置8 [2 o2 F) x8 D6 p7 X
我现在的配置为- u$ d  ~  C1 i4 ~

: a+ }8 S* Z6 j! z/ N3 y/*+ h7 S9 z( G, _! }- _6 J9 Q4 k
*  ======== Operating System Configuration ========
% ]& ^5 n; A" H  Q$ I' f8 X */
0 {4 s" C) w4 r5 `4 ?" b6 C# W% k5 D7 J! ^5 J- H8 w: J
/* no rts heap */+ i1 r2 Z( F4 M
Program.heap = 0;
0 ~9 u0 q8 x5 t$ X+ L; v1 z! }Program.argSize = 100;  /* minimum size */
0 x  [% x: N8 `* ]Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) r! l, L: Q0 q) r: L6 ~3 [! d2 ^2 R+ A& l
/* create a default heap */7 E( N& U) g( C/ h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 e8 H( ?# B5 j# j3 i# yvar heapMemParams = new HeapMem.Params();1 [  m* A+ C" g4 }: q0 U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! C" L7 g$ c# n9 }+ h4 F
+ Y3 v2 R+ T! l) I- y" R$ z
var Memory = xdc.useModule('xdc.runtime.Memory');. A5 t0 W. [* l2 G( f1 O9 \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 i" R+ {9 a, R5 C% N* K) X4 K) p8 t( K- r/ c+ F* L! n! e% V
/* configure System module */0 p3 f8 ?8 r7 y- @
var SysMin = xdc.useModule('xdc.runtime.SysMin');. i; ~8 p/ b# T" V  P6 }: A! X
SysMin.bufSize = 0x1000;. n" c9 A# p+ v7 `* R3 x
SysMin.flushAtExit = false;) n4 |7 x# o9 L8 ]
( f+ C: n- }+ P3 y% I) h* d/ ~
var System = xdc.useModule('xdc.runtime.System');% q2 D' v2 y. \! I
System.SupportProxy = SysMin;1 F3 W: ^- S+ |6 W/ z  L
7 U1 X) ~% Z) b$ l" i: P
/* configure SysBios to use the lower half of Timer 1 */% i$ t1 L9 Q8 G5 [% R  h7 G/ J  N
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ n/ o9 g! \$ i) ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; x+ O: W. I0 j  u% g0 {6 `; g, C# BTimer.timerSettings[1].master = true;1 E' y6 R' t: u/ m  e
Timer.defaultHalf = Timer.Half_LOWER;/ c7 W9 g, f, ~- Q' J
Clock.timerId = 1;. x; B4 ?1 H) D# [5 }

4 D& z" c* R$ p
' |. C3 _9 H6 l) B/*- n* {8 u3 B: i7 W+ O! Y
*  ======== Miscellaneous Configuration ========7 U5 s' V' y# \5 L, L+ J' }
*/, X; o0 R( B  Y- Q1 e9 m
8 g5 l: ]8 W+ k/ W  U
/* set default diags mask */7 F4 \1 R  e: p' y9 z
var Diags = xdc.useModule('xdc.runtime.Diags');
! l) i- M- r6 v) v. g; W/ n; M1 Ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
* n3 v! W; P! a6 O7 P" B" }) x0 J; w4 q* w! f" [1 O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- q# y, y' ~7 l4 C5 hDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ B2 U$ j1 m1 ?3 i) T" S6 R6 XDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; [3 _( l7 M4 W8 N3 Q9 {1 M8 |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 F; b% X# m( _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  D; a9 F6 f. v; b  @
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ X9 L, F8 H) B: ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" t/ b+ a1 r/ ?$ I8 {$ JDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 F3 l- A& V8 U1 g8 v( T0 h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 W: F3 }% x" Z* q: ^Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ Q! x1 n7 N: p  s* g1 [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' ^' ]5 C4 ^7 ]
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 Z/ D1 ^2 |. e5 a% K" E
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% V$ |- C& W( i& e; d( tDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* ~5 u6 J; W" E' K# c* H

! K* b, ]& I# a7 |3 J/* override diags mask for selected modules */
! V  }$ X1 P8 G* b( O% Kxdc.useModule('xdc.runtime.Main');
7 b7 V9 S5 u0 Y3 X! B. LDiags.setMaskMeta(% ~% G8 H6 C. ]/ Y( L6 S
    "xdc.runtime.Main",3 n' z( F4 N2 U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 O6 |* i: s# P5 t4 b. v8 }    Diags.RUNTIME_ON
" y8 t; |- h2 H& V% P);
  `* M5 B9 F9 {4 k* u* `
2 O8 M! C8 A# p/ Bvar Registry = xdc.useModule('xdc.runtime.Registry');
# L* T7 l' p% c/ _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 b: {( S4 m5 q% |5 D4 gRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 X! h0 E- [4 b$ c' `5 N! ^Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;( ~, V+ K  c$ U8 W6 N
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- Q8 P* e8 Q# l; c
9 u  T( O7 N0 s2 ^
/* create a logger instance */
6 p3 o6 V, T% j- I7 `! [4 ?* u6 Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 M8 L. I0 Q: n2 Y" ?. H$ j
var loggerBufP = new LoggerBuf.Params();
  t1 c( K* k4 s/ }$ p! J! {loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; A2 N* e4 Y( G* M. J; [7 FloggerBufP.bufType = LoggerBuf.BufType_FIXED;! D; E& j% j4 R( H! R
8 g$ q1 i+ \+ Y6 X
var appLogger = LoggerBuf.create(loggerBufP);2 Z) @2 n# R' a* [, v% b0 C6 G
appLogger.instance.name = "AppLog_Core1";
2 m0 z9 B9 v  f: z3 d5 n8 pDefaults.common$.logger = appLogger;: t& U/ g, [) n% @8 B
Memory.defaultHeapSize = 0x8192;   
4 [. P$ t" s$ D1 Y/ JIdle.idleFxns[0] = "&LEDStatus";% d- U; n; ^8 b4 q' N) f/ h
Cache.initSize.l2Size = Cache.L2Size_32K;+ z+ ~4 i8 i" C) Q
- @- N3 B5 P" _% \7 ~# u! J- T
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-25 01:16 , Processed in 0.041333 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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