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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 s7 {8 |2 _: E9 d: i
: N: F4 b8 y. h% z9 k: j    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! I8 Z# p9 n; I( `. Z" N

% W9 S& n4 z+ Z2 V其他程序段。。。。。" S  g! {( T$ m3 C. Q: C4 [

% U7 U. W5 p% M5 ~   free(x_d);" T* a6 N3 p9 @1 k9 W8 ^: b5 U

% H. g+ A8 C: q+ r0 T$ A使用DSP侧单独调试功能,验证动态申请没有问题,
4 g+ e" a4 Y' ^0 h* R+ o
6 B3 d! Z- Z% Q. X但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 A& K9 {' v! M

, T" h( N( R2 m
2 c/ _4 f" ?$ Y9 ^1 C. K
" s7 i" F' J, c; a
5 _' m5 a2 {, ~
2 D- d/ n$ t7 B5 W1 b
# a3 e! t& M8 K
4 b1 V; D/ E5 q5 G% U- K$ N8 Q: s
! s9 j9 n' m+ G8 b
0 {! i+ ~# V. L1 Z0 H9 Y% [4 ~& a! S' k, z3 j: R  a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% b: Z" {* I% |! k3 h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  O( L8 Q$ X9 t) `" z3 j  \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' [7 m8 {, ?) I3 Q0 }4 \! q6 }

' l) ~  k- x6 ]/ s% D是不是需要在DSP.CFG中进行配置( a. A1 w2 z4 T' ~# T. C/ l* m. ~& p
我现在的配置为
8 x9 f# {. p0 A, A5 f1 U# ]  {
  {+ j* h- n" j: x/*
9 N# P6 @9 e3 T6 S& L4 z- t' U *  ======== Operating System Configuration ========* l% n( r5 i0 Q' ?
*/
3 k3 F5 g; W3 P3 R9 t+ i
1 W, H' I9 l: l, m, P; z/* no rts heap */
/ k/ v9 S$ m, wProgram.heap = 0;* K8 r' b" `! O& `- w4 L$ j
Program.argSize = 100;  /* minimum size */
8 v2 k" ]) ^6 ]- G7 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 m" p1 ?) @5 |, O% G+ \
2 M/ P9 ~- {7 w: b
/* create a default heap */
6 x2 s3 h8 a5 A: g3 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ u5 G6 ^# ]4 X8 j! @9 @% ~; |% v5 wvar heapMemParams = new HeapMem.Params();" n% G; w# C8 P
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 }. i9 v2 H% e9 k8 ?  a1 j2 Y2 ]! |% I! A( f
var Memory = xdc.useModule('xdc.runtime.Memory');  L# r: ?+ x" _2 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! ]" ?; @' d# A7 O) S) T9 c  m

% K1 P! t* y" [! q4 z9 A/* configure System module */
2 [) P% t) D3 k8 G4 A; ~4 k' a) Pvar SysMin = xdc.useModule('xdc.runtime.SysMin');
. L. A/ J  l( oSysMin.bufSize = 0x1000;! J& c& [3 C* Q2 [3 r
SysMin.flushAtExit = false;
. U' M  p& e# ]5 l% n  K2 E1 Q- g0 q; o7 S+ P& Y" q% z% G
var System = xdc.useModule('xdc.runtime.System');
0 `0 R# v2 R9 SSystem.SupportProxy = SysMin;
% m% y! r1 M! o2 z, ?- |7 G: s  t0 C1 K* A5 W, S0 e" S; T! P
/* configure SysBios to use the lower half of Timer 1 */
/ V3 o& u- a( Qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 P# v; g9 J! C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' y3 K) X- ^) n& h1 yTimer.timerSettings[1].master = true;
; |" J. |9 }# p. b: ]7 S' ^! WTimer.defaultHalf = Timer.Half_LOWER;8 X4 r9 v5 Y$ i; f3 I. u) y0 m+ y$ ~
Clock.timerId = 1;0 E8 g, ~/ M5 R) M/ T

! o/ b9 ]! v6 r! _. d7 _9 V- h7 ?# a& j5 x* I. o$ t
/*
0 J* ]# Z' Z- e# P *  ======== Miscellaneous Configuration ========
! E) n, h" F2 r% z* I3 m# c& o */9 f, A1 e. j. f* y, K1 C6 \2 y
$ V7 m* g* n6 \  T# o" i, ^* ?# i3 s" y
/* set default diags mask */3 Z) W: p* e2 x: H
var Diags = xdc.useModule('xdc.runtime.Diags');4 b# E# h% ~, N$ j0 Z: `" R
var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 A8 x1 F2 X/ p' `9 k. A$ \  t# S0 E5 Y
  X+ D; |0 F9 e8 aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 \) C! s% B/ x, ~: h4 |' j0 I
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' ^  ^7 l  [2 V8 |. _4 `
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& P9 b6 l. V3 o; I5 wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 n0 D8 P" z4 K5 X! `) ODefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- _. a/ b$ F& M* |% J
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* l4 W# k7 N4 `: b6 A
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 `  ~! A* U* E( a! Z0 j
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ P, ~: n8 D6 ?" R& T3 F+ B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- T& |0 N7 `* u- J+ w$ `5 p0 y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' j0 w8 H" s# [+ L( G* B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  h/ E+ ^9 t+ `5 mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  J- G. w) L6 Y4 V/ V) }
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  o& Z, s+ }; X7 e! @6 z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ o, U1 G" y' D2 s2 h" Z$ C1 l
: ]. y  O. x( s0 o) A7 |0 Q5 Y/* override diags mask for selected modules */
, n# o5 V/ }) uxdc.useModule('xdc.runtime.Main');
5 \- [- y5 c$ E  N0 C5 KDiags.setMaskMeta() N1 M  [# I3 N( h. o
    "xdc.runtime.Main",
; u1 X1 V6 R+ v4 d( r# [, B' Z9 a* I# T; ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 W0 d2 N! I8 a9 g
    Diags.RUNTIME_ON
! P# R- [/ P/ ~3 U. `% o' l1 f);
' C. p5 D1 w5 l) [& [' C* ~( |
$ j; W9 E+ _6 S: b! N6 I3 }var Registry = xdc.useModule('xdc.runtime.Registry');9 b) \) S* I) ^7 T2 O! x4 t% f& z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% A! ]5 R! w1 }' ~3 w2 Q6 a
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 x/ S+ h- Q) a" i- U1 }Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ G+ z+ v! D$ q' v) S; ?Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: Q  i9 L7 C, l. d: M% k. k

