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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; P$ g% _4 Q: |5 `: t. Y# W# L! l  ?5 N# @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ _4 k" y, {, H) h- m+ \1 n
! v$ u. N" O3 a2 f% E
其他程序段。。。。。
0 e2 K- e/ C" `* O
- |1 w5 [5 W$ d8 a% S6 S' K/ x4 b   free(x_d);  F7 n7 ~/ Y, H0 o5 _
8 `/ [" D! s) G# f2 G7 e2 q* ~  h: ]! L
使用DSP侧单独调试功能,验证动态申请没有问题,
. L3 i  [0 z4 S/ r$ W  ]* n' o" k( I& B5 N! M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! w- V. h! @" o- h1 N; F

/ T, Q. L  i1 V3 l9 @
. s& ]4 u- N) ~5 P" N9 V) m
2 _* A% c  p7 U' o+ R, H3 T: I. {" q5 k% c

. p9 R4 d, C& Z6 K! ]) Q2 l5 b
6 f* F: e+ |) m: Q. W4 P/ x0 k/ U. A5 T  N4 J
% \( H& F' k/ f( _' v! V4 [& u0 V
1 }- b2 h; s8 M( m

. t! C0 Y* u) t% e; U
分享到:  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 */
/ U; x: Q2 d: N( m  D$ qProgram.heap = 0;. h2 @1 {8 Y; t- N& L7 o2 p
Program.argSize = 100;  /* minimum size */  s' H+ y" X2 B8 K
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
# p: t3 V6 s& b8 M0 Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ h+ ^& \/ k* W& Rvar heapMemParams = new HeapMem.Params();+ |; A5 F- l3 \# V# M
heapMemParams.size = 0x4000;
8 c" E' Z9 k6 c- D! c; x: n& J: A+ ]  g1 C' e8 J5 h% V
var Memory = xdc.useModule('xdc.runtime.Memory');
+ k/ V7 ^9 e% }$ k" K- d7 HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) K' T3 w2 z- r. o+ P8 `/ G6 M6 V8 @
我大约calloc  每次共计大小为5K*16bits,
+ y' u. q8 {7 y而默认配置才0x4000、需要改大。
+ J/ j0 ]; w! i, h1 Q8 U( T& t& {
8 q" b# m7 y, u; w) w, F1 m, n6 p! I+ \0 C
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明, A- I$ q( f5 Z+ {. ~; O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ \" J, m) W$ E: z(不过疑惑的是,为何单独DSP仿真就没有问题呢?), K# t1 D! I: ~
+ ?* z; w* n6 l" {+ a- W' }
是不是需要在DSP.CFG中进行配置' I. E' u! Z* M$ N4 h
我现在的配置为% [6 N; [; F& E& a

4 ^: H5 m* M+ @- j/*
3 k; G  f9 T2 ]' g *  ======== Operating System Configuration ========; ~2 T7 O$ Y9 K9 p4 U# T
*/
0 h( R& w) G/ g* w2 p6 {4 D0 Q0 j) B' N' [
/* no rts heap */
+ V& y4 f- N. x5 s, \3 e0 m0 _Program.heap = 0;( k+ ?) M- _: w+ Y
Program.argSize = 100;  /* minimum size */
; H5 z0 D/ F: E$ l3 _Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! k; N8 _$ r) I! m* v0 X- h( V! B8 G0 H% N
/* create a default heap */: A: \0 ^+ U' s8 q- t* r% S# k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 s, J6 h  Z8 Y* U$ kvar heapMemParams = new HeapMem.Params();+ S: r+ r' O) w0 r
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# z5 H2 U& [) `3 X) U4 C; _- n
& x; L! F0 T3 A' B- g
var Memory = xdc.useModule('xdc.runtime.Memory');3 R4 I  N1 _7 z% B4 O+ u8 T" ]  L  c; v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* H% @- N5 T0 _; r% B5 R9 {

2 g" _4 ?; S! @; N7 p/* configure System module */
. S' r7 H# K, q. O1 Jvar SysMin = xdc.useModule('xdc.runtime.SysMin');; C( s/ p& F- i) @7 o
SysMin.bufSize = 0x1000;
0 I2 a8 p+ a( a5 d: jSysMin.flushAtExit = false;. w3 j  O+ D- A" n( r: @5 [- \8 B

! r  k- i- u4 K0 Kvar System = xdc.useModule('xdc.runtime.System');. ]2 \2 u5 _. y. W+ D1 @* v
System.SupportProxy = SysMin;
, D- x* @% ?8 G# G0 t' j6 Z1 {; W8 K
/* configure SysBios to use the lower half of Timer 1 */
% y" P* T9 T& w4 @  E! j; ^var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' O& ?6 D4 j" D( ~1 Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');  s( ~0 c1 k) b1 p* h# g0 m
Timer.timerSettings[1].master = true;
5 Q' |/ Z4 C- {# c1 H: @Timer.defaultHalf = Timer.Half_LOWER;3 I: \  Z: A9 ]! h$ @
Clock.timerId = 1;
) j0 x4 L2 q5 n2 {2 [: N$ x" A
, g0 M% z" x" k) t5 f; [
5 y9 ~! c. C2 i" s. e8 a/*. o; c4 T2 ~0 i) g) l1 B  R, B8 O
*  ======== Miscellaneous Configuration ========
0 l5 z7 S3 y! ^) a7 c */
8 X+ W; X$ T3 g: y1 ~" ~& _' B; o( u1 }+ S& y3 K9 J
/* set default diags mask */, t6 ~2 E$ x) g. z  Y9 A. F
var Diags = xdc.useModule('xdc.runtime.Diags');
/ q' U5 L7 ^) f' M: Hvar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 A9 ^5 a2 K7 L8 H+ j" v" {; Y8 e8 ?- x3 V, f# n. M: T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" S8 j( l- H* s( m7 u% a* O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; V3 w7 P* C) d3 n/ r( A, ]
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 k1 ?/ @, w. {. T( FDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) z9 P- Q/ ?! G3 _& a, {  h+ u4 L
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ K1 a0 c8 i, [8 H3 b% R! nDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* D0 q7 f7 e4 N/ y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) t' v) ]' H6 Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 r4 b& l6 s% ~( j' y, w
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 m3 l9 k  x# P, a' p0 E$ t$ uDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 H& c8 E6 r1 v; V' I' zDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# z" j) @5 ?3 T/ g
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 F0 Y( Q) I) _2 P. u2 J/ ]9 u
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) C! ?2 ^& X/ FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( d, z7 ]; |+ E( Q- J
" k, g# H8 g% R: @. }' D4 b+ C/* override diags mask for selected modules */
( p  L; P' y% zxdc.useModule('xdc.runtime.Main');
6 I4 s. `$ p# @$ D" gDiags.setMaskMeta(0 P4 o+ b3 P: u% [, D) W
    "xdc.runtime.Main",
; B& t  ?( K) J, O1 l% X/ {+ q, Y    Diags.ENTRY | Diags.EXIT | Diags.INFO,& _! E  A# E$ Q, U3 [7 [" G
    Diags.RUNTIME_ON" ?. x1 z& W3 S( N3 F
);  T8 C' v& J. o* Q1 T
2 P7 ?! {9 C0 ?+ u, D8 D
var Registry = xdc.useModule('xdc.runtime.Registry');
5 U7 n- F# [, i2 F, _: ^Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% n  z3 j0 ?; uRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 K; L5 N+ o7 W0 \Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 j/ e' [- N0 ^) M$ o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" x* y& B# S+ o7 @% H# K
9 {/ ~6 f: S, o3 L/* create a logger instance */' `) E8 E1 X9 u; ^4 b5 _- s
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" h" ]4 T6 v, l; b) y: xvar loggerBufP = new LoggerBuf.Params();# ^0 E8 S% o6 m+ e# w2 O3 W
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- a- r' O5 u- D( b! k( q* S  H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
& w3 O+ q8 k% m, ]7 ^
3 _( c/ e6 J, {' B" L% c  `" u4 Jvar appLogger = LoggerBuf.create(loggerBufP);
  @% V' L7 u. O  P& T! K5 N9 FappLogger.instance.name = "AppLog_Core1";
: i: @  c$ i. LDefaults.common$.logger = appLogger;
1 r& G1 m+ H0 x+ Q3 h$ m& iMemory.defaultHeapSize = 0x8192;    # |: H: T# e# s+ j
Idle.idleFxns[0] = "&LEDStatus";2 x! _6 Y6 _  I
Cache.initSize.l2Size = Cache.L2Size_32K;
+ j2 D: V) B% e3 s0 e) a" ^' O& e1 \, J1 a1 c8 z5 |
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 03:12 , Processed in 0.040805 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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