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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ n) E4 B& `$ A% d

. g5 h) I; L  C- y( Q3 z: g3 R    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 a$ O& W/ X* f( o9 C
4 v1 S: T0 p/ b4 U/ t
其他程序段。。。。。- B( [& Y8 e& u+ r
, L2 J3 t" g" T. I8 Q6 l
   free(x_d);
: _) A/ H1 Y: E* z, Y" ~" _6 g& _' @/ @: k0 Z8 z
使用DSP侧单独调试功能,验证动态申请没有问题,
: z! J1 E3 D0 L4 X1 M5 v' G
4 Q! T$ E; o5 g( F' j4 @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. e& O8 W' Q/ M) S
% L" }: J& b$ ]& o! P9 z1 ~

: z4 }; X9 m8 Z  i' S" a2 H2 K. k, o0 d1 v# _/ x
# f) V0 i# E; c9 G! T9 N3 J+ g! y6 X
3 G1 q5 D) ]2 M) @
3 q7 F2 l9 q$ T( b: B) j0 z2 f* @
& ^. u3 N, `5 \/ Z5 g, [
" ^" H& a% |9 K, a
: f! L- N6 C4 h1 A' B4 h1 r$ S0 r
3 \  y' L) `: q6 j9 l3 A( K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( d9 i* J/ V* \, z5 i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! ~- O0 O0 O1 ]  A; B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- L/ a  [- I8 z

) u6 D1 G8 ?; t是不是需要在DSP.CFG中进行配置
7 b+ s+ @% ]8 J7 O. _我现在的配置为+ {. A6 I5 I& Y( {7 _1 Y7 ^
! H+ D- ^" H  X) x
/*
8 o! O% h3 S6 V: S0 z5 y  d *  ======== Operating System Configuration ========! x$ {) W, `, W
*/
" Y+ u+ i, [1 f: f: ?  n- e* X$ Y1 Z6 j% Q" K4 q3 I8 [
/* no rts heap */
- g  X+ Z' y* i% nProgram.heap = 0;2 ]9 |8 k# M) U, I6 P+ q) \
Program.argSize = 100;  /* minimum size */2 x; i) `6 o+ B0 Y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 I0 N) @5 {$ R  d; x7 q+ n( b5 d( C/ E0 z% z4 X, R5 O6 `, B
/* create a default heap */' c1 G1 F" x+ v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 Z7 S2 b. d% J- W( Hvar heapMemParams = new HeapMem.Params();/ y# b7 z& \' {/ v% d/ u. N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ u# n3 J' q5 E3 L3 q
2 K: C$ \0 L9 l7 I
var Memory = xdc.useModule('xdc.runtime.Memory');
& M& P; D6 e/ N5 h/ R0 k: {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: d) u. Y: N. p6 J) D+ r
7 E' y; W. Q( g/* configure System module */
5 N- D# S1 m3 \- m9 P9 b- Kvar SysMin = xdc.useModule('xdc.runtime.SysMin');$ J, d- [$ R+ C3 y% v* y
SysMin.bufSize = 0x1000;: I/ G0 |3 C! a- N% G
SysMin.flushAtExit = false;' R& N5 z* N* {2 ], b( T% U0 W% m( B8 u
) M, X9 |7 c1 k, S" a8 Z2 \& c
var System = xdc.useModule('xdc.runtime.System');0 p! ?! S& ]1 t, q' X- Q
System.SupportProxy = SysMin;" [- z" Y+ E( O9 ?8 y

- k. ]  N( z" [8 ~/* configure SysBios to use the lower half of Timer 1 */
4 i9 b5 X+ D0 J# I/ v" Gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 W/ M- c, z' ?5 O, E* C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! {8 f0 r  S" X0 z; G8 l8 J8 @Timer.timerSettings[1].master = true;
6 q& H3 V; M& W+ UTimer.defaultHalf = Timer.Half_LOWER;# {$ c' Y1 U7 h- O
Clock.timerId = 1;8 T! L! o: ^5 v6 u1 {0 \$ e# J, G
' V+ g, C* f8 X2 m, M
# n4 Y4 V. ]" T* ~& m
/*2 {/ O' j  r3 E3 X" \5 s
*  ======== Miscellaneous Configuration ========
. }! W$ m) _8 A- `( v5 p */9 x: m3 w: W  {" @" G4 s1 E

: P- p# J$ I' I/* set default diags mask */' E# @  q+ q( Q# u4 a. c
var Diags = xdc.useModule('xdc.runtime.Diags');
! D; B8 ^5 l( c# t: ?var Defaults = xdc.useModule('xdc.runtime.Defaults');$ C% E# ?, e( W9 r, x2 G; v, R

- ^5 J: |* J7 D4 s* ^- UDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! e' Q+ m6 Z3 J5 cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 j) W6 y. h9 D* D) EDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; B- @8 l& B2 T  j" s5 B
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 \( y: }% z4 S( s# dDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& M( Z8 \) |( d( k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 O3 R+ ~1 |0 c" H$ D! ]" kDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 [- G! U4 ^; @, v2 y5 tDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 u! e  R+ v/ ^  Y) `6 [2 y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: w) ^" Z# S& Z1 q" I% j5 q5 L8 u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( \# W+ @' s8 N7 l6 J2 l4 v
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 u9 J- B" m7 W; c. _( S2 ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' C/ j: i! u& b# {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, g" R9 z1 P' [% W( o# S% Z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 ~- v1 f# t. e7 @0 ?7 @4 l# |* f

$ ~3 Q6 [- e( A( h* j) Y/* override diags mask for selected modules */3 S$ s8 b; H7 D/ ?+ i
xdc.useModule('xdc.runtime.Main');
. U) H* d# _( a$ ?Diags.setMaskMeta(5 G9 W  Z/ j3 Y
    "xdc.runtime.Main",% e5 o& y4 J0 e% g5 m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* A) m( {) {( k7 z/ j9 [
    Diags.RUNTIME_ON4 i5 D2 i) Q$ K- }9 Z) I
);
) t! i& M/ F7 H' M$ Y3 d& P, V
7 o0 i; @5 G9 N: m  W( t+ I0 j# d. \0 Qvar Registry = xdc.useModule('xdc.runtime.Registry');
, V& ?/ K) r  M1 b: kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 O6 I* y/ ^. l7 ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 N! g  V, K# d6 }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 D+ R1 l# _5 z5 `* C- c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. p0 R  ?( G  b  ^: ?6 D6 t

6 i' F+ V* H8 A! O/* create a logger instance */+ K: ~+ c1 O2 a
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' s* Q* `8 B" c! evar loggerBufP = new LoggerBuf.Params();
3 C& a6 p0 a% t8 ~9 O: w9 M: `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* ?; B3 N1 L9 k- X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 J/ o$ m+ g) F4 I, o  c5 P
3 a9 \9 ^. b* Y( Kvar appLogger = LoggerBuf.create(loggerBufP);& y/ p" N& n$ H
appLogger.instance.name = "AppLog_Core1";
) R4 m; C6 n9 H! _2 O( l' YDefaults.common$.logger = appLogger;
" e" e+ b0 I8 \2 @+ u3 `Memory.defaultHeapSize = 0x8192;    : T$ Z& ~% N3 I! a9 B
Idle.idleFxns[0] = "&LEDStatus";$ V3 a+ d' B# P5 g3 l' f& e' Y
Cache.initSize.l2Size = Cache.L2Size_32K;
& L5 G! p' M( r% F6 b) r+ _4 O6 Q  e* s) y8 U4 U3 E1 H9 ?7 q3 h+ s
回复 支持 反对

使用道具 举报

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 */% J1 N" k  r7 Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ A, c$ Q/ S+ V
var heapMemParams = new HeapMem.Params();! [0 X6 V+ q/ J7 o: ]+ {
heapMemParams.size = 0x4000;
+ o7 |% a1 n  a4 Y- n& ^* H  z: M+ m& ^' A" d7 q
var Memory = xdc.useModule('xdc.runtime.Memory');$ H: P9 |6 H1 v; q+ R" M+ e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  \8 v+ Q9 Q* C7 B* Z4 R
2 E- g9 p: T1 I' ?& G9 k. _3 N" U
我大约calloc  每次共计大小为5K*16bits,
" n6 L4 \( a; t$ v: j! M! H5 [" H1 v而默认配置才0x4000、需要改大。1 m6 t7 r( J' t1 \% x5 N) t. l

6 y" G! m  Z6 i: k% \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 ~# Q! B( G6 X1 p1 r
Program.heap = 0;8 N) b+ a; ^$ b/ S5 ]
Program.argSize = 100;  /* minimum size */, _( u, R* h' R) u- u1 O3 }: `1 q. ^
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-26 09:57 , Processed in 0.042161 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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