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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ P* U1 I- @5 S; A$ I4 J, L. H. w8 H+ ?# S# B9 D8 d$ n
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 ~( ?, {6 l: f0 b( F4 A2 l3 _
0 u  J" N6 Z, I2 `) H  J) c8 H
其他程序段。。。。。
, w# o, `5 }2 t5 q' ` 9 z1 V% ~- a, T9 y8 Z9 E* Y
   free(x_d);
4 p0 L) ?+ n" S3 z% Y& s
0 b  n0 j5 B7 x0 x+ H! |( j& i使用DSP侧单独调试功能,验证动态申请没有问题,. F4 z8 B2 _6 j1 c
2 }! k4 u1 U6 b4 y1 n" M" s3 S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 _( B& M; y. M' x" l2 u
! E  V: e# d: s, ~8 V* m
2 u/ ?# E# u0 [' o% Y0 o

+ `4 t4 I! P. o5 w  w) f
$ Y' ]8 b2 [( z8 P
" y0 X2 q, T* S, c, q" z) m
3 ^2 u, O6 L' e- F- K/ j# i! c, q  k0 s7 R

* o8 O/ ]1 B/ }- ]( @: U" l$ A: r% N5 b

3 c  D' ^* K& i* ]  l# x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 n# `' U/ ~' F" d% @) p! @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( \* L& i) H$ Z1 {) p(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 F: w2 B: `' H: _; C
! b) l1 m, S- F' l+ c
是不是需要在DSP.CFG中进行配置& N3 t) ^- s3 d, L- P# o
我现在的配置为
* L6 f( S& L$ m  T* F* Y& i/ t* f( a, |. }% t% T' o
/*# [5 m' p& o+ D& V' C* B
*  ======== Operating System Configuration ========" Y& A# s$ p' K  B3 a
*/
. K7 c8 G! s! ?; U
7 F/ ?6 Z% R2 V2 X6 p5 K+ J/* no rts heap */, S; W( Y" x2 X. x
Program.heap = 0;  i, I& |" m/ g8 M# W
Program.argSize = 100;  /* minimum size */) g; R; }4 U. z! s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  x$ J. z6 L* I# P$ M% u, E1 ]( v. l: X* q% K5 S# E
/* create a default heap */
4 o% x% F- e) C" l8 k7 X4 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 g- R$ I5 @2 S$ F& ?
var heapMemParams = new HeapMem.Params();* Z6 }  h3 j9 l3 p- X( W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ o7 i3 Y6 e# i4 {9 E8 d" K
" w) k+ U4 U) s' M
var Memory = xdc.useModule('xdc.runtime.Memory');& N* b1 K! j8 F7 {) L6 G' l/ ?' M8 [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* [) i7 @( e- X) b/ w2 P+ q. r

$ N+ y  q- G! I( k; \, X/* configure System module */8 c" ^4 g* |, Z5 a1 t8 K" J$ V
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" k, h: e7 c% c* F, _! |9 vSysMin.bufSize = 0x1000;
$ g! E+ l2 p* ^. O, ~2 ~SysMin.flushAtExit = false;+ d! W1 Y' X& U! y
/ U6 W' e" w2 z. Y' u/ ]1 s2 c& }
var System = xdc.useModule('xdc.runtime.System');/ t! H3 u5 y/ H( m5 l) U$ |
System.SupportProxy = SysMin;6 W- N9 u8 y+ w
  r# a! g4 V9 B5 Y6 `7 B
/* configure SysBios to use the lower half of Timer 1 */
* h4 ]! ]9 R6 c+ |var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" R  t* H; ^6 j
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 F' T  ^) j1 P6 V/ R* OTimer.timerSettings[1].master = true;! s2 N. K+ E9 T1 d* z4 k
Timer.defaultHalf = Timer.Half_LOWER;3 K- U1 Q) n. k1 M1 F) _) \2 K" z
Clock.timerId = 1;
: ]! |; R( s; r8 i! f; ~; S6 ^, q
& P" a1 w5 f5 R1 d
5 W4 D' @! Y3 `3 S9 v* U2 D0 I1 @/*. o1 T% Z5 C3 s. h' R
*  ======== Miscellaneous Configuration ========2 a2 V7 e7 h& ~) ]% B3 A
*// L7 u$ B+ ?+ v/ U) ]9 n% o2 u- c
, z1 [; @! C, Y. M3 }8 F2 G/ V
/* set default diags mask */  _3 W8 p0 D+ y$ y
var Diags = xdc.useModule('xdc.runtime.Diags');
& a+ Q4 V- J. V9 r6 `. Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 H) a: A/ d+ ~" n+ b- l' Z, n( [# W' s7 z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 Z0 z# T4 Z3 A$ _9 w; XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% d$ {& e* v$ Q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 j6 G+ `+ \7 w* tDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 Z5 L) H- y3 u  XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 I' p7 ^, n) U  f" x& q8 o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 ~# J$ Z& b7 `" tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! z8 I2 @! X" l+ h$ D0 Z- i
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" X8 Q! r+ b& H" B" ^4 C+ H! G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ U7 W1 t5 j+ c) ~7 W
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% l/ U" h( c& v# B" EDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ G. A/ \8 q  L! B. C% Q" vDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 W4 o$ n4 o; ?
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 n8 W: X: Z& {' k) X% Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 J0 m% l1 L* A; U) u; Y- t) u0 _* O* {
/* override diags mask for selected modules */4 X: k8 d1 p, W" k5 o+ f
xdc.useModule('xdc.runtime.Main');& n; i! J' j8 {* x
Diags.setMaskMeta(
1 p2 t$ k3 N0 y3 r; Z    "xdc.runtime.Main",' b% D2 U5 S3 v0 p( L
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( h4 m; R, O, x$ j/ l- l3 J. I
    Diags.RUNTIME_ON( f. x- Q8 q4 C
);# N6 ~* L1 n' P
" t" ]. S& N- t. [, W- j5 ~
var Registry = xdc.useModule('xdc.runtime.Registry');
; h9 W4 \0 Z0 W" v# V# pRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& q) {: ]1 H$ Q  I3 L! URegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% J; Z: z$ N% o7 g5 ^; |0 B9 d* K% f
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. o( G" }& l% ^; Q# d" e& hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ p# e. {: V. N. s- J# A9 h+ V
& f8 l+ g3 f$ k! r/* create a logger instance */
8 e& s" Q9 L7 v9 i' R0 a$ X8 rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% r/ C1 a3 t0 X* s0 M! dvar loggerBufP = new LoggerBuf.Params();2 H9 ^( X: g: ~
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 _7 j# J' B. D: @8 j  j7 E$ w8 b$ k
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 P, _0 {) U8 c' j7 Q  o, K3 I  D: t
var appLogger = LoggerBuf.create(loggerBufP);
0 g( {. o: d1 u3 V  WappLogger.instance.name = "AppLog_Core1";
( v& r% M2 R8 V  `2 k) WDefaults.common$.logger = appLogger;. ^0 u5 \3 l  z/ O
Memory.defaultHeapSize = 0x8192;    , u( t/ b. u+ E
Idle.idleFxns[0] = "&LEDStatus";
6 P4 n6 A, K  b5 _, ?( [2 WCache.initSize.l2Size = Cache.L2Size_32K;
" x1 r5 \* T) Z0 B# I6 i) l6 r! e' j0 d: t& t- X
回复 支持 反对

使用道具 举报

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 */
$ \! v3 e! f" `  Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- m- b" g% e) x' n# B( E' p
var heapMemParams = new HeapMem.Params();7 y. ~' U* T* v* Y( e( I2 m) E
heapMemParams.size = 0x4000;; W" c6 B/ p7 F, \
; M. \9 e' `' C' I  r, a
var Memory = xdc.useModule('xdc.runtime.Memory');
/ R  w6 Q5 t, LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& W- V; Q; f+ t1 h: M
! Z* M6 ]8 M* u$ G, I; E我大约calloc  每次共计大小为5K*16bits,
9 s) H5 M) w2 G9 \而默认配置才0x4000、需要改大。+ M/ C, u% G5 R( Y' f

3 j5 w' V5 o: u( G3 I' v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 a+ J7 [0 \" K. z6 LProgram.heap = 0;1 L7 r( k4 o& p4 ?5 U$ l* u5 L
Program.argSize = 100;  /* minimum size */! U1 O) I( e3 i' y, l3 l# R
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-9 17:46 , Processed in 0.041522 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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