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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 r( k. _/ U$ F  D
" |& w- a8 J* h6 t7 D: u/ W9 c  ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 Y2 t: E( }, t: ]
/ X" y! O+ S- |( w
其他程序段。。。。。5 f/ I) {8 m+ x4 G" ^# S+ f

% i, j+ j- N4 W  G: v: U5 ?9 r   free(x_d);4 g/ r+ b8 r" f5 `2 [

3 T  v2 I- @9 n# h2 ~使用DSP侧单独调试功能,验证动态申请没有问题,+ p) ]8 P5 @( L! W

8 i- f2 N* L2 l3 F: s0 y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! _; f5 M  N' ?0 E4 l  u
% ~9 j; B7 v- [0 G

/ `* ~. V0 ]/ ], N. G  w% v8 R) r3 l3 o8 g
2 T; _; s3 `2 Z# j
! e( C: D, E0 \) {3 O
1 ~. U: o4 P. k9 K$ E  E. W
# N/ t( P/ w  X' v1 [5 @4 l) J

4 ^6 }4 [: e1 o5 {
7 J, h& e  D( G( y8 K$ a2 H+ X9 I; c; [5 X! y; n
分享到:  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 */' R1 _4 Z% [9 d1 _% f! D8 O
Program.heap = 0;7 I# w4 W9 k8 X1 ]
Program.argSize = 100;  /* minimum size */
8 u# [0 {( T" u  ?Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */! f, \: h1 I% D) D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ @8 C8 l0 p9 t8 N
var heapMemParams = new HeapMem.Params();' k: [: A3 L+ Z
heapMemParams.size = 0x4000;3 E, e1 H- \) S# c3 L8 J- w

* A6 C! h3 W3 w  y( Cvar Memory = xdc.useModule('xdc.runtime.Memory');2 u: ~; i: O6 I( I- {6 ~  U0 X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ n* t( g4 y# h: [! M/ S) l& Z
4 t% |, a" e# G3 J" n我大约calloc  每次共计大小为5K*16bits,
0 n  b$ U9 Z; u# g9 y5 A而默认配置才0x4000、需要改大。
* i* c' S6 [$ l5 Z
9 p+ e+ \0 D2 ?0 M( A; [, m
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明3 e7 n5 m7 j: F; }) S: }, F3 k
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 s! X* i; w0 [! a; P# F4 v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- c0 J& N& V: H

" q" k& j- a8 @0 u/ c) H! ^3 D是不是需要在DSP.CFG中进行配置. j1 [# B% }0 X+ M7 F
我现在的配置为
; x  f* k5 \4 L2 j- @, s$ S
1 m8 X" Q* }+ G1 x; T0 F/*
9 C+ R; a& w; t7 E8 W. `  } *  ======== Operating System Configuration ========
& }/ t) t) N% ~! A */0 |4 `; N/ o  n( D: M: Y" j

2 Z' X/ T% y' @1 k4 T0 N" m/* no rts heap */2 @/ N/ a. e1 z
Program.heap = 0;
: Z% C2 G& B  LProgram.argSize = 100;  /* minimum size */& B# @0 @( O! }( ~% }0 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* R% g, e* ]3 s# e' a" `

, ?5 e, A. J3 L+ W' G  E/* create a default heap */
+ m+ E* R6 |/ q3 ~3 Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: F( D2 H6 v; {6 Qvar heapMemParams = new HeapMem.Params();
" Y5 r: P$ J6 L# xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ O: U  O+ l! O3 {; `5 e7 f; F/ s  z. i, O$ j8 N4 @0 h
var Memory = xdc.useModule('xdc.runtime.Memory');6 q) x, z1 l% A, z/ d1 r' V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 J8 d- ~1 G" f
' D( I5 G: {* f. W, n4 \6 O+ X
/* configure System module */
/ F) \8 [1 Y- q0 ^0 ~5 ~, T. Q6 Uvar SysMin = xdc.useModule('xdc.runtime.SysMin');
3 e, o1 m( z7 H9 NSysMin.bufSize = 0x1000;
# a( i( w( _; {; r1 BSysMin.flushAtExit = false;
5 V; g% j+ ~* i/ [4 D) ~7 r& L' F. h) E4 V
var System = xdc.useModule('xdc.runtime.System');
% t! b! ~3 F" D8 R4 `6 b' ESystem.SupportProxy = SysMin;
# W  G/ |1 t6 X9 I6 p  x# k! A; e; s2 q: W3 {* c2 Z2 K$ P7 S/ |
/* configure SysBios to use the lower half of Timer 1 */0 Z+ g, I5 w; s8 b
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 L3 M+ ^  W( T# L9 C9 ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 ]  _. N8 ]. y7 CTimer.timerSettings[1].master = true;
* T4 I8 N  d, ETimer.defaultHalf = Timer.Half_LOWER;- H' Z% C7 n* R7 V6 t# s
Clock.timerId = 1;
6 w5 P0 b4 p4 Q# e0 v3 T# i9 d1 u1 ^( b
9 O# S; Z1 u6 r# ]
/*' c. u$ x3 |' ?3 y7 q7 f# W+ z/ y
*  ======== Miscellaneous Configuration ========) \$ G. h" D6 H, N6 W3 H7 U. K! l
*/2 Q) B9 _3 j( Q# Q7 I* P1 X
: n/ Y6 V" a0 T/ d, u0 S+ ^
/* set default diags mask */
( V* X$ O5 {1 u, q& N- |; w4 |! T6 vvar Diags = xdc.useModule('xdc.runtime.Diags');8 ?) P8 t% y, B6 I$ i; f6 g* Z& c
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% {9 r/ j( i: }  W$ R( T2 C9 Z0 k. a6 B, C( L1 {
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 X. M; w4 a: U1 y  E( v- s
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( c# V# K& D5 L8 `3 C
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; c1 [4 `- N. j1 kDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: C% X( e% y/ z3 vDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, h0 P2 e, c/ ~7 v
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ ^6 l% b1 l( c/ f/ zDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 {. O, c" h4 v8 r. cDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( W/ T$ d/ a# v3 n' v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  Z& [6 \& d, dDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 }/ E& w* C1 G) uDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" a+ \4 s) _2 ^' A6 a" m$ i% hDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) M8 Y* }5 D4 q+ |  [- j' V* hDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 x0 f& n' @# Y' jDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 S) Z- b+ S8 J5 ~5 U6 R
7 z: E4 i& o5 g9 y7 g- n0 i" X8 n/* override diags mask for selected modules */
- W& O/ N& J" r( wxdc.useModule('xdc.runtime.Main');4 Q$ X% F% ^' [# E( |7 S
Diags.setMaskMeta(2 n3 Q6 c/ T0 F8 ?( ^
    "xdc.runtime.Main",4 w. L3 {& x# c
    Diags.ENTRY | Diags.EXIT | Diags.INFO," q# m3 k; U: W; f, I
    Diags.RUNTIME_ON
6 m! Z4 z1 |* W/ M8 k! w. M);) t# w$ N) N; J

1 f+ p. ^, F5 O/ v+ D. ?+ Yvar Registry = xdc.useModule('xdc.runtime.Registry');
6 {0 H; p- ?% G5 [Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 l' ]: o; L  a5 B
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 L( P0 O5 x2 B& R# R0 xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 F  u7 l; r2 O6 d& ?' b  R4 \) @4 FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ b: O8 R% U" p) C8 ^! P) R1 @  n
4 b9 E2 [; r  {/* create a logger instance */4 m4 k4 L, q8 ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 S% T3 Z  l9 R6 ^% zvar loggerBufP = new LoggerBuf.Params();
% K4 e) F7 A7 @: |, T0 AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 `, _' E. Y4 N7 u  XloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 i! t- m( S7 \3 }7 h8 Y: R/ g/ k% U; W8 R3 _8 `; {
var appLogger = LoggerBuf.create(loggerBufP);4 p% K' I: d5 q8 Q
appLogger.instance.name = "AppLog_Core1";
$ j" A7 s/ T* ?$ o8 F4 k2 zDefaults.common$.logger = appLogger;
+ m; h3 L! C% M1 D' W2 C4 n' {( yMemory.defaultHeapSize = 0x8192;    1 O3 C7 W6 C' F/ w; t
Idle.idleFxns[0] = "&LEDStatus";2 t! {) D9 m6 A! X- T
Cache.initSize.l2Size = Cache.L2Size_32K;
+ O) }6 z, U6 r
- r/ P9 {& S1 u
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-11 16:56 , Processed in 0.042925 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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