$ [1 w  C/ P( Y# b& d/* create a logger instance */! M# j1 b2 d5 H  U$ x; T' p8 p$ _
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 G! U# b/ P: d
var loggerBufP = new LoggerBuf.Params();
" [1 E3 m* o, I) z$ U- Z" p9 |; lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! B- q/ q6 q6 g( nloggerBufP.bufType = LoggerBuf.BufType_FIXED;2 N; i. {5 }' `" |0 U) J0 S
$ ?) I7 p( P0 A2 b
var appLogger = LoggerBuf.create(loggerBufP);
7 _+ w6 e, ]8 I! |3 AappLogger.instance.name = "AppLog_Core1";
6 E0 Z$ f3 H2 }0 v/ UDefaults.common$.logger = appLogger;* y1 W$ B7 _% J8 t- H4 X
Memory.defaultHeapSize = 0x8192;    - N1 ~$ O3 G+ n, Y6 d
Idle.idleFxns[0] = "&LEDStatus";
. H7 @2 f9 k; P7 J$ `3 d, GCache.initSize.l2Size = Cache.L2Size_32K;7 G7 D1 [7 q* o/ r' K  C
; g3 J" X! Y8 m- [' n- M# }
回复 支持 反对

使用道具 举报

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 */
9 D' O9 I7 c" w; G& }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 ^$ @) S! C, `! X8 p0 E( `var heapMemParams = new HeapMem.Params();: x7 p" B' T7 Q% ?
heapMemParams.size = 0x4000;
6 {7 U8 s  [# C2 \4 c9 E+ d; [; s
) p  k1 A: l9 {) Yvar Memory = xdc.useModule('xdc.runtime.Memory');; X0 a4 b, k5 p) y0 y: P# y+ Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 v6 k) {* B' }3 j" ^+ d$ d1 G; Q! A. n
我大约calloc  每次共计大小为5K*16bits,
; [0 k2 I3 A" c3 B4 F8 |$ F' |: f而默认配置才0x4000、需要改大。
- j& k- S( G  L0 }( J; m  b3 w' v+ E: `3 |2 g7 B: D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' B" t, Z0 x$ nProgram.heap = 0;+ e4 t8 u) ^" a8 k' v8 ]
Program.argSize = 100;  /* minimum size */8 ]6 l, W$ e( M8 Y% p" u6 y
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-7 01:11 , Processed in 0.044154 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